bn4r 0.1.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (432) hide show
  1. data/CHANGELOG +15 -1
  2. data/README +9 -2
  3. data/doc/classes/BNTPGFromPositiveNegativeRelations.html +184 -171
  4. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000031.html +20 -20
  5. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000032.html +15 -15
  6. data/doc/classes/BayesNet.html +986 -560
  7. data/doc/classes/BayesNet.src/M000003.html +19 -17
  8. data/doc/classes/BayesNet.src/M000004.html +34 -16
  9. data/doc/classes/BayesNet.src/M000005.html +24 -17
  10. data/doc/classes/BayesNet.src/M000006.html +18 -18
  11. data/doc/classes/BayesNet.src/M000007.html +21 -17
  12. data/doc/classes/BayesNet.src/M000008.html +17 -19
  13. data/doc/classes/BayesNet.src/M000009.html +17 -18
  14. data/doc/classes/BayesNet.src/M000010.html +18 -17
  15. data/doc/classes/BayesNet.src/M000011.html +17 -22
  16. data/doc/classes/BayesNet.src/M000012.html +17 -24
  17. data/doc/classes/BayesNet.src/M000013.html +17 -26
  18. data/doc/classes/BayesNet.src/M000014.html +20 -42
  19. data/doc/classes/BayesNet.src/M000015.html +18 -33
  20. data/doc/classes/BayesNet.src/M000016.html +17 -38
  21. data/doc/classes/BayesNet.src/M000017.html +17 -37
  22. data/doc/classes/BayesNet.src/M000018.html +19 -32
  23. data/doc/classes/BayesNet.src/M000019.html +18 -19
  24. data/doc/classes/BayesNet.src/M000020.html +17 -35
  25. data/doc/classes/BayesNet.src/M000021.html +22 -52
  26. data/doc/classes/BayesNet.src/M000022.html +22 -16
  27. data/doc/classes/BayesNet.src/M000023.html +24 -17
  28. data/doc/classes/BayesNet.src/M000024.html +30 -16
  29. data/doc/classes/BayesNet.src/M000025.html +42 -18
  30. data/doc/classes/BayesNet.src/M000026.html +32 -16
  31. data/doc/classes/BayesNet.src/M000027.html +38 -19
  32. data/doc/classes/BayesNet.src/M000028.html +42 -18
  33. data/doc/classes/BayesNet.src/M000029.html +32 -17
  34. data/doc/classes/BayesNet.src/M000030.html +52 -22
  35. data/doc/classes/BayesNetNode.html +604 -476
  36. data/doc/classes/BayesNetNode.src/M000033.html +21 -17
  37. data/doc/classes/BayesNetNode.src/M000034.html +17 -17
  38. data/doc/classes/BayesNetNode.src/M000035.html +20 -25
  39. data/doc/classes/BayesNetNode.src/M000036.html +17 -17
  40. data/doc/classes/BayesNetNode.src/M000037.html +17 -19
  41. data/doc/classes/BayesNetNode.src/M000038.html +17 -17
  42. data/doc/classes/BayesNetNode.src/M000039.html +17 -22
  43. data/doc/classes/BayesNetNode.src/M000040.html +17 -51
  44. data/doc/classes/BayesNetNode.src/M000041.html +21 -18
  45. data/doc/classes/BayesNetNode.src/M000042.html +18 -17
  46. data/doc/classes/BayesNetNode.src/M000043.html +17 -17
  47. data/doc/classes/BayesNetNode.src/M000044.html +17 -25
  48. data/doc/classes/BayesNetNode.src/M000045.html +24 -16
  49. data/doc/classes/BayesNetNode.src/M000046.html +17 -19
  50. data/doc/classes/BayesNetNode.src/M000047.html +19 -17
  51. data/doc/classes/BayesNetNode.src/M000048.html +17 -22
  52. data/doc/classes/BayesNetNode.src/M000049.html +23 -51
  53. data/doc/classes/BayesNetNode.src/M000050.html +51 -21
  54. data/doc/classes/BnTableProbabilitiesGenerator.html +122 -142
  55. data/doc/classes/BnTableProbabilitiesGenerator.src/{M000036.html → M000051.html} +15 -15
  56. data/doc/created.rid +1 -1
  57. data/doc/files/README.html +267 -264
  58. data/doc/files/README_es.html +271 -0
  59. data/doc/files/lib/bn4r/bn_algorithms_rb.html +125 -130
  60. data/doc/files/lib/bn4r/bn_export_rb.html +119 -124
  61. data/doc/files/lib/bn4r/bn_import_rb.html +133 -144
  62. data/doc/files/lib/bn4r/bn_rb.html +124 -134
  63. data/doc/files/lib/bn4r/bn_table_probabilities_rb.html +165 -140
  64. data/doc/files/lib/bn4r/bn_table_probabilities_rb.src/M000001.html +15 -15
  65. data/doc/files/lib/bn4r/bn_table_probabilities_rb.src/M000002.html +26 -0
  66. data/doc/files/lib/bn4r/version_rb.html +97 -100
  67. data/doc/files/lib/bn4r_rb.html +108 -113
  68. data/doc/fr_class_index.html +49 -30
  69. data/doc/fr_file_index.html +54 -34
  70. data/doc/fr_method_index.html +96 -67
  71. data/doc/index.html +25 -23
  72. data/doc/rdoc-style.css +175 -208
  73. data/lib/bn4r/bn.rb +76 -5
  74. data/lib/bn4r/bn_algorithms.rb +13 -3
  75. data/lib/bn4r/bn_export.rb +29 -15
  76. data/lib/bn4r/bn_table_probabilities.rb +10 -0
  77. data/lib/bn4r/version.rb +2 -2
  78. data/test/bn4r_test.rb +104 -0
  79. data/test/test_helper.rb +1 -0
  80. metadata +15 -393
  81. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000018.html +0 -41
  82. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000019.html +0 -23
  83. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000021.html +0 -41
  84. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000022.html +0 -41
  85. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000023.html +0 -23
  86. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000143.html +0 -41
  87. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000144.html +0 -23
  88. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000145.html +0 -41
  89. data/doc/classes/BNTPGFromPositiveNegativeRelations.src/M000146.html +0 -23
  90. data/doc/classes/BayesNet.src/M000001.html +0 -22
  91. data/doc/classes/BayesNet.src/M000002.html +0 -25
  92. data/doc/classes/BayesNet.src/M000091.html +0 -25
  93. data/doc/classes/BayesNet.src/M000092.html +0 -18
  94. data/doc/classes/BayesNet.src/M000093.html +0 -18
  95. data/doc/classes/BayesNet.src/M000094.html +0 -18
  96. data/doc/classes/BayesNet.src/M000095.html +0 -19
  97. data/doc/classes/BayesNet.src/M000096.html +0 -18
  98. data/doc/classes/BayesNet.src/M000097.html +0 -20
  99. data/doc/classes/BayesNet.src/M000098.html +0 -19
  100. data/doc/classes/BayesNet.src/M000099.html +0 -18
  101. data/doc/classes/BayesNet.src/M000100.html +0 -23
  102. data/doc/classes/BayesNet.src/M000101.html +0 -25
  103. data/doc/classes/BayesNet.src/M000102.html +0 -27
  104. data/doc/classes/BayesNet.src/M000103.html +0 -43
  105. data/doc/classes/BayesNet.src/M000104.html +0 -34
  106. data/doc/classes/BayesNet.src/M000105.html +0 -39
  107. data/doc/classes/BayesNet.src/M000106.html +0 -38
  108. data/doc/classes/BayesNet.src/M000107.html +0 -33
  109. data/doc/classes/BayesNet.src/M000108.html +0 -18
  110. data/doc/classes/BayesNet.src/M000109.html +0 -35
  111. data/doc/classes/BayesNet.src/M000110.html +0 -22
  112. data/doc/classes/BayesNet.src/M000111.html +0 -18
  113. data/doc/classes/BayesNet.src/M000112.html +0 -18
  114. data/doc/classes/BayesNet.src/M000113.html +0 -18
  115. data/doc/classes/BayesNet.src/M000114.html +0 -19
  116. data/doc/classes/BayesNet.src/M000115.html +0 -18
  117. data/doc/classes/BayesNet.src/M000116.html +0 -20
  118. data/doc/classes/BayesNet.src/M000117.html +0 -19
  119. data/doc/classes/BayesNet.src/M000118.html +0 -18
  120. data/doc/classes/BayesNet.src/M000119.html +0 -23
  121. data/doc/classes/BayesNet.src/M000120.html +0 -25
  122. data/doc/classes/BayesNet.src/M000121.html +0 -27
  123. data/doc/classes/BayesNet.src/M000122.html +0 -43
  124. data/doc/classes/BayesNet.src/M000123.html +0 -33
  125. data/doc/classes/BayesNet.src/M000124.html +0 -39
  126. data/doc/classes/BayesNet.src/M000125.html +0 -38
  127. data/doc/classes/BayesNet.src/M000126.html +0 -33
  128. data/doc/classes/BayesNetNode.src/M000020.html +0 -22
  129. data/doc/classes/BayesNetNode.src/M000021.html +0 -21
  130. data/doc/classes/BayesNetNode.src/M000022.html +0 -18
  131. data/doc/classes/BayesNetNode.src/M000023.html +0 -22
  132. data/doc/classes/BayesNetNode.src/M000024.html +0 -22
  133. data/doc/classes/BayesNetNode.src/M000025.html +0 -21
  134. data/doc/classes/BayesNetNode.src/M000026.html +0 -18
  135. data/doc/classes/BayesNetNode.src/M000027.html +0 -18
  136. data/doc/classes/BayesNetNode.src/M000028.html +0 -18
  137. data/doc/classes/BayesNetNode.src/M000029.html +0 -18
  138. data/doc/classes/BayesNetNode.src/M000030.html +0 -18
  139. data/doc/classes/BayesNetNode.src/M000031.html +0 -19
  140. data/doc/classes/BayesNetNode.src/M000032.html +0 -19
  141. data/doc/classes/BayesNetNode.src/M000051.html +0 -21
  142. data/doc/classes/BayesNetNode.src/M000052.html +0 -18
  143. data/doc/classes/BayesNetNode.src/M000053.html +0 -18
  144. data/doc/classes/BayesNetNode.src/M000054.html +0 -18
  145. data/doc/classes/BayesNetNode.src/M000055.html +0 -18
  146. data/doc/classes/BayesNetNode.src/M000056.html +0 -18
  147. data/doc/classes/BayesNetNode.src/M000057.html +0 -19
  148. data/doc/classes/BayesNetNode.src/M000058.html +0 -19
  149. data/doc/classes/BayesNetNode.src/M000059.html +0 -18
  150. data/doc/classes/BayesNetNode.src/M000060.html +0 -18
  151. data/doc/classes/BayesNetNode.src/M000061.html +0 -26
  152. data/doc/classes/BayesNetNode.src/M000062.html +0 -18
  153. data/doc/classes/BayesNetNode.src/M000063.html +0 -20
  154. data/doc/classes/BayesNetNode.src/M000064.html +0 -18
  155. data/doc/classes/BayesNetNode.src/M000065.html +0 -23
  156. data/doc/classes/BayesNetNode.src/M000066.html +0 -52
  157. data/doc/classes/BayesNetNode.src/M000147.html +0 -22
  158. data/doc/classes/BayesNetNode.src/M000148.html +0 -21
  159. data/doc/classes/BayesNetNode.src/M000149.html +0 -18
  160. data/doc/classes/BayesNetNode.src/M000150.html +0 -18
  161. data/doc/classes/BayesNetNode.src/M000151.html +0 -18
  162. data/doc/classes/BayesNetNode.src/M000152.html +0 -18
  163. data/doc/classes/BayesNetNode.src/M000153.html +0 -18
  164. data/doc/classes/BayesNetNode.src/M000154.html +0 -19
  165. data/doc/classes/BayesNetNode.src/M000155.html +0 -19
  166. data/doc/classes/BayesNetNode.src/M000156.html +0 -18
  167. data/doc/classes/BayesNetNode.src/M000157.html +0 -18
  168. data/doc/classes/BayesNetNode.src/M000158.html +0 -26
  169. data/doc/classes/BayesNetNode.src/M000159.html +0 -18
  170. data/doc/classes/BayesNetNode.src/M000160.html +0 -20
  171. data/doc/classes/BayesNetNode.src/M000161.html +0 -18
  172. data/doc/classes/BayesNetNode.src/M000162.html +0 -23
  173. data/doc/classes/BayesNetNode.src/M000163.html +0 -52
  174. data/doc/classes/BayesNetNode.src/M000164.html +0 -22
  175. data/doc/classes/BayesNetNode.src/M000165.html +0 -21
  176. data/doc/classes/BayesNetNode.src/M000166.html +0 -18
  177. data/doc/classes/BayesNetNode.src/M000167.html +0 -18
  178. data/doc/classes/BayesNetNode.src/M000168.html +0 -18
  179. data/doc/classes/BayesNetNode.src/M000169.html +0 -18
  180. data/doc/classes/BayesNetNode.src/M000170.html +0 -18
  181. data/doc/classes/BayesNetNode.src/M000171.html +0 -19
  182. data/doc/classes/BayesNetNode.src/M000172.html +0 -18
  183. data/doc/classes/BayesNetNode.src/M000173.html +0 -18
  184. data/doc/classes/BayesNetNode.src/M000174.html +0 -26
  185. data/doc/classes/BayesNetNode.src/M000175.html +0 -18
  186. data/doc/classes/BayesNetNode.src/M000176.html +0 -20
  187. data/doc/classes/BayesNetNode.src/M000177.html +0 -18
  188. data/doc/classes/BayesNetNode.src/M000178.html +0 -23
  189. data/doc/classes/BayesNetNode.src/M000179.html +0 -52
  190. data/doc/classes/Bn4rTest.html +0 -549
  191. data/doc/classes/Bn4rTest.src/M000180.html +0 -17
  192. data/doc/classes/Bn4rTest.src/M000181.html +0 -21
  193. data/doc/classes/Bn4rTest.src/M000182.html +0 -21
  194. data/doc/classes/Bn4rTest.src/M000183.html +0 -34
  195. data/doc/classes/Bn4rTest.src/M000184.html +0 -27
  196. data/doc/classes/Bn4rTest.src/M000185.html +0 -23
  197. data/doc/classes/Bn4rTest.src/M000186.html +0 -42
  198. data/doc/classes/Bn4rTest.src/M000187.html +0 -39
  199. data/doc/classes/Bn4rTest.src/M000188.html +0 -25
  200. data/doc/classes/Bn4rTest.src/M000189.html +0 -45
  201. data/doc/classes/Bn4rTest.src/M000190.html +0 -32
  202. data/doc/classes/Bn4rTest.src/M000191.html +0 -32
  203. data/doc/classes/Bn4rTest.src/M000192.html +0 -45
  204. data/doc/classes/Bn4rTest.src/M000193.html +0 -41
  205. data/doc/classes/Bn4rTest.src/M000194.html +0 -42
  206. data/doc/classes/Bn4rTest.src/M000195.html +0 -17
  207. data/doc/classes/Bn4rTest.src/M000196.html +0 -21
  208. data/doc/classes/Bn4rTest.src/M000197.html +0 -21
  209. data/doc/classes/Bn4rTest.src/M000198.html +0 -34
  210. data/doc/classes/Bn4rTest.src/M000199.html +0 -27
  211. data/doc/classes/Bn4rTest.src/M000200.html +0 -23
  212. data/doc/classes/Bn4rTest.src/M000201.html +0 -42
  213. data/doc/classes/Bn4rTest.src/M000202.html +0 -39
  214. data/doc/classes/Bn4rTest.src/M000203.html +0 -25
  215. data/doc/classes/Bn4rTest.src/M000204.html +0 -45
  216. data/doc/classes/Bn4rTest.src/M000205.html +0 -32
  217. data/doc/classes/Bn4rTest.src/M000206.html +0 -32
  218. data/doc/classes/BnTableProbabilitiesGenerator.src/M000040.html +0 -18
  219. data/doc/classes/BnTableProbabilitiesGenerator.src/M000041.html +0 -18
  220. data/doc/classes/BnTableProbabilitiesGenerator.src/M000067.html +0 -18
  221. data/doc/classes/BnTableProbabilitiesGenerator.src/M000207.html +0 -18
  222. data/doc/classes/BnTableProbabilitiesGenerator.src/M000208.html +0 -18
  223. data/doc/classes/ConfigTable.html +0 -500
  224. data/doc/classes/ConfigTable.src/M000007.html +0 -25
  225. data/doc/classes/ConfigTable.src/M000008.html +0 -18
  226. data/doc/classes/ConfigTable.src/M000009.html +0 -18
  227. data/doc/classes/ConfigTable.src/M000010.html +0 -18
  228. data/doc/classes/ConfigTable.src/M000011.html +0 -18
  229. data/doc/classes/ConfigTable.src/M000012.html +0 -18
  230. data/doc/classes/ConfigTable.src/M000013.html +0 -18
  231. data/doc/classes/ConfigTable.src/M000014.html +0 -18
  232. data/doc/classes/ConfigTable.src/M000015.html +0 -18
  233. data/doc/classes/ConfigTable.src/M000016.html +0 -19
  234. data/doc/classes/ConfigTable.src/M000017.html +0 -21
  235. data/doc/classes/ConfigTable.src/M000018.html +0 -20
  236. data/doc/classes/ConfigTable.src/M000019.html +0 -18
  237. data/doc/classes/ConfigTable.src/M000020.html +0 -25
  238. data/doc/classes/ConfigTable.src/M000021.html +0 -23
  239. data/doc/classes/ConfigTable.src/M000022.html +0 -20
  240. data/doc/classes/ConfigTable.src/M000023.html +0 -20
  241. data/doc/classes/ConfigTable.src/M000024.html +0 -23
  242. data/doc/classes/ConfigTable.src/M000025.html +0 -19
  243. data/doc/classes/ConfigTable.src/M000026.html +0 -18
  244. data/doc/classes/ConfigTable.src/M000027.html +0 -18
  245. data/doc/classes/ConfigTable/BoolItem.html +0 -154
  246. data/doc/classes/ConfigTable/BoolItem.src/M000028.html +0 -18
  247. data/doc/classes/ConfigTable/BoolItem.src/M000029.html +0 -18
  248. data/doc/classes/ConfigTable/ExecItem.html +0 -201
  249. data/doc/classes/ConfigTable/ExecItem.src/M000047.html +0 -20
  250. data/doc/classes/ConfigTable/ExecItem.src/M000048.html +0 -18
  251. data/doc/classes/ConfigTable/ExecItem.src/M000049.html +0 -18
  252. data/doc/classes/ConfigTable/ExecItem.src/M000050.html +0 -18
  253. data/doc/classes/ConfigTable/ExecItem.src/M000051.html +0 -22
  254. data/doc/classes/ConfigTable/Item.html +0 -250
  255. data/doc/classes/ConfigTable/Item.src/M000054.html +0 -22
  256. data/doc/classes/ConfigTable/Item.src/M000055.html +0 -18
  257. data/doc/classes/ConfigTable/Item.src/M000056.html +0 -18
  258. data/doc/classes/ConfigTable/Item.src/M000057.html +0 -18
  259. data/doc/classes/ConfigTable/Item.src/M000058.html +0 -18
  260. data/doc/classes/ConfigTable/Item.src/M000059.html +0 -18
  261. data/doc/classes/ConfigTable/MetaConfigEnvironment.html +0 -325
  262. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000034.html +0 -19
  263. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000035.html +0 -18
  264. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000036.html +0 -18
  265. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000037.html +0 -18
  266. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000038.html +0 -18
  267. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000039.html +0 -18
  268. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000040.html +0 -18
  269. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000041.html +0 -18
  270. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000042.html +0 -18
  271. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000043.html +0 -18
  272. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000044.html +0 -18
  273. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000045.html +0 -19
  274. data/doc/classes/ConfigTable/MetaConfigEnvironment.src/M000046.html +0 -19
  275. data/doc/classes/ConfigTable/PackageSelectionItem.html +0 -169
  276. data/doc/classes/ConfigTable/PackageSelectionItem.src/M000032.html +0 -19
  277. data/doc/classes/ConfigTable/PackageSelectionItem.src/M000033.html +0 -18
  278. data/doc/classes/ConfigTable/PathItem.html +0 -139
  279. data/doc/classes/ConfigTable/PathItem.src/M000031.html +0 -18
  280. data/doc/classes/ConfigTable/ProgramItem.html +0 -139
  281. data/doc/classes/ConfigTable/ProgramItem.src/M000030.html +0 -18
  282. data/doc/classes/ConfigTable/SelectItem.html +0 -156
  283. data/doc/classes/ConfigTable/SelectItem.src/M000052.html +0 -19
  284. data/doc/classes/ConfigTable/SelectItem.src/M000053.html +0 -18
  285. data/doc/classes/Enumerable.html +0 -118
  286. data/doc/classes/Errno.html +0 -111
  287. data/doc/classes/Errno/ENOTEMPTY.html +0 -111
  288. data/doc/classes/File.html +0 -166
  289. data/doc/classes/File.src/M000276.html +0 -20
  290. data/doc/classes/File.src/M000277.html +0 -20
  291. data/doc/classes/File.src/M000278.html +0 -18
  292. data/doc/classes/FileOperations.html +0 -375
  293. data/doc/classes/FileOperations.src/M000291.html +0 -31
  294. data/doc/classes/FileOperations.src/M000292.html +0 -20
  295. data/doc/classes/FileOperations.src/M000293.html +0 -20
  296. data/doc/classes/FileOperations.src/M000294.html +0 -24
  297. data/doc/classes/FileOperations.src/M000295.html +0 -34
  298. data/doc/classes/FileOperations.src/M000296.html +0 -27
  299. data/doc/classes/FileOperations.src/M000297.html +0 -21
  300. data/doc/classes/FileOperations.src/M000298.html +0 -19
  301. data/doc/classes/FileOperations.src/M000299.html +0 -40
  302. data/doc/classes/FileOperations.src/M000300.html +0 -19
  303. data/doc/classes/FileOperations.src/M000301.html +0 -20
  304. data/doc/classes/FileOperations.src/M000302.html +0 -18
  305. data/doc/classes/FileOperations.src/M000303.html +0 -18
  306. data/doc/classes/FileOperations.src/M000304.html +0 -18
  307. data/doc/classes/FileOperations.src/M000305.html +0 -20
  308. data/doc/classes/FileOperations.src/M000306.html +0 -20
  309. data/doc/classes/HookScriptAPI.html +0 -308
  310. data/doc/classes/HookScriptAPI.src/M000279.html +0 -18
  311. data/doc/classes/HookScriptAPI.src/M000281.html +0 -18
  312. data/doc/classes/HookScriptAPI.src/M000282.html +0 -18
  313. data/doc/classes/HookScriptAPI.src/M000283.html +0 -18
  314. data/doc/classes/HookScriptAPI.src/M000284.html +0 -18
  315. data/doc/classes/HookScriptAPI.src/M000285.html +0 -18
  316. data/doc/classes/HookScriptAPI.src/M000286.html +0 -18
  317. data/doc/classes/HookScriptAPI.src/M000287.html +0 -18
  318. data/doc/classes/HookScriptAPI.src/M000288.html +0 -20
  319. data/doc/classes/HookScriptAPI.src/M000289.html +0 -20
  320. data/doc/classes/HookScriptAPI.src/M000290.html +0 -20
  321. data/doc/classes/Installer.html +0 -1148
  322. data/doc/classes/Installer.src/M000209.html +0 -21
  323. data/doc/classes/Installer.src/M000210.html +0 -18
  324. data/doc/classes/Installer.src/M000211.html +0 -17
  325. data/doc/classes/Installer.src/M000212.html +0 -18
  326. data/doc/classes/Installer.src/M000213.html +0 -18
  327. data/doc/classes/Installer.src/M000214.html +0 -18
  328. data/doc/classes/Installer.src/M000215.html +0 -18
  329. data/doc/classes/Installer.src/M000216.html +0 -18
  330. data/doc/classes/Installer.src/M000217.html +0 -23
  331. data/doc/classes/Installer.src/M000218.html +0 -18
  332. data/doc/classes/Installer.src/M000221.html +0 -18
  333. data/doc/classes/Installer.src/M000225.html +0 -18
  334. data/doc/classes/Installer.src/M000226.html +0 -18
  335. data/doc/classes/Installer.src/M000227.html +0 -20
  336. data/doc/classes/Installer.src/M000229.html +0 -18
  337. data/doc/classes/Installer.src/M000233.html +0 -36
  338. data/doc/classes/Installer.src/M000234.html +0 -25
  339. data/doc/classes/Installer.src/M000235.html +0 -24
  340. data/doc/classes/Installer.src/M000236.html +0 -19
  341. data/doc/classes/Installer.src/M000237.html +0 -18
  342. data/doc/classes/Installer.src/M000238.html +0 -18
  343. data/doc/classes/Installer.src/M000239.html +0 -21
  344. data/doc/classes/Installer.src/M000240.html +0 -18
  345. data/doc/classes/Installer.src/M000241.html +0 -20
  346. data/doc/classes/Installer.src/M000242.html +0 -18
  347. data/doc/classes/Installer.src/M000243.html +0 -21
  348. data/doc/classes/Installer.src/M000244.html +0 -18
  349. data/doc/classes/Installer.src/M000245.html +0 -22
  350. data/doc/classes/Installer.src/M000246.html +0 -18
  351. data/doc/classes/Installer.src/M000247.html +0 -23
  352. data/doc/classes/Installer.src/M000248.html +0 -18
  353. data/doc/classes/Installer.src/M000249.html +0 -20
  354. data/doc/classes/Installer.src/M000250.html +0 -19
  355. data/doc/classes/Installer.src/M000251.html +0 -19
  356. data/doc/classes/Installer.src/M000252.html +0 -20
  357. data/doc/classes/Installer.src/M000253.html +0 -30
  358. data/doc/classes/Installer.src/M000254.html +0 -20
  359. data/doc/classes/Installer.src/M000260.html +0 -19
  360. data/doc/classes/Installer.src/M000261.html +0 -20
  361. data/doc/classes/Installer.src/M000264.html +0 -19
  362. data/doc/classes/Installer.src/M000268.html +0 -26
  363. data/doc/classes/Installer.src/M000269.html +0 -25
  364. data/doc/classes/Installer.src/M000270.html +0 -29
  365. data/doc/classes/Installer.src/M000271.html +0 -26
  366. data/doc/classes/Installer/Shebang.html +0 -202
  367. data/doc/classes/Installer/Shebang.src/M000272.html +0 -23
  368. data/doc/classes/Installer/Shebang.src/M000273.html +0 -19
  369. data/doc/classes/Installer/Shebang.src/M000274.html +0 -19
  370. data/doc/classes/Installer/Shebang.src/M000275.html +0 -18
  371. data/doc/classes/SetupError.html +0 -111
  372. data/doc/classes/ToplevelInstaller.html +0 -621
  373. data/doc/classes/ToplevelInstaller.src/M000060.html +0 -23
  374. data/doc/classes/ToplevelInstaller.src/M000061.html +0 -18
  375. data/doc/classes/ToplevelInstaller.src/M000062.html +0 -25
  376. data/doc/classes/ToplevelInstaller.src/M000063.html +0 -21
  377. data/doc/classes/ToplevelInstaller.src/M000064.html +0 -18
  378. data/doc/classes/ToplevelInstaller.src/M000065.html +0 -18
  379. data/doc/classes/ToplevelInstaller.src/M000066.html +0 -38
  380. data/doc/classes/ToplevelInstaller.src/M000067.html +0 -18
  381. data/doc/classes/ToplevelInstaller.src/M000068.html +0 -18
  382. data/doc/classes/ToplevelInstaller.src/M000069.html +0 -18
  383. data/doc/classes/ToplevelInstaller.src/M000070.html +0 -18
  384. data/doc/classes/ToplevelInstaller.src/M000071.html +0 -18
  385. data/doc/classes/ToplevelInstaller.src/M000072.html +0 -40
  386. data/doc/classes/ToplevelInstaller.src/M000073.html +0 -18
  387. data/doc/classes/ToplevelInstaller.src/M000074.html +0 -18
  388. data/doc/classes/ToplevelInstaller.src/M000075.html +0 -21
  389. data/doc/classes/ToplevelInstaller.src/M000081.html +0 -40
  390. data/doc/classes/ToplevelInstaller.src/M000082.html +0 -31
  391. data/doc/classes/ToplevelInstaller.src/M000083.html +0 -52
  392. data/doc/classes/ToplevelInstaller.src/M000084.html +0 -19
  393. data/doc/classes/ToplevelInstaller.src/M000085.html +0 -18
  394. data/doc/classes/ToplevelInstaller.src/M000086.html +0 -18
  395. data/doc/classes/ToplevelInstaller.src/M000087.html +0 -18
  396. data/doc/classes/ToplevelInstaller.src/M000088.html +0 -20
  397. data/doc/classes/ToplevelInstaller.src/M000089.html +0 -18
  398. data/doc/classes/ToplevelInstaller.src/M000090.html +0 -18
  399. data/doc/classes/ToplevelInstallerMulti.html +0 -398
  400. data/doc/classes/ToplevelInstallerMulti.src/M000127.html +0 -21
  401. data/doc/classes/ToplevelInstallerMulti.src/M000128.html +0 -21
  402. data/doc/classes/ToplevelInstallerMulti.src/M000129.html +0 -23
  403. data/doc/classes/ToplevelInstallerMulti.src/M000130.html +0 -29
  404. data/doc/classes/ToplevelInstallerMulti.src/M000131.html +0 -22
  405. data/doc/classes/ToplevelInstallerMulti.src/M000132.html +0 -21
  406. data/doc/classes/ToplevelInstallerMulti.src/M000133.html +0 -21
  407. data/doc/classes/ToplevelInstallerMulti.src/M000134.html +0 -20
  408. data/doc/classes/ToplevelInstallerMulti.src/M000135.html +0 -20
  409. data/doc/classes/ToplevelInstallerMulti.src/M000136.html +0 -20
  410. data/doc/classes/ToplevelInstallerMulti.src/M000137.html +0 -21
  411. data/doc/classes/ToplevelInstallerMulti.src/M000138.html +0 -21
  412. data/doc/classes/ToplevelInstallerMulti.src/M000139.html +0 -25
  413. data/doc/classes/ToplevelInstallerMulti.src/M000140.html +0 -18
  414. data/doc/classes/ToplevelInstallerMulti.src/M000141.html +0 -18
  415. data/doc/classes/ToplevelInstallerMulti.src/M000142.html +0 -18
  416. data/doc/files/pkg/bn4r-0_1_0/lib/bn4r/bn_algorithms_rb.html +0 -131
  417. data/doc/files/pkg/bn4r-0_1_0/lib/bn4r/bn_rb.html +0 -135
  418. data/doc/files/pkg/bn4r-0_1_0/lib/bn4r/bn_table_probabilities_rb.html +0 -115
  419. data/doc/files/pkg/bn4r-0_1_0/lib/bn4r/version_rb.html +0 -101
  420. data/doc/files/pkg/bn4r-0_1_0/lib/bn4r_rb.html +0 -114
  421. data/doc/files/pkg/bn4r-0_1_0/test/bn4r_test_rb.html +0 -101
  422. data/doc/files/pkg/bn4r-0_1_0/test/test_helper_rb.html +0 -108
  423. data/doc/files/setup_rb.html +0 -148
  424. data/doc/files/setup_rb.src/M000006.html +0 -18
  425. data/doc/files/test/bn4r_test_rb.html +0 -108
  426. data/doc/files/test/bn_test_models_rb.html +0 -175
  427. data/doc/files/test/bn_test_models_rb.src/M000003.html +0 -45
  428. data/doc/files/test/bn_test_models_rb.src/M000004.html +0 -41
  429. data/doc/files/test/bn_test_models_rb.src/M000005.html +0 -42
  430. data/doc/files/test/print_bn_output_rb.html +0 -134
  431. data/doc/files/test/print_bn_output_rb.src/M000002.html +0 -18
  432. data/doc/files/test/test_helper_rb.html +0 -108
@@ -1,16 +1,16 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html>
7
- <head>
8
- <title>get_node_probability_from_boolean_combination (BNTPGFromPositiveNegativeRelations)</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
- </head>
12
- <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/bn4r/bn_table_probabilities.rb, line 56</span>
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>get_node_probability_from_boolean_combination (BNTPGFromPositiveNegativeRelations)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/bn4r/bn_table_probabilities.rb, line 56</span>
14
14
  <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_node_probability_from_boolean_combination</span>(<span class="ruby-identifier">boolean_combination</span>, <span class="ruby-identifier">type_of_position_impact</span>)
15
15
  <span class="ruby-identifier">num_eq</span> = <span class="ruby-value">0</span><span class="ruby-value">.0</span>
16
16
  <span class="ruby-identifier">boolean_combination</span>.<span class="ruby-identifier">size</span>.<span class="ruby-identifier">times</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
@@ -18,6 +18,6 @@
18
18
  <span class="ruby-identifier">num_eq</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1.0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">type_of_position_impact</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">boolean_combination</span>[<span class="ruby-identifier">i</span>]
19
19
  }
20
20
  <span class="ruby-identifier">num_eq</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">boolean_combination</span>.<span class="ruby-identifier">size</span>.<span class="ruby-identifier">to_f</span>
21
- <span class="ruby-keyword kw">end</span></pre>
22
- </body>
21
+ <span class="ruby-keyword kw">end</span></pre>
22
+ </body>
23
23
  </html>
@@ -1,561 +1,987 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Class: BayesNet</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Class</strong></td>
53
- <td class="class-name-in-header">BayesNet</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../files/lib/bn4r/bn_rb.html">
59
- lib/bn4r/bn.rb
60
- </a>
61
- <br />
62
- <a href="../files/lib/bn4r/bn_algorithms_rb.html">
63
- lib/bn4r/bn_algorithms.rb
64
- </a>
65
- <br />
66
- <a href="../files/lib/bn4r/bn_export_rb.html">
67
- lib/bn4r/bn_export.rb
68
- </a>
69
- <br />
70
- <a href="../files/lib/bn4r/bn_import_rb.html">
71
- lib/bn4r/bn_import.rb
72
- </a>
73
- <br />
74
- </td>
75
- </tr>
76
-
77
- <tr class="top-aligned-row">
78
- <td><strong>Parent:</strong></td>
79
- <td>
80
- DirectedAdjacencyGraph
81
- </td>
82
- </tr>
83
- </table>
84
- </div>
85
- <!-- banner header -->
86
-
87
- <div id="bodyContent">
88
-
89
-
90
-
91
- <div id="contextContent">
92
-
93
-
94
-
95
- </div>
96
-
97
- <div id="method-list">
98
- <h3 class="section-bar">Methods</h3>
99
-
100
- <div class="name-list">
101
- <a href="#M000002">add_edge</a>&nbsp;&nbsp;
102
- <a href="#M000010">all_nodes_with_values?</a>&nbsp;&nbsp;
103
- <a href="#M000003">clear_values!</a>&nbsp;&nbsp;
104
- <a href="#M000021">create_from_xmlbif</a>&nbsp;&nbsp;
105
- <a href="#M000016">enumerate_all</a>&nbsp;&nbsp;
106
- <a href="#M000012">enumeration_ask</a>&nbsp;&nbsp;
107
- <a href="#M000004">get_variable</a>&nbsp;&nbsp;
108
- <a href="#M000018">get_vector_value</a>&nbsp;&nbsp;
109
- <a href="#M000008">inference_by_enumeration</a>&nbsp;&nbsp;
110
- <a href="#M000015">likelihood_weighting</a>&nbsp;&nbsp;
111
- <a href="#M000011">nodes_ordered_by_dependencies</a>&nbsp;&nbsp;
112
- <a href="#M000007">num_parents</a>&nbsp;&nbsp;
113
- <a href="#M000009">p_v_cond_parents</a>&nbsp;&nbsp;
114
- <a href="#M000013">prior_sample</a>&nbsp;&nbsp;
115
- <a href="#M000014">rejection_sampling</a>&nbsp;&nbsp;
116
- <a href="#M000006">root?</a>&nbsp;&nbsp;
117
- <a href="#M000005">roots</a>&nbsp;&nbsp;
118
- <a href="#M000019">to_dot</a>&nbsp;&nbsp;
119
- <a href="#M000020">to_xbn</a>&nbsp;&nbsp;
120
- <a href="#M000017">weighted_sample</a>&nbsp;&nbsp;
121
- </div>
122
- </div>
123
-
124
- </div>
125
-
126
-
127
- <!-- if includes -->
128
-
129
- <div id="section">
130
-
131
-
132
-
133
-
134
-
135
-
136
-
137
-
138
- <!-- if method_list -->
139
- <div id="methods">
140
- <h3 class="section-bar">Public Instance methods</h3>
141
-
142
- <div id="method-M000002" class="method-detail">
143
- <a name="M000002"></a>
144
-
145
- <div class="method-heading">
146
- <a href="BayesNet.src/M000002.html" target="Code" class="method-signature"
147
- onclick="popupCode('BayesNet.src/M000002.html');return false;">
148
- <span class="method-name">add_edge</span><span class="method-args">(parent, child, tag=nil)</span>
149
- </a>
150
- </div>
151
-
152
- <div class="method-description">
153
- <p>
154
- Adds a directed edge between parent and child BayesNetNodes labeled with
155
- tag ( if tag is included, othewise the label is nil ).
156
- </p>
157
- </div>
158
- </div>
159
-
160
- <div id="method-M000010" class="method-detail">
161
- <a name="M000010"></a>
162
-
163
- <div class="method-heading">
164
- <a href="BayesNet.src/M000010.html" target="Code" class="method-signature"
165
- onclick="popupCode('BayesNet.src/M000010.html');return false;">
166
- <span class="method-name">all_nodes_with_values?</span><span class="method-args">()</span>
167
- </a>
168
- </div>
169
-
170
- <div class="method-description">
171
- <p>
172
- Returns true if all nodes have values.
173
- </p>
174
- </div>
175
- </div>
176
-
177
- <div id="method-M000003" class="method-detail">
178
- <a name="M000003"></a>
179
-
180
- <div class="method-heading">
181
- <a href="BayesNet.src/M000003.html" target="Code" class="method-signature"
182
- onclick="popupCode('BayesNet.src/M000003.html');return false;">
183
- <span class="method-name">clear_values!</span><span class="method-args">()</span>
184
- </a>
185
- </div>
186
-
187
- <div class="method-description">
188
- <p>
189
- Clears the value of all BayesNetNodes in Bayes Net.
190
- </p>
191
- </div>
192
- </div>
193
-
194
- <div id="method-M000021" class="method-detail">
195
- <a name="M000021"></a>
196
-
197
- <div class="method-heading">
198
- <a href="BayesNet.src/M000021.html" target="Code" class="method-signature"
199
- onclick="popupCode('BayesNet.src/M000021.html');return false;">
200
- <span class="method-name">create_from_xmlbif</span><span class="method-args">(file, bn=self)</span>
201
- </a>
202
- </div>
203
-
204
- <div class="method-description">
205
- </div>
206
- </div>
207
-
208
- <div id="method-M000012" class="method-detail">
209
- <a name="M000012"></a>
210
-
211
- <div class="method-heading">
212
- <a href="BayesNet.src/M000012.html" target="Code" class="method-signature"
213
- onclick="popupCode('BayesNet.src/M000012.html');return false;">
214
- <span class="method-name">enumeration_ask</span><span class="method-args">(x,e, bn_vertices = vertices)</span>
215
- </a>
216
- </div>
217
-
218
- <div class="method-description">
219
- <p>
220
- ENUMERATION ASK algorithm
221
- </p>
222
- <p>
223
- Implementation based on: S.Russell, P.Norving, &quot;Artificial
224
- Intelligence, A Modern Approach&quot;, 2nd Edition. pp 506
225
- </p>
226
- <p>
227
- <b>x</b> &#8212;&gt; query variable
228
- </p>
229
- <p>
230
- <b>e</b> &#8212;&gt; variables with observed values
231
- </p>
232
- </div>
233
- </div>
234
-
235
- <div id="method-M000004" class="method-detail">
236
- <a name="M000004"></a>
237
-
238
- <div class="method-heading">
239
- <a href="BayesNet.src/M000004.html" target="Code" class="method-signature"
240
- onclick="popupCode('BayesNet.src/M000004.html');return false;">
241
- <span class="method-name">get_variable</span><span class="method-args">( text )</span>
242
- </a>
243
- </div>
244
-
245
- <div class="method-description">
246
- <p>
247
- Gets the variable with given name.
248
- </p>
249
- </div>
250
- </div>
251
-
252
- <div id="method-M000008" class="method-detail">
253
- <a name="M000008"></a>
254
-
255
- <div class="method-heading">
256
- <a href="BayesNet.src/M000008.html" target="Code" class="method-signature"
257
- onclick="popupCode('BayesNet.src/M000008.html');return false;">
258
- <span class="method-name">inference_by_enumeration</span><span class="method-args">()</span>
259
- </a>
260
- </div>
261
-
262
- <div class="method-description">
263
- <p>
264
- Return the probability of a distribution in the bayes net all nodes in the
265
- Bayes Net must have a value, otherwise will raise a exception
266
- </p>
267
- </div>
268
- </div>
269
-
270
- <div id="method-M000015" class="method-detail">
271
- <a name="M000015"></a>
272
-
273
- <div class="method-heading">
274
- <a href="BayesNet.src/M000015.html" target="Code" class="method-signature"
275
- onclick="popupCode('BayesNet.src/M000015.html');return false;">
276
- <span class="method-name">likelihood_weighting</span><span class="method-args">( x, e, n, bn = self )</span>
277
- </a>
278
- </div>
279
-
280
- <div class="method-description">
281
- <p>
282
- Returns an estimation of P(X=x|e) = &lt;P(X=x|e), 1 - P(X=x|e)&gt;
283
- obtained.
284
- </p>
285
- <p>
286
- Implementation based on: S.Russell, P.Norving, &quot;Artificial
287
- Intelligence, A Modern Approach&quot;, 2nd Edition. pp 515
288
- </p>
289
- <p>
290
- <b>x</b> &#8212;&gt; query variable
291
- </p>
292
- <p>
293
- <b>e</b> &#8212;&gt; variables with observed values, must be a copy of the
294
- nodes in bn ( Can&#8216;t be the BayesNetNodes instaces that are in bn ).
295
- </p>
296
- <p>
297
- <b>n</b> &#8212;&gt; Number of samples generated
298
- </p>
299
- <p>
300
- WARNING: Clears the values of current bn!
301
- </p>
302
- </div>
303
- </div>
304
-
305
- <div id="method-M000011" class="method-detail">
306
- <a name="M000011"></a>
307
-
308
- <div class="method-heading">
309
- <a href="BayesNet.src/M000011.html" target="Code" class="method-signature"
310
- onclick="popupCode('BayesNet.src/M000011.html');return false;">
311
- <span class="method-name">nodes_ordered_by_dependencies</span><span class="method-args">(nodes = vertices, bn_ordered = Array.new)</span>
312
- </a>
313
- </div>
314
-
315
- <div class="method-description">
316
- <p>
317
- Returns nodes ordered by dependencies ( from those who haven&#8217;t (
318
- roots ) to leaves ).
319
- </p>
320
- </div>
321
- </div>
322
-
323
- <div id="method-M000007" class="method-detail">
324
- <a name="M000007"></a>
325
-
326
- <div class="method-heading">
327
- <a href="BayesNet.src/M000007.html" target="Code" class="method-signature"
328
- onclick="popupCode('BayesNet.src/M000007.html');return false;">
329
- <span class="method-name">num_parents</span><span class="method-args">(v)</span>
330
- </a>
331
- </div>
332
-
333
- <div class="method-description">
334
- <p>
335
- Returns the number of parents of a node.
336
- </p>
337
- </div>
338
- </div>
339
-
340
- <div id="method-M000009" class="method-detail">
341
- <a name="M000009"></a>
342
-
343
- <div class="method-heading">
344
- <a href="BayesNet.src/M000009.html" target="Code" class="method-signature"
345
- onclick="popupCode('BayesNet.src/M000009.html');return false;">
346
- <span class="method-name">p_v_cond_parents</span><span class="method-args">(v)</span>
347
- </a>
348
- </div>
349
-
350
- <div class="method-description">
351
- <p>
352
- Returns the probability of a node conditioned to his parents:
353
- </p>
354
- <pre>
355
- P(v|parents(v))
356
- </pre>
357
- </div>
358
- </div>
359
-
360
- <div id="method-M000013" class="method-detail">
361
- <a name="M000013"></a>
362
-
363
- <div class="method-heading">
364
- <a href="BayesNet.src/M000013.html" target="Code" class="method-signature"
365
- onclick="popupCode('BayesNet.src/M000013.html');return false;">
366
- <span class="method-name">prior_sample</span><span class="method-args">(nodes_ordered = nodes_ordered_by_dependencies)</span>
367
- </a>
368
- </div>
369
-
370
- <div class="method-description">
371
- <p>
372
- Returns a sample from prior joint distribution specified by the network.
373
- </p>
374
- <p>
375
- Implementation based on: S.Russell, P.Norving, &quot;Artificial
376
- Intelligence, A Modern Approach&quot;, 2nd Edition. pp 511-512
377
- </p>
378
- <p>
379
- The input are the nodes of the bn ordered by dependencies see <a
380
- href="BayesNet.html#M000011">nodes_ordered_by_dependencies</a>
381
- </p>
382
- </div>
383
- </div>
384
-
385
- <div id="method-M000014" class="method-detail">
386
- <a name="M000014"></a>
387
-
388
- <div class="method-heading">
389
- <a href="BayesNet.src/M000014.html" target="Code" class="method-signature"
390
- onclick="popupCode('BayesNet.src/M000014.html');return false;">
391
- <span class="method-name">rejection_sampling</span><span class="method-args">( x, e, n, bn = self )</span>
392
- </a>
393
- </div>
394
-
395
- <div class="method-description">
396
- <p>
397
- Returns an estimation of P(X=x|e) = &lt;P(X=x|e), 1 - P(X=x|e)&gt;
398
- obtained. Generates samples from prior joint distribution specified by the
399
- network, rejects all those that do not match the evidence, and finally
400
- counts hoy often X = x occurs in remaining samples.
401
- </p>
402
- <p>
403
- Caution, this algorthm is unusable for complex problems because rejects
404
- many samples!
405
- </p>
406
- <p>
407
- Implementation based on: S.Russell, P.Norving, &quot;Artificial
408
- Intelligence, A Modern Approach&quot;, 2nd Edition. pp 513
409
- </p>
410
- <p>
411
- <b>x</b> &#8212;&gt; query variable
412
- </p>
413
- <p>
414
- <b>e</b> &#8212;&gt; variables with observed values
415
- </p>
416
- <p>
417
- <b>n</b> &#8212;&gt; Number of samples generated
418
- </p>
419
- </div>
420
- </div>
421
-
422
- <div id="method-M000006" class="method-detail">
423
- <a name="M000006"></a>
424
-
425
- <div class="method-heading">
426
- <a href="BayesNet.src/M000006.html" target="Code" class="method-signature"
427
- onclick="popupCode('BayesNet.src/M000006.html');return false;">
428
- <span class="method-name">root?</span><span class="method-args">(v)</span>
429
- </a>
430
- </div>
431
-
432
- <div class="method-description">
433
- <p>
434
- Returns true/false if given Node is root.
435
- </p>
436
- </div>
437
- </div>
438
-
439
- <div id="method-M000005" class="method-detail">
440
- <a name="M000005"></a>
441
-
442
- <div class="method-heading">
443
- <a href="BayesNet.src/M000005.html" target="Code" class="method-signature"
444
- onclick="popupCode('BayesNet.src/M000005.html');return false;">
445
- <span class="method-name">roots</span><span class="method-args">()</span>
446
- </a>
447
- </div>
448
-
449
- <div class="method-description">
450
- <p>
451
- Returns the root nodes of the Bayes Net.
452
- </p>
453
- </div>
454
- </div>
455
-
456
- <div id="method-M000019" class="method-detail">
457
- <a name="M000019"></a>
458
-
459
- <div class="method-heading">
460
- <a href="BayesNet.src/M000019.html" target="Code" class="method-signature"
461
- onclick="popupCode('BayesNet.src/M000019.html');return false;">
462
- <span class="method-name">to_dot</span><span class="method-args">(bn = self)</span>
463
- </a>
464
- </div>
465
-
466
- <div class="method-description">
467
- </div>
468
- </div>
469
-
470
- <div id="method-M000020" class="method-detail">
471
- <a name="M000020"></a>
472
-
473
- <div class="method-heading">
474
- <a href="BayesNet.src/M000020.html" target="Code" class="method-signature"
475
- onclick="popupCode('BayesNet.src/M000020.html');return false;">
476
- <span class="method-name">to_xbn</span><span class="method-args">(bn = self)</span>
477
- </a>
478
- </div>
479
-
480
- <div class="method-description">
481
- </div>
482
- </div>
483
-
484
- <h3 class="section-bar">Protected Instance methods</h3>
485
-
486
- <div id="method-M000016" class="method-detail">
487
- <a name="M000016"></a>
488
-
489
- <div class="method-heading">
490
- <a href="BayesNet.src/M000016.html" target="Code" class="method-signature"
491
- onclick="popupCode('BayesNet.src/M000016.html');return false;">
492
- <span class="method-name">enumerate_all</span><span class="method-args">(vars, e)</span>
493
- </a>
494
- </div>
495
-
496
- <div class="method-description">
497
- <p>
498
- Auxiliar function to compute Enumeration Ask Algorithm
499
- </p>
500
- </div>
501
- </div>
502
-
503
- <div id="method-M000018" class="method-detail">
504
- <a name="M000018"></a>
505
-
506
- <div class="method-heading">
507
- <a href="BayesNet.src/M000018.html" target="Code" class="method-signature"
508
- onclick="popupCode('BayesNet.src/M000018.html');return false;">
509
- <span class="method-name">get_vector_value</span><span class="method-args">(vertices_vector, bn_vertices_ordered)</span>
510
- </a>
511
- </div>
512
-
513
- <div class="method-description">
514
- <p>
515
- Axiliar function that returns an array of bn_vertices_ordered.size
516
- positions with nil if position aren&#8217;t in vertices_vector, and value
517
- if there&#8217;s a match in vertices_vector.
518
- </p>
519
- </div>
520
- </div>
521
-
522
- <div id="method-M000017" class="method-detail">
523
- <a name="M000017"></a>
524
-
525
- <div class="method-heading">
526
- <a href="BayesNet.src/M000017.html" target="Code" class="method-signature"
527
- onclick="popupCode('BayesNet.src/M000017.html');return false;">
528
- <span class="method-name">weighted_sample</span><span class="method-args">(e, bn = self)</span>
529
- </a>
530
- </div>
531
-
532
- <div class="method-description">
533
- <p>
534
- Returns an event and a weight.
535
- </p>
536
- <p>
537
- Implementation based on: S.Russell, P.Norving, &quot;Artificial
538
- Intelligence, A Modern Approach&quot;, 2nd Edition. pp 515
539
- </p>
540
- <p>
541
- <b>e</b> &#8212;&gt; variables with observed values
542
- </p>
543
- <p>
544
- WARNING: Clears the values of current bn!
545
- </p>
546
- </div>
547
- </div>
548
-
549
-
550
- </div>
551
-
552
-
553
- </div>
554
-
555
-
556
- <div id="validator-badges">
557
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
558
- </div>
559
-
560
- </body>
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html>
6
+ <head>
7
+ <title>Class: BayesNet</title>
8
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
9
+ <link rel="stylesheet" href=".././rdoc-style.css" type="text/css" media="screen" />
10
+
11
+ <script language="JavaScript" type="text/javascript">
12
+ // <![CDATA[
13
+
14
+ function toggleSource( id )
15
+ {
16
+ var elem
17
+ var link
18
+
19
+ if( document.getElementById )
20
+ {
21
+ elem = document.getElementById( id )
22
+ link = document.getElementById( "l_" + id )
23
+ }
24
+ else if ( document.all )
25
+ {
26
+ elem = eval( "document.all." + id )
27
+ link = eval( "document.all.l_" + id )
28
+ }
29
+ else
30
+ return false;
31
+
32
+ if( elem.style.display == "block" )
33
+ {
34
+ elem.style.display = "none"
35
+ link.innerHTML = "show source"
36
+ }
37
+ else
38
+ {
39
+ elem.style.display = "block"
40
+ link.innerHTML = "hide source"
41
+ }
42
+ }
43
+
44
+ function openCode( url )
45
+ {
46
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
47
+ }
48
+ // ]]>
49
+ </script>
50
+ </head>
51
+
52
+ <body>
53
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
54
+ <td class="file-title"><span class="file-title-prefix">Class</span><br />BayesNet</td>
55
+ <td align="right">
56
+ <table cellspacing=0 cellpadding=2>
57
+ <tr valign="top">
58
+ <td>In:</td>
59
+ <td>
60
+ <a href="../files/lib/bn4r/bn_export_rb.html">lib/bn4r/bn_export.rb</a>
61
+ <a href="../files/lib/bn4r/bn_rb.html">lib/bn4r/bn.rb</a>
62
+ <a href="../files/lib/bn4r/bn_algorithms_rb.html">lib/bn4r/bn_algorithms.rb</a>
63
+ <a href="../files/lib/bn4r/bn_import_rb.html">lib/bn4r/bn_import.rb</a>
64
+ </td>
65
+ </tr>
66
+ <tr>
67
+ <td>Parent:</td>
68
+ <td>
69
+ DirectedAdjacencyGraph
70
+ </td>
71
+ </tr>
72
+ </table>
73
+ </td>
74
+ </tr>
75
+ </table>
76
+ <!-- banner header -->
77
+
78
+ <div id="bodyContent">
79
+ <div id="content">
80
+
81
+
82
+
83
+
84
+ <div class="sectiontitle">Methods</div>
85
+ <ul>
86
+ <li><a href="#M000005">add_edge</a></li>
87
+ <li><a href="#M000020">all_nodes_with_values?</a></li>
88
+ <li><a href="#M000007">childs</a></li>
89
+ <li><a href="#M000009">clear_values!</a></li>
90
+ <li><a href="#M000030">create_from_xmlbif</a></li>
91
+ <li><a href="#M000017">deep</a></li>
92
+ <li><a href="#M000008">each_child</a></li>
93
+ <li><a href="#M000013">each_leaf</a></li>
94
+ <li><a href="#M000027">enumerate_all</a></li>
95
+ <li><a href="#M000023">enumeration_ask</a></li>
96
+ <li><a href="#M000010">get_variable</a></li>
97
+ <li><a href="#M000029">get_vector_value</a></li>
98
+ <li><a href="#M000018">inference_by_enumeration</a></li>
99
+ <li><a href="#M000012">leafs</a></li>
100
+ <li><a href="#M000026">likelihood_weighting</a></li>
101
+ <li><a href="#M000022">nodes_ordered_by_breath_first_search</a></li>
102
+ <li><a href="#M000021">nodes_ordered_by_dependencies</a></li>
103
+ <li><a href="#M000016">num_parents</a></li>
104
+ <li><a href="#M000019">p_v_cond_parents</a></li>
105
+ <li><a href="#M000024">prior_sample</a></li>
106
+ <li><a href="#M000025">rejection_sampling</a></li>
107
+ <li><a href="#M000006">remove_vertex</a></li>
108
+ <li><a href="#M000015">root?</a></li>
109
+ <li><a href="#M000011">roots</a></li>
110
+ <li><a href="#M000014">siblings</a></li>
111
+ <li><a href="#M000003">to_dot</a></li>
112
+ <li><a href="#M000004">to_xbn</a></li>
113
+ <li><a href="#M000028">weighted_sample</a></li>
114
+ </ul>
115
+
116
+
117
+
118
+
119
+
120
+
121
+ <div class="sectiontitle">Public Instance methods</div>
122
+ <div class="method">
123
+ <div class="title">
124
+ <a name="M000005"></a><b>add_edge</b>(parent, child, tag=nil)
125
+ </div>
126
+ <div class="description">
127
+ <p>
128
+ Adds a directed edge between parent and child BayesNetNodes labeled with
129
+ tag ( if tag is included, othewise the label is nil ).
130
+ </p>
131
+ </div>
132
+ <div class="sourcecode">
133
+ <p class="source-link">[ <a href="javascript:toggleSource('M000005_source')" id="l_M000005_source">show source</a> ]</p>
134
+ <div id="M000005_source" class="dyn-source">
135
+ <pre>
136
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 27</span>
137
+ 27: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_edge</span>(<span class="ruby-identifier">parent</span>, <span class="ruby-identifier">child</span>, <span class="ruby-identifier">tag</span>=<span class="ruby-keyword kw">nil</span>)
138
+ 28: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Nodes must be of the class BayesNetNodes&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">BayesNetNode</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">BayesNetNode</span>
139
+ 29: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Self relations not allowed in BayesNet&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parent</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">child</span>
140
+ 30: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Diferent BayesNetNodes with equal name: &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">name</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parent</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">name</span>
141
+ 31:
142
+ 32: <span class="ruby-identifier">edge</span> = <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">parent</span>, <span class="ruby-identifier">child</span>)
143
+ 33: <span class="ruby-identifier">child</span>.<span class="ruby-identifier">parents</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">parent</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">parent</span>
144
+ 34: <span class="ruby-identifier">child</span>.<span class="ruby-identifier">relations</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">tag</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">tag</span>.<span class="ruby-identifier">nil?</span>
145
+ 35: <span class="ruby-identifier">edge</span>
146
+ 36: <span class="ruby-keyword kw">end</span>
147
+ </pre>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ <div class="method">
152
+ <div class="title">
153
+ <a name="M000020"></a><b>all_nodes_with_values?</b>()
154
+ </div>
155
+ <div class="description">
156
+ <p>
157
+ Returns true if all nodes have values.
158
+ </p>
159
+ </div>
160
+ <div class="sourcecode">
161
+ <p class="source-link">[ <a href="javascript:toggleSource('M000020_source')" id="l_M000020_source">show source</a> ]</p>
162
+ <div id="M000020_source" class="dyn-source">
163
+ <pre>
164
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 136</span>
165
+ 136: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">all_nodes_with_values?</span>
166
+ 137: <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">select</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-operator">!</span><span class="ruby-identifier">v</span>.<span class="ruby-identifier">value</span>.<span class="ruby-identifier">nil?</span> }.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">size</span>
167
+ 138: <span class="ruby-keyword kw">end</span>
168
+ </pre>
169
+ </div>
170
+ </div>
171
+ </div>
172
+ <div class="method">
173
+ <div class="title">
174
+ <a name="M000007"></a><b>childs</b>(v)
175
+ </div>
176
+ <div class="description">
177
+ <p>
178
+ Returns an array with childs of given node ( or vertice )
179
+ </p>
180
+ </div>
181
+ <div class="sourcecode">
182
+ <p class="source-link">[ <a href="javascript:toggleSource('M000007_source')" id="l_M000007_source">show source</a> ]</p>
183
+ <div id="M000007_source" class="dyn-source">
184
+ <pre>
185
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 56</span>
186
+ 56: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">childs</span>(<span class="ruby-identifier">v</span>)
187
+ 57: <span class="ruby-keyword kw">begin</span>
188
+ 58: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">adjacent_vertices</span>(<span class="ruby-identifier">v</span>)
189
+ 59: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">RGL</span><span class="ruby-operator">::</span><span class="ruby-constant">NoVertexError</span>
190
+ 60: []
191
+ 61: <span class="ruby-keyword kw">end</span>
192
+ 62: <span class="ruby-keyword kw">end</span>
193
+ </pre>
194
+ </div>
195
+ </div>
196
+ </div>
197
+ <div class="method">
198
+ <div class="title">
199
+ <a name="M000009"></a><b>clear_values!</b>()
200
+ </div>
201
+ <div class="description">
202
+ <p>
203
+ Clears the value of all BayesNetNodes in Bayes Net.
204
+ </p>
205
+ </div>
206
+ <div class="sourcecode">
207
+ <p class="source-link">[ <a href="javascript:toggleSource('M000009_source')" id="l_M000009_source">show source</a> ]</p>
208
+ <div id="M000009_source" class="dyn-source">
209
+ <pre>
210
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 70</span>
211
+ 70: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">clear_values!</span>
212
+ 71: <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">clear_value</span> }
213
+ 72: <span class="ruby-keyword kw">end</span>
214
+ </pre>
215
+ </div>
216
+ </div>
217
+ </div>
218
+ <div class="method">
219
+ <div class="title">
220
+ <a name="M000030"></a><b>create_from_xmlbif</b>(file, bn=self)
221
+ </div>
222
+ <div class="sourcecode">
223
+ <p class="source-link">[ <a href="javascript:toggleSource('M000030_source')" id="l_M000030_source">show source</a> ]</p>
224
+ <div id="M000030_source" class="dyn-source">
225
+ <pre>
226
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_import.rb, line 26</span>
227
+ 26: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">create_from_xmlbif</span>(<span class="ruby-identifier">file</span>, <span class="ruby-identifier">bn</span>=<span class="ruby-keyword kw">self</span>)
228
+ 27: <span class="ruby-identifier">doc</span> = <span class="ruby-constant">Document</span>.<span class="ruby-identifier">new</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">file</span>, <span class="ruby-value str">&quot;r&quot;</span>)
229
+ 28:
230
+ 29: <span class="ruby-comment cmt"># first go through and add the variables
231
+ 30: <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>.<span class="ruby-identifier">each</span>(<span class="ruby-value str">&quot;BIF/NETWORK/VARIABLE&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">variable</span><span class="ruby-operator">|</span>
232
+ 31:
233
+ 32: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">variable</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;NAME&quot;</span>]
234
+ 33:
235
+ 34: <span class="ruby-identifier">outcomes</span> = []
236
+ 35: <span class="ruby-identifier">variable</span>.<span class="ruby-identifier">elements</span>.<span class="ruby-identifier">each</span>(<span class="ruby-value str">&quot;OUTCOME&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">outcome</span><span class="ruby-operator">|</span>
237
+ 36: <span class="ruby-identifier">outcomes</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">outcome</span>.<span class="ruby-identifier">text</span>
238
+ 37: }
239
+ 38: <span class="ruby-comment cmt"># transform from text to boolean
240
+ 39: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">2</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">&quot;true&quot;</span>) <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">&quot;false&quot;</span>)
241
+ 40: <span class="ruby-identifier">outcomes</span> = <span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">collect</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span> <span class="ruby-identifier">o</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;true&quot;</span>}
242
+ 41: <span class="ruby-keyword kw">end</span>
243
+ 42: <span class="ruby-identifier">node</span> = <span class="ruby-constant">BayesNetNode</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">name</span>.<span class="ruby-identifier">text</span>, <span class="ruby-identifier">outcomes</span> )
244
+ 43: <span class="ruby-identifier">bn</span>.<span class="ruby-identifier">add_vertex</span>(<span class="ruby-identifier">node</span>)
245
+ 44: }
246
+ 45:
247
+ 46: <span class="ruby-comment cmt"># for each variable we list, we will look up
248
+ 47: <span class="ruby-comment cmt"># the conditional probability table for it.
249
+ 48:
250
+ 49: <span class="ruby-identifier">doc</span>.<span class="ruby-identifier">elements</span>.<span class="ruby-identifier">each</span>(<span class="ruby-value str">&quot;BIF/NETWORK/DEFINITION/&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">definition</span><span class="ruby-operator">|</span>
251
+ 50: <span class="ruby-identifier">node</span> = <span class="ruby-identifier">get_variable</span>( <span class="ruby-identifier">definition</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;FOR&quot;</span>].<span class="ruby-identifier">text</span> )
252
+ 51: <span class="ruby-identifier">givens_array</span> = []
253
+ 52: <span class="ruby-identifier">definition</span>.<span class="ruby-identifier">elements</span>.<span class="ruby-identifier">each</span>(<span class="ruby-value str">&quot;GIVEN&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">given</span><span class="ruby-operator">|</span>
254
+ 53: <span class="ruby-identifier">givens_array</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">get_variable</span>( <span class="ruby-identifier">given</span>.<span class="ruby-identifier">text</span> )
255
+ 54: }
256
+ 55:
257
+ 56: <span class="ruby-identifier">table</span> = <span class="ruby-identifier">definition</span>.<span class="ruby-identifier">elements</span>[<span class="ruby-value str">&quot;TABLE&quot;</span>].<span class="ruby-identifier">text</span>.<span class="ruby-identifier">split</span>
258
+ 57:
259
+ 58: <span class="ruby-identifier">givens_array</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">g</span><span class="ruby-operator">|</span> <span class="ruby-identifier">bn</span>.<span class="ruby-identifier">add_edge</span>(<span class="ruby-identifier">g</span>, <span class="ruby-identifier">node</span>) }
260
+ 59:
261
+ 60: <span class="ruby-identifier">node</span>.<span class="ruby-identifier">set_probability_table</span>(<span class="ruby-identifier">givens_array</span>, <span class="ruby-identifier">table</span>)
262
+ 61: }
263
+ 62: <span class="ruby-identifier">bn</span>
264
+ 63: <span class="ruby-keyword kw">end</span>
265
+ </pre>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ <div class="method">
270
+ <div class="title">
271
+ <a name="M000017"></a><b>deep</b>()
272
+ </div>
273
+ <div class="description">
274
+ <p>
275
+ Returns de deep of the bayes net (larger path from a root node to a child
276
+ node).
277
+ </p>
278
+ </div>
279
+ <div class="sourcecode">
280
+ <p class="source-link">[ <a href="javascript:toggleSource('M000017_source')" id="l_M000017_source">show source</a> ]</p>
281
+ <div id="M000017_source" class="dyn-source">
282
+ <pre>
283
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 116</span>
284
+ 116: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deep</span>
285
+ 117: <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">collect</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">root</span><span class="ruby-operator">|</span> <span class="ruby-identifier">root</span>.<span class="ruby-identifier">deep</span> }.<span class="ruby-identifier">max</span>
286
+ 118: <span class="ruby-keyword kw">end</span>
287
+ </pre>
288
+ </div>
289
+ </div>
290
+ </div>
291
+ <div class="method">
292
+ <div class="title">
293
+ <a name="M000008"></a><b>each_child</b>(v) {|child| ...}
294
+ </div>
295
+ <div class="description">
296
+ <p>
297
+ Iterates all the childs of given node ( or vertice )
298
+ </p>
299
+ </div>
300
+ <div class="sourcecode">
301
+ <p class="source-link">[ <a href="javascript:toggleSource('M000008_source')" id="l_M000008_source">show source</a> ]</p>
302
+ <div id="M000008_source" class="dyn-source">
303
+ <pre>
304
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 65</span>
305
+ 65: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each_child</span>(<span class="ruby-identifier">v</span>)
306
+ 66: <span class="ruby-identifier">childs</span>(<span class="ruby-identifier">v</span>).<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">child</span> }
307
+ 67: <span class="ruby-keyword kw">end</span>
308
+ </pre>
309
+ </div>
310
+ </div>
311
+ </div>
312
+ <div class="method">
313
+ <div class="title">
314
+ <a name="M000013"></a><b>each_leaf</b>() {|leaf| ...}
315
+ </div>
316
+ <div class="description">
317
+ <p>
318
+ Iterates all the leaf nodes ( or vertices )
319
+ </p>
320
+ </div>
321
+ <div class="sourcecode">
322
+ <p class="source-link">[ <a href="javascript:toggleSource('M000013_source')" id="l_M000013_source">show source</a> ]</p>
323
+ <div id="M000013_source" class="dyn-source">
324
+ <pre>
325
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 91</span>
326
+ 91: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">each_leaf</span>
327
+ 92: <span class="ruby-identifier">leafs</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">leaf</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">leaf</span> }
328
+ 93: <span class="ruby-keyword kw">end</span>
329
+ </pre>
330
+ </div>
331
+ </div>
332
+ </div>
333
+ <div class="method">
334
+ <div class="title">
335
+ <a name="M000023"></a><b>enumeration_ask</b>(x,e, bn_vertices = vertices)
336
+ </div>
337
+ <div class="description">
338
+ <p>
339
+ ENUMERATION ASK algorithm
340
+ </p>
341
+ <p>
342
+ Implementation based on: S.Russell, P.Norving, &quot;Artificial
343
+ Intelligence, A Modern Approach&quot;, 2nd Edition. pp 506
344
+ </p>
345
+ <p>
346
+ <b>x</b> &#8212;&gt; query variable
347
+ </p>
348
+ <p>
349
+ <b>e</b> &#8212;&gt; variables with observed values
350
+ </p>
351
+ </div>
352
+ <div class="sourcecode">
353
+ <p class="source-link">[ <a href="javascript:toggleSource('M000023_source')" id="l_M000023_source">show source</a> ]</p>
354
+ <div id="M000023_source" class="dyn-source">
355
+ <pre>
356
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_algorithms.rb, line 29</span>
357
+ 29: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">enumeration_ask</span>(<span class="ruby-identifier">x</span>,<span class="ruby-identifier">e</span>, <span class="ruby-identifier">bn_vertices</span> = <span class="ruby-identifier">vertices</span>)
358
+ 30: <span class="ruby-identifier">e</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">x</span>
359
+ 31: <span class="ruby-identifier">q</span> = []
360
+ 32: <span class="ruby-comment cmt">#p bn_vertices.collect { |v| v.name }
361
+ 33: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">outcome</span><span class="ruby-operator">|</span>
362
+ 34: <span class="ruby-identifier">x</span>.<span class="ruby-identifier">set_value</span>(<span class="ruby-identifier">outcome</span>)
363
+ 35: <span class="ruby-identifier">q</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">enumerate_all</span>(<span class="ruby-identifier">bn_vertices</span>, <span class="ruby-identifier">e</span>)
364
+ 36: }
365
+ 37: <span class="ruby-identifier">q</span>
366
+ 38: <span class="ruby-keyword kw">end</span>
367
+ </pre>
368
+ </div>
369
+ </div>
370
+ </div>
371
+ <div class="method">
372
+ <div class="title">
373
+ <a name="M000010"></a><b>get_variable</b>( text )
374
+ </div>
375
+ <div class="description">
376
+ <p>
377
+ Gets the variable with given name.
378
+ </p>
379
+ </div>
380
+ <div class="sourcecode">
381
+ <p class="source-link">[ <a href="javascript:toggleSource('M000010_source')" id="l_M000010_source">show source</a> ]</p>
382
+ <div id="M000010_source" class="dyn-source">
383
+ <pre>
384
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 75</span>
385
+ 75: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_variable</span>( <span class="ruby-identifier">text</span> )
386
+ 76: <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">v</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">text</span> }
387
+ 77: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">nil</span>
388
+ 78: <span class="ruby-keyword kw">end</span>
389
+ </pre>
390
+ </div>
391
+ </div>
392
+ </div>
393
+ <div class="method">
394
+ <div class="title">
395
+ <a name="M000018"></a><b>inference_by_enumeration</b>()
396
+ </div>
397
+ <div class="description">
398
+ <p>
399
+ Return the probability of a distribution in the bayes net all nodes in the
400
+ Bayes Net must have a value, otherwise will raise a exception
401
+ </p>
402
+ </div>
403
+ <div class="sourcecode">
404
+ <p class="source-link">[ <a href="javascript:toggleSource('M000018_source')" id="l_M000018_source">show source</a> ]</p>
405
+ <div id="M000018_source" class="dyn-source">
406
+ <pre>
407
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 122</span>
408
+ 122: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">inference_by_enumeration</span>
409
+ 123: <span class="ruby-identifier">prob</span> = <span class="ruby-value">1.0</span>;
410
+ 124: <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">prob</span> = <span class="ruby-identifier">prob</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">p_v_cond_parents</span>(<span class="ruby-identifier">v</span>)}
411
+ 125: <span class="ruby-identifier">prob</span>
412
+ 126: <span class="ruby-keyword kw">end</span>
413
+ </pre>
414
+ </div>
415
+ </div>
416
+ </div>
417
+ <div class="method">
418
+ <div class="title">
419
+ <a name="M000012"></a><b>leafs</b>()
420
+ </div>
421
+ <div class="description">
422
+ <p>
423
+ Returns the leaf nodes
424
+ </p>
425
+ </div>
426
+ <div class="sourcecode">
427
+ <p class="source-link">[ <a href="javascript:toggleSource('M000012_source')" id="l_M000012_source">show source</a> ]</p>
428
+ <div id="M000012_source" class="dyn-source">
429
+ <pre>
430
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 86</span>
431
+ 86: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">leafs</span>
432
+ 87: <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">childs</span>(<span class="ruby-identifier">v</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> }
433
+ 88: <span class="ruby-keyword kw">end</span>
434
+ </pre>
435
+ </div>
436
+ </div>
437
+ </div>
438
+ <div class="method">
439
+ <div class="title">
440
+ <a name="M000026"></a><b>likelihood_weighting</b>( x, e, n, bn = self )
441
+ </div>
442
+ <div class="description">
443
+ <p>
444
+ Returns an estimation of P(X=x|e) = &lt;P(X=x|e), 1 - P(X=x|e)&gt;
445
+ obtained.
446
+ </p>
447
+ <p>
448
+ Implementation based on: S.Russell, P.Norving, &quot;Artificial
449
+ Intelligence, A Modern Approach&quot;, 2nd Edition. pp 515
450
+ </p>
451
+ <p>
452
+ <b>x</b> &#8212;&gt; query variable
453
+ </p>
454
+ <p>
455
+ <b>e</b> &#8212;&gt; variables with observed values, must be a copy of the
456
+ nodes in bn ( Can&#8216;t be the BayesNetNodes instaces that are in bn ).
457
+ </p>
458
+ <p>
459
+ <b>n</b> &#8212;&gt; Number of samples generated
460
+ </p>
461
+ <p>
462
+ WARNING: Clears the values of current bn!
463
+ </p>
464
+ </div>
465
+ <div class="sourcecode">
466
+ <p class="source-link">[ <a href="javascript:toggleSource('M000026_source')" id="l_M000026_source">show source</a> ]</p>
467
+ <div id="M000026_source" class="dyn-source">
468
+ <pre>
469
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_algorithms.rb, line 121</span>
470
+ 121: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">likelihood_weighting</span>( <span class="ruby-identifier">x</span>, <span class="ruby-identifier">e</span>, <span class="ruby-identifier">n</span>, <span class="ruby-identifier">bn</span> = <span class="ruby-keyword kw">self</span> )
471
+ 122:
472
+ 123: <span class="ruby-identifier">retval</span> = [<span class="ruby-value">0</span><span class="ruby-value">.0</span>, <span class="ruby-value">0</span><span class="ruby-value">.0</span>]
473
+ 124: <span class="ruby-identifier">n</span>.<span class="ruby-identifier">times</span> {
474
+ 125: <span class="ruby-identifier">w_sample</span>, <span class="ruby-identifier">w</span> = <span class="ruby-identifier">weighted_sample</span>(<span class="ruby-identifier">e</span>) <span class="ruby-comment cmt"># ask for a weighted_sample with given evidences
475
+ 126: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">w_sample</span>.<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">name</span> }[<span class="ruby-value">0</span>].<span class="ruby-identifier">value</span> <span class="ruby-comment cmt"># select the value for the query variable
476
+ 127:
477
+ 128: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">x</span>.<span class="ruby-identifier">value</span> <span class="ruby-operator">||</span> <span class="ruby-keyword kw">true</span>) <span class="ruby-comment cmt"># if no value for x, ask for true
478
+ 129: <span class="ruby-identifier">retval</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">w</span>
479
+ 130: <span class="ruby-keyword kw">else</span>
480
+ 131: <span class="ruby-identifier">retval</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">+=</span> <span class="ruby-identifier">w</span>
481
+ 132: <span class="ruby-keyword kw">end</span>
482
+ 133: }
483
+ 134:
484
+ 135: <span class="ruby-comment cmt"># Normalize results
485
+ 136: <span class="ruby-identifier">norm</span> = <span class="ruby-identifier">retval</span>[<span class="ruby-value">1</span>].<span class="ruby-identifier">to_f</span> <span class="ruby-operator">/</span> (<span class="ruby-identifier">retval</span>[<span class="ruby-value">0</span>]<span class="ruby-operator">+</span><span class="ruby-identifier">retval</span>[<span class="ruby-value">1</span>]).<span class="ruby-identifier">to_f</span>
486
+ 137:
487
+ 138: <span class="ruby-keyword kw">return</span> [<span class="ruby-identifier">norm</span>, <span class="ruby-value">1</span><span class="ruby-operator">-</span><span class="ruby-identifier">norm</span>]
488
+ 139: <span class="ruby-keyword kw">end</span>
489
+ </pre>
490
+ </div>
491
+ </div>
492
+ </div>
493
+ <div class="method">
494
+ <div class="title">
495
+ <a name="M000022"></a><b>nodes_ordered_by_breath_first_search</b>(nodes = roots, bn_ordered = Array.new)
496
+ </div>
497
+ <div class="description">
498
+ <p>
499
+ Returns nodes ordered by Breath First Search
500
+ </p>
501
+ </div>
502
+ <div class="sourcecode">
503
+ <p class="source-link">[ <a href="javascript:toggleSource('M000022_source')" id="l_M000022_source">show source</a> ]</p>
504
+ <div id="M000022_source" class="dyn-source">
505
+ <pre>
506
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 152</span>
507
+ 152: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nodes_ordered_by_breath_first_search</span>(<span class="ruby-identifier">nodes</span> = <span class="ruby-identifier">roots</span>, <span class="ruby-identifier">bn_ordered</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>)
508
+ 153:
509
+ 154: <span class="ruby-identifier">nodes</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
510
+ 155: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">bn_ordered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">v</span>)
511
+ 156: <span class="ruby-identifier">bn_ordered</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>
512
+ 157: <span class="ruby-identifier">nodes_ordered_by_breath_first_search</span>(<span class="ruby-identifier">childs</span>(<span class="ruby-identifier">v</span>), <span class="ruby-identifier">bn_ordered</span>)
513
+ 158: }
514
+ 159: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">bn_ordered</span>.<span class="ruby-identifier">flatten</span>
515
+ 160: <span class="ruby-keyword kw">end</span>
516
+ </pre>
517
+ </div>
518
+ </div>
519
+ </div>
520
+ <div class="method">
521
+ <div class="title">
522
+ <a name="M000021"></a><b>nodes_ordered_by_dependencies</b>(nodes = vertices, bn_ordered = Array.new)
523
+ </div>
524
+ <div class="description">
525
+ <p>
526
+ Returns nodes ordered by dependencies ( from those who haven&#8217;t (
527
+ roots ) to leaves ).
528
+ </p>
529
+ </div>
530
+ <div class="sourcecode">
531
+ <p class="source-link">[ <a href="javascript:toggleSource('M000021_source')" id="l_M000021_source">show source</a> ]</p>
532
+ <div id="M000021_source" class="dyn-source">
533
+ <pre>
534
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 142</span>
535
+ 142: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">nodes_ordered_by_dependencies</span>(<span class="ruby-identifier">nodes</span> = <span class="ruby-identifier">vertices</span>, <span class="ruby-identifier">bn_ordered</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>)
536
+ 143: <span class="ruby-identifier">nodes</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
537
+ 144: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">bn_ordered</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">v</span>)
538
+ 145: <span class="ruby-identifier">nodes_ordered_by_dependencies</span>(<span class="ruby-identifier">v</span>.<span class="ruby-identifier">parents</span>, <span class="ruby-identifier">bn_ordered</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">v</span>.<span class="ruby-identifier">root?</span>
539
+ 146: <span class="ruby-identifier">bn_ordered</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>
540
+ 147: }
541
+ 148: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">bn_ordered</span>.<span class="ruby-identifier">flatten</span>
542
+ 149: <span class="ruby-keyword kw">end</span>
543
+ </pre>
544
+ </div>
545
+ </div>
546
+ </div>
547
+ <div class="method">
548
+ <div class="title">
549
+ <a name="M000016"></a><b>num_parents</b>(v)
550
+ </div>
551
+ <div class="description">
552
+ <p>
553
+ Returns the number of parents of a node.
554
+ </p>
555
+ </div>
556
+ <div class="sourcecode">
557
+ <p class="source-link">[ <a href="javascript:toggleSource('M000016_source')" id="l_M000016_source">show source</a> ]</p>
558
+ <div id="M000016_source" class="dyn-source">
559
+ <pre>
560
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 110</span>
561
+ 110: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">num_parents</span>(<span class="ruby-identifier">v</span>)
562
+ 111: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">size</span>
563
+ 112: <span class="ruby-keyword kw">end</span>
564
+ </pre>
565
+ </div>
566
+ </div>
567
+ </div>
568
+ <div class="method">
569
+ <div class="title">
570
+ <a name="M000019"></a><b>p_v_cond_parents</b>(v)
571
+ </div>
572
+ <div class="description">
573
+ <p>
574
+ Returns the probability of a node conditioned to his parents:
575
+ </p>
576
+ <pre>
577
+ P(v|parents(v))
578
+ </pre>
579
+ </div>
580
+ <div class="sourcecode">
581
+ <p class="source-link">[ <a href="javascript:toggleSource('M000019_source')" id="l_M000019_source">show source</a> ]</p>
582
+ <div id="M000019_source" class="dyn-source">
583
+ <pre>
584
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 130</span>
585
+ 130: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">p_v_cond_parents</span>(<span class="ruby-identifier">v</span>)
586
+ 131: <span class="ruby-identifier">givens_assignments</span> = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">collect</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">parents</span><span class="ruby-operator">|</span> <span class="ruby-identifier">parents</span>.<span class="ruby-identifier">value</span>}
587
+ 132: <span class="ruby-identifier">v</span>.<span class="ruby-identifier">get_probability</span>(<span class="ruby-identifier">v</span>.<span class="ruby-identifier">value</span>, <span class="ruby-identifier">givens_assignments</span>).<span class="ruby-identifier">to_f</span>
588
+ 133: <span class="ruby-keyword kw">end</span>
589
+ </pre>
590
+ </div>
591
+ </div>
592
+ </div>
593
+ <div class="method">
594
+ <div class="title">
595
+ <a name="M000024"></a><b>prior_sample</b>(nodes_ordered = nodes_ordered_by_dependencies)
596
+ </div>
597
+ <div class="description">
598
+ <p>
599
+ Returns a sample from prior joint distribution specified by the network.
600
+ </p>
601
+ <p>
602
+ Implementation based on: S.Russell, P.Norving, &quot;Artificial
603
+ Intelligence, A Modern Approach&quot;, 2nd Edition. pp 511-512
604
+ </p>
605
+ <p>
606
+ The input are the nodes of the bn ordered by dependencies see <a
607
+ href="BayesNet.html#M000021">nodes_ordered_by_dependencies</a>
608
+ </p>
609
+ </div>
610
+ <div class="sourcecode">
611
+ <p class="source-link">[ <a href="javascript:toggleSource('M000024_source')" id="l_M000024_source">show source</a> ]</p>
612
+ <div id="M000024_source" class="dyn-source">
613
+ <pre>
614
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_algorithms.rb, line 46</span>
615
+ 46: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">prior_sample</span>(<span class="ruby-identifier">nodes_ordered</span> = <span class="ruby-identifier">nodes_ordered_by_dependencies</span>)
616
+ 47: <span class="ruby-identifier">sample</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
617
+ 48: <span class="ruby-identifier">nodes_ordered</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
618
+ 49: <span class="ruby-identifier">value</span> = <span class="ruby-keyword kw">nil</span>
619
+ 50: <span class="ruby-identifier">prob</span> = <span class="ruby-value">0</span><span class="ruby-value">.0</span>; <span class="ruby-identifier">r_prob</span> = <span class="ruby-identifier">rand</span>
620
+ 51: <span class="ruby-identifier">v</span>.<span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">outcome</span><span class="ruby-operator">|</span>
621
+ 52: <span class="ruby-identifier">prob</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">get_probability</span>(<span class="ruby-identifier">outcome</span>)
622
+ 53: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">outcome</span> <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">r_prob</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">prob</span>
623
+ 54: }
624
+ 55: <span class="ruby-identifier">v</span>.<span class="ruby-identifier">set_value</span>(<span class="ruby-identifier">value</span>)
625
+ 56: <span class="ruby-identifier">sample</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">copy</span>
626
+ 57: }
627
+ 58: <span class="ruby-comment cmt"># leave the bn clear of values.
628
+ 59: <span class="ruby-identifier">nodes_ordered</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">clear_value</span> }
629
+ 60:
630
+ 61: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sample</span>
631
+ 62: <span class="ruby-keyword kw">end</span>
632
+ </pre>
633
+ </div>
634
+ </div>
635
+ </div>
636
+ <div class="method">
637
+ <div class="title">
638
+ <a name="M000025"></a><b>rejection_sampling</b>( x, e, n, bn = self )
639
+ </div>
640
+ <div class="description">
641
+ <p>
642
+ Returns an estimation of P(X=x|e) = &lt;P(X=x|e), 1 - P(X=x|e)&gt;
643
+ obtained. Generates samples from prior joint distribution specified by the
644
+ network, rejects all those that do not match the evidence, and finally
645
+ counts hoy often X = x occurs in remaining samples.
646
+ </p>
647
+ <p>
648
+ Caution, this algorthm is unusable for complex problems because rejects
649
+ many samples!
650
+ </p>
651
+ <p>
652
+ Implementation based on: S.Russell, P.Norving, &quot;Artificial
653
+ Intelligence, A Modern Approach&quot;, 2nd Edition. pp 513
654
+ </p>
655
+ <p>
656
+ <b>x</b> &#8212;&gt; query variable
657
+ </p>
658
+ <p>
659
+ <b>e</b> &#8212;&gt; variables with observed values
660
+ </p>
661
+ <p>
662
+ <b>n</b> &#8212;&gt; Number of samples generated
663
+ </p>
664
+ </div>
665
+ <div class="sourcecode">
666
+ <p class="source-link">[ <a href="javascript:toggleSource('M000025_source')" id="l_M000025_source">show source</a> ]</p>
667
+ <div id="M000025_source" class="dyn-source">
668
+ <pre>
669
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_algorithms.rb, line 79</span>
670
+ 79: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rejection_sampling</span>( <span class="ruby-identifier">x</span>, <span class="ruby-identifier">e</span>, <span class="ruby-identifier">n</span>, <span class="ruby-identifier">bn</span> = <span class="ruby-keyword kw">self</span> )
671
+ 80:
672
+ 81: <span class="ruby-identifier">evidece_list</span> = [<span class="ruby-identifier">e</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">Array</span>
673
+ 82: <span class="ruby-identifier">x_list</span> = [<span class="ruby-identifier">x</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">x</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">Array</span>
674
+ 83:
675
+ 84: <span class="ruby-identifier">nodes_ordered</span> = <span class="ruby-identifier">bn</span>.<span class="ruby-identifier">nodes_ordered_by_dependencies</span>
676
+ 85: <span class="ruby-identifier">evidence_vector</span> = <span class="ruby-identifier">get_vector_value</span>(<span class="ruby-identifier">evidece_list</span>, <span class="ruby-identifier">nodes_ordered</span>)
677
+ 86: <span class="ruby-identifier">x_vector</span> = <span class="ruby-identifier">get_vector_value</span>(<span class="ruby-identifier">x_list</span>, <span class="ruby-identifier">nodes_ordered</span>)
678
+ 87:
679
+ 88: <span class="ruby-identifier">total_valid</span> = <span class="ruby-value">0</span>; <span class="ruby-identifier">total_correct</span> = <span class="ruby-value">0</span>
680
+ 89: <span class="ruby-identifier">n</span>.<span class="ruby-identifier">times</span> <span class="ruby-keyword kw">do</span>
681
+ 90: <span class="ruby-identifier">sample_vector</span> = <span class="ruby-identifier">bn</span>.<span class="ruby-identifier">prior_sample</span>(<span class="ruby-identifier">nodes_ordered</span>).<span class="ruby-identifier">collect</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">value</span>}
682
+ 91:
683
+ 92: <span class="ruby-identifier">valid</span> = <span class="ruby-keyword kw">true</span>; <span class="ruby-identifier">correct</span> = <span class="ruby-keyword kw">true</span>
684
+ 93: <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword kw">in</span> <span class="ruby-value">0</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">sample_vector</span>.<span class="ruby-identifier">size</span><span class="ruby-operator">-</span><span class="ruby-value">1</span>) <span class="ruby-keyword kw">do</span>
685
+ 94: <span class="ruby-identifier">correct</span> = <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">x_vector</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">sample_vector</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">x_vector</span>[<span class="ruby-identifier">i</span>]
686
+ 95: <span class="ruby-identifier">valid</span> = <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">evidence_vector</span>[<span class="ruby-identifier">i</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">sample_vector</span>[<span class="ruby-identifier">i</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">evidence_vector</span>[<span class="ruby-identifier">i</span>]
687
+ 96: <span class="ruby-keyword kw">end</span>
688
+ 97:
689
+ 98: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">valid</span>
690
+ 99: <span class="ruby-identifier">total_valid</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
691
+ 100: <span class="ruby-identifier">total_correct</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">correct</span>
692
+ 101: <span class="ruby-keyword kw">end</span>
693
+ 102:
694
+ 103: <span class="ruby-identifier">p_true</span> = <span class="ruby-identifier">total_correct</span>.<span class="ruby-identifier">to_f</span><span class="ruby-operator">/</span><span class="ruby-identifier">total_valid</span>.<span class="ruby-identifier">to_f</span>
695
+ 104: <span class="ruby-keyword kw">return</span> [<span class="ruby-identifier">p_true</span>, <span class="ruby-value">1</span><span class="ruby-operator">-</span><span class="ruby-identifier">p_true</span>]
696
+ 105: <span class="ruby-comment cmt">#return [total_correct.to_f, total_valid.to_f]
697
+ 106: <span class="ruby-keyword kw">end</span>
698
+ </pre>
699
+ </div>
700
+ </div>
701
+ </div>
702
+ <div class="method">
703
+ <div class="title">
704
+ <a name="M000006"></a><b>remove_vertex</b>(v)
705
+ </div>
706
+ <div class="description">
707
+ <p>
708
+ Removes a vertex and its edges of the <a href="BayesNet.html">BayesNet</a>,
709
+ removing also its references from childs nodes.
710
+ </p>
711
+ </div>
712
+ <div class="sourcecode">
713
+ <p class="source-link">[ <a href="javascript:toggleSource('M000006_source')" id="l_M000006_source">show source</a> ]</p>
714
+ <div id="M000006_source" class="dyn-source">
715
+ <pre>
716
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 40</span>
717
+ 40: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">remove_vertex</span>(<span class="ruby-identifier">v</span>)
718
+ 41: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">each_child</span>(<span class="ruby-identifier">v</span>) {<span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">v</span>)}
719
+ 42: <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">v</span>)
720
+ 43: <span class="ruby-keyword kw">end</span>
721
+ </pre>
722
+ </div>
723
+ </div>
724
+ </div>
725
+ <div class="method">
726
+ <div class="title">
727
+ <a name="M000015"></a><b>root?</b>(v)
728
+ </div>
729
+ <div class="description">
730
+ <p>
731
+ Returns true/false if given Node is root.
732
+ </p>
733
+ </div>
734
+ <div class="sourcecode">
735
+ <p class="source-link">[ <a href="javascript:toggleSource('M000015_source')" id="l_M000015_source">show source</a> ]</p>
736
+ <div id="M000015_source" class="dyn-source">
737
+ <pre>
738
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 104</span>
739
+ 104: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">root?</span>(<span class="ruby-identifier">v</span>)
740
+ 105: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">num_parents</span>(<span class="ruby-identifier">v</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
741
+ 106: <span class="ruby-keyword kw">false</span>
742
+ 107: <span class="ruby-keyword kw">end</span>
743
+ </pre>
744
+ </div>
745
+ </div>
746
+ </div>
747
+ <div class="method">
748
+ <div class="title">
749
+ <a name="M000011"></a><b>roots</b>()
750
+ </div>
751
+ <div class="description">
752
+ <p>
753
+ Returns the root nodes of the Bayes Net.
754
+ </p>
755
+ </div>
756
+ <div class="sourcecode">
757
+ <p class="source-link">[ <a href="javascript:toggleSource('M000011_source')" id="l_M000011_source">show source</a> ]</p>
758
+ <div id="M000011_source" class="dyn-source">
759
+ <pre>
760
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 81</span>
761
+ 81: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">roots</span>
762
+ 82: <span class="ruby-identifier">vertices</span>.<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">root?</span>(<span class="ruby-identifier">v</span>) }
763
+ 83: <span class="ruby-keyword kw">end</span>
764
+ </pre>
765
+ </div>
766
+ </div>
767
+ </div>
768
+ <div class="method">
769
+ <div class="title">
770
+ <a name="M000014"></a><b>siblings</b>(v)
771
+ </div>
772
+ <div class="sourcecode">
773
+ <p class="source-link">[ <a href="javascript:toggleSource('M000014_source')" id="l_M000014_source">show source</a> ]</p>
774
+ <div id="M000014_source" class="dyn-source">
775
+ <pre>
776
+ <span class="ruby-comment cmt"># File lib/bn4r/bn.rb, line 95</span>
777
+ 95: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">siblings</span>(<span class="ruby-identifier">v</span>)
778
+ 96: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">roots</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">root?</span>
779
+ 97: <span class="ruby-identifier">v</span>.<span class="ruby-identifier">parents</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
780
+ 98: <span class="ruby-identifier">childs</span>(<span class="ruby-identifier">p</span>)
781
+ 99: <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">uniq</span>
782
+ 100: <span class="ruby-keyword kw">end</span>
783
+ </pre>
784
+ </div>
785
+ </div>
786
+ </div>
787
+ <div class="method">
788
+ <div class="title">
789
+ <a name="M000003"></a><b>to_dot</b>(bn = self)
790
+ </div>
791
+ <div class="sourcecode">
792
+ <p class="source-link">[ <a href="javascript:toggleSource('M000003_source')" id="l_M000003_source">show source</a> ]</p>
793
+ <div id="M000003_source" class="dyn-source">
794
+ <pre>
795
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_export.rb, line 20</span>
796
+ 20: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_dot</span>(<span class="ruby-identifier">bn</span> = <span class="ruby-keyword kw">self</span>)
797
+ 21: <span class="ruby-comment cmt">#TODO: label relations between nodes
798
+ 22: <span class="ruby-comment cmt">#TODO: print information about probabilities tables?
799
+ 23: <span class="ruby-identifier">bn</span>.<span class="ruby-identifier">to_dot_graph</span>.<span class="ruby-identifier">to_s</span>
800
+ 24: <span class="ruby-keyword kw">end</span>
801
+ </pre>
802
+ </div>
803
+ </div>
804
+ </div>
805
+ <div class="method">
806
+ <div class="title">
807
+ <a name="M000004"></a><b>to_xbn</b>(bn = self)
808
+ </div>
809
+ <div class="sourcecode">
810
+ <p class="source-link">[ <a href="javascript:toggleSource('M000004_source')" id="l_M000004_source">show source</a> ]</p>
811
+ <div id="M000004_source" class="dyn-source">
812
+ <pre>
813
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_export.rb, line 26</span>
814
+ 26: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_xbn</span>(<span class="ruby-identifier">bn</span> = <span class="ruby-keyword kw">self</span>)
815
+ 27: <span class="ruby-comment cmt">#TODO beautify code using REXML
816
+ 28: <span class="ruby-identifier">xbn_str</span> = <span class="ruby-value str">&quot;&lt;?xml version=\&quot;1.0\&quot;?&gt;\n&quot;</span>
817
+ 29: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;&lt;ANALYSISNOTEBOOK NAME=\&quot;Notebook.bndefault\&quot; ROOT=\&quot;bndefault\&quot;&gt;\n&quot;</span>
818
+ 30: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;&lt;BNMODEL NAME=\&quot;bndefault\&quot;&gt;&lt;STATICPROPERTIES&gt;&lt;FORMAT&gt;MSR DTAS XML&lt;/FORMAT&gt;\n&quot;</span>
819
+ 31: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;VERSION&gt;1.0&lt;/VERSION&gt;\n&quot;</span>
820
+ 32: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;CREATOR&gt;Microsoft Research DTAS&lt;/CREATOR&gt;\n&quot;</span>
821
+ 33: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;/STATICPROPERTIES&gt;\n&quot;</span>
822
+ 34: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;DYNAMICPROPERTIES&gt;&lt;PROPERTYTYPE NAME=\&quot;DTASDG_Notes\&quot; TYPE=\&quot;stringarray\&quot;&gt;&lt;COMMENT&gt;Notes on the diagram&lt;/COMMENT&gt;\n&quot;</span>
823
+ 35: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;/PROPERTYTYPE&gt;\n&quot;</span>
824
+ 36: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;PROPERTYTYPE NAME=\&quot;MS_Addins\&quot; TYPE=\&quot;stringarray\&quot;/&gt;\n&quot;</span>
825
+ 37: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;/DYNAMICPROPERTIES&gt;\n&quot;</span>
826
+ 38:
827
+ 39: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">xbn_variables</span>(<span class="ruby-identifier">bn</span>)
828
+ 40: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">xbn_structure</span>(<span class="ruby-identifier">bn</span>)
829
+ 41: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">xbn_distributions</span>(<span class="ruby-identifier">bn</span>)
830
+ 42:
831
+ 43: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot; &lt;/BNMODEL&gt;\n&quot;</span>
832
+ 44: <span class="ruby-identifier">xbn_str</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;&lt;/ANALYSISNOTEBOOK&gt;\n&quot;</span>
833
+ 45:
834
+ 46: <span class="ruby-keyword kw">end</span>
835
+ </pre>
836
+ </div>
837
+ </div>
838
+ </div>
839
+ <div class="sectiontitle">Protected Instance methods</div>
840
+ <div class="method">
841
+ <div class="title">
842
+ <a name="M000027"></a><b>enumerate_all</b>(vars, e)
843
+ </div>
844
+ <div class="description">
845
+ <p>
846
+ Auxiliar function to compute Enumeration Ask Algorithm
847
+ </p>
848
+ </div>
849
+ <div class="sourcecode">
850
+ <p class="source-link">[ <a href="javascript:toggleSource('M000027_source')" id="l_M000027_source">show source</a> ]</p>
851
+ <div id="M000027_source" class="dyn-source">
852
+ <pre>
853
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_algorithms.rb, line 143</span>
854
+ 143: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">enumerate_all</span>(<span class="ruby-identifier">vars</span>, <span class="ruby-identifier">e</span>)
855
+ 144:
856
+ 145: <span class="ruby-keyword kw">return</span> <span class="ruby-value">1.0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">empty?</span>
857
+ 146:
858
+ 147: <span class="ruby-identifier">y</span> = <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">first</span>; <span class="ruby-identifier">i</span> = <span class="ruby-value">1</span>
859
+ 148: <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-identifier">y</span>.<span class="ruby-identifier">all_parents_with_values?</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">size</span>
860
+ 149: <span class="ruby-identifier">y</span> = <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">i</span>]
861
+ 150: <span class="ruby-identifier">i</span> = <span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
862
+ 151: <span class="ruby-keyword kw">end</span>
863
+ 152: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Error bayes net not computable with enumeration-ask &quot;</span> <span class="ruby-operator">+</span> \
864
+ 153: <span class="ruby-value str">&quot;algorithm&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">size</span> <span class="ruby-keyword kw">and</span> <span class="ruby-operator">!</span><span class="ruby-identifier">y</span>.<span class="ruby-identifier">all_parents_with_values?</span>
865
+ 154:
866
+ 155: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">y</span>)
867
+ 156: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">p_v_cond_parents</span>(<span class="ruby-identifier">y</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">enumerate_all</span>(<span class="ruby-identifier">vars</span><span class="ruby-operator">-</span>[<span class="ruby-identifier">y</span>], <span class="ruby-identifier">e</span>)
868
+ 157: <span class="ruby-keyword kw">else</span>
869
+ 158: <span class="ruby-identifier">prob</span> = <span class="ruby-value">0</span><span class="ruby-value">.0</span>
870
+ 159: <span class="ruby-identifier">y</span>.<span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">outcome</span><span class="ruby-operator">|</span>
871
+ 160: <span class="ruby-identifier">y</span>.<span class="ruby-identifier">set_value</span>(<span class="ruby-identifier">outcome</span>)
872
+ 161: <span class="ruby-identifier">prob</span> = <span class="ruby-identifier">prob</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">p_v_cond_parents</span>(<span class="ruby-identifier">y</span>) <span class="ruby-operator">*</span> <span class="ruby-identifier">enumerate_all</span>(<span class="ruby-identifier">vars</span><span class="ruby-operator">-</span>[<span class="ruby-identifier">y</span>], <span class="ruby-identifier">e</span><span class="ruby-operator">+</span>[<span class="ruby-identifier">y</span>])
873
+ 162: <span class="ruby-identifier">y</span>.<span class="ruby-identifier">clear_value</span>
874
+ 163: }
875
+ 164: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">prob</span>
876
+ 165: <span class="ruby-keyword kw">end</span>
877
+ 166: <span class="ruby-keyword kw">end</span>
878
+ </pre>
879
+ </div>
880
+ </div>
881
+ </div>
882
+ <div class="method">
883
+ <div class="title">
884
+ <a name="M000029"></a><b>get_vector_value</b>(vertices_vector, bn_vertices_ordered)
885
+ </div>
886
+ <div class="description">
887
+ <p>
888
+ Axiliar function that returns an array of bn_vertices_ordered.size
889
+ positions with nil if position aren&#8217;t in vertices_vector, and value
890
+ if there&#8217;s a match in vertices_vector.
891
+ </p>
892
+ </div>
893
+ <div class="sourcecode">
894
+ <p class="source-link">[ <a href="javascript:toggleSource('M000029_source')" id="l_M000029_source">show source</a> ]</p>
895
+ <div id="M000029_source" class="dyn-source">
896
+ <pre>
897
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_algorithms.rb, line 208</span>
898
+ 208: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_vector_value</span>(<span class="ruby-identifier">vertices_vector</span>, <span class="ruby-identifier">bn_vertices_ordered</span>)
899
+ 209: <span class="ruby-identifier">bn_vertices_ordered</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
900
+ 210: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">vertices_vector</span>.<span class="ruby-identifier">nil?</span>
901
+ 211: <span class="ruby-identifier">node_actual</span> = <span class="ruby-identifier">vertices_vector</span>.<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">node</span><span class="ruby-operator">|</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">name</span> }
902
+ 212:
903
+ 213: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">node_actual</span>.<span class="ruby-identifier">size</span>
904
+ 214: <span class="ruby-keyword kw">when</span> <span class="ruby-value">0</span>
905
+ 215: <span class="ruby-keyword kw">nil</span>
906
+ 216: <span class="ruby-keyword kw">when</span> <span class="ruby-value">1</span>
907
+ 217: <span class="ruby-identifier">node_actual</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">value</span>
908
+ 218: <span class="ruby-keyword kw">else</span>
909
+ 219: <span class="ruby-identifier">raise</span> <span class="ruby-value str">&quot;Error in get_vector_value&quot;</span>
910
+ 220: <span class="ruby-keyword kw">end</span>
911
+ 221: <span class="ruby-keyword kw">else</span>
912
+ 222: <span class="ruby-keyword kw">nil</span>
913
+ 223: <span class="ruby-keyword kw">end</span>
914
+ 224: }
915
+ 225: <span class="ruby-keyword kw">end</span>
916
+ </pre>
917
+ </div>
918
+ </div>
919
+ </div>
920
+ <div class="method">
921
+ <div class="title">
922
+ <a name="M000028"></a><b>weighted_sample</b>(e, bn = self)
923
+ </div>
924
+ <div class="description">
925
+ <p>
926
+ Returns an event and a weight.
927
+ </p>
928
+ <p>
929
+ Implementation based on: S.Russell, P.Norving, &quot;Artificial
930
+ Intelligence, A Modern Approach&quot;, 2nd Edition. pp 515
931
+ </p>
932
+ <p>
933
+ <b>e</b> &#8212;&gt; variables with observed values
934
+ </p>
935
+ <p>
936
+ WARNING: Clears the values of current bn!
937
+ </p>
938
+ </div>
939
+ <div class="sourcecode">
940
+ <p class="source-link">[ <a href="javascript:toggleSource('M000028_source')" id="l_M000028_source">show source</a> ]</p>
941
+ <div id="M000028_source" class="dyn-source">
942
+ <pre>
943
+ <span class="ruby-comment cmt"># File lib/bn4r/bn_algorithms.rb, line 176</span>
944
+ 176: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">weighted_sample</span>(<span class="ruby-identifier">e</span>, <span class="ruby-identifier">bn</span> = <span class="ruby-keyword kw">self</span>)
945
+ 177:
946
+ 178: <span class="ruby-identifier">nodes_ordered</span> = <span class="ruby-identifier">bn</span>.<span class="ruby-identifier">nodes_ordered_by_dependencies</span>
947
+ 179:
948
+ 180: <span class="ruby-identifier">sample</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
949
+ 181: <span class="ruby-identifier">w</span> = <span class="ruby-value">1.0</span>
950
+ 182: <span class="ruby-identifier">nodes_ordered</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
951
+ 183: <span class="ruby-identifier">node_actual</span> = <span class="ruby-identifier">e</span>.<span class="ruby-identifier">select</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">node</span><span class="ruby-operator">|</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">name</span> } <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Array</span>
952
+ 184: <span class="ruby-identifier">node_actual</span> = [<span class="ruby-identifier">e</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-constant">BayesNetNode</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">name</span>
953
+ 185: <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">node_actual</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">node_actual</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
954
+ 186: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">node_actual</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">value</span>
955
+ 187: <span class="ruby-identifier">w</span> = <span class="ruby-identifier">w</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">get_probability</span>(<span class="ruby-identifier">value</span>)
956
+ 188: <span class="ruby-keyword kw">else</span>
957
+ 189: <span class="ruby-identifier">rand_sample</span> = <span class="ruby-identifier">rand</span>; <span class="ruby-identifier">i_tmp</span> = <span class="ruby-value">0</span><span class="ruby-value">.0</span>
958
+ 190: <span class="ruby-identifier">v</span>.<span class="ruby-identifier">outcomes</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">outcome</span><span class="ruby-operator">|</span>
959
+ 191: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">outcome</span>
960
+ 192: <span class="ruby-identifier">i_tmp</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">get_probability</span>(<span class="ruby-identifier">value</span>)
961
+ 193: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">i_tmp</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">rand_sample</span>
962
+ 194: }
963
+ 195: <span class="ruby-keyword kw">end</span>
964
+ 196: <span class="ruby-identifier">v</span>.<span class="ruby-identifier">set_value</span>(<span class="ruby-identifier">value</span>)
965
+ 197: <span class="ruby-identifier">sample</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">copy</span>
966
+ 198: }
967
+ 199:
968
+ 200: <span class="ruby-comment cmt"># leave the bn clear of values.
969
+ 201: <span class="ruby-identifier">bn</span>.<span class="ruby-identifier">clear_values!</span>
970
+ 202: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">sample</span>, <span class="ruby-identifier">w</span>
971
+ 203: <span class="ruby-keyword kw">end</span>
972
+ </pre>
973
+ </div>
974
+ </div>
975
+ </div>
976
+ </div>
977
+
978
+ </div>
979
+
980
+ <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
981
+ </script>
982
+ <script type="text/javascript">
983
+ _uacct = "UA-262540-7";
984
+ urchinTracker();
985
+ </script>
986
+ </body>
561
987
  </html>