nudge 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. data/.gitignore +5 -0
  2. data/LICENSE.txt +21 -0
  3. data/Rakefile +23 -0
  4. data/VERSION +1 -0
  5. data/_spikes/couch_document_spike.rb +24 -0
  6. data/_spikes/nested_parsing/nested.rb +0 -0
  7. data/_spikes/nested_parsing/nested.treetop +6 -0
  8. data/_spikes/nudgeview/init.rb +19 -0
  9. data/_spikes/nudgeview/public/javascripts/app.js +12 -0
  10. data/_spikes/nudgeview/public/javascripts/jquery.js +4376 -0
  11. data/_spikes/nudgeview/public/javascripts/jquery.svg.js +1325 -0
  12. data/_spikes/nudgeview/views/index.erb +18 -0
  13. data/_spikes/nudgeview/views/index.haml +8 -0
  14. data/_spikes/simplestWeb/simplest.rb +44 -0
  15. data/_spikes/simplestWeb/views/main.erb +19 -0
  16. data/_spikes/sketches/nudgecode_spike.rb +146 -0
  17. data/_spikes/sketches/searchDSL_spike.rb +25 -0
  18. data/_spikes/sketches/search_operator_sketch_spike.txt +287 -0
  19. data/_spikes/sketches/searchspace_spike.rb +96 -0
  20. data/_spikes/symbolic_regression/activate.rb +35 -0
  21. data/_spikes/symbolic_regression/config/environment.rb +340 -0
  22. data/_spikes/symbolic_regression/config/environments/deployment.rb +0 -0
  23. data/_spikes/symbolic_regression/config/environments/development.rb +0 -0
  24. data/_spikes/symbolic_regression/experiment/objectives/programLength.rb +2 -0
  25. data/_spikes/symbolic_regression/experiment/objectives/summedSquaredError.rb +2 -0
  26. data/_spikes/symbolic_regression/lib/tasks/run.rake +0 -0
  27. data/doc/classes/BlockNode.html +146 -0
  28. data/doc/classes/BlockNode.src/M000246.html +18 -0
  29. data/doc/classes/BoolAndInstruction.html +218 -0
  30. data/doc/classes/BoolAndInstruction.src/M000003.html +15 -0
  31. data/doc/classes/BoolAndInstruction.src/M000004.html +16 -0
  32. data/doc/classes/BoolAndInstruction.src/M000005.html +15 -0
  33. data/doc/classes/BoolAndInstruction.src/M000006.html +15 -0
  34. data/doc/classes/BoolEqualQInstruction.html +218 -0
  35. data/doc/classes/BoolEqualQInstruction.src/M000015.html +15 -0
  36. data/doc/classes/BoolEqualQInstruction.src/M000016.html +16 -0
  37. data/doc/classes/BoolEqualQInstruction.src/M000017.html +15 -0
  38. data/doc/classes/BoolEqualQInstruction.src/M000018.html +15 -0
  39. data/doc/classes/BoolFromFloatInstruction.html +218 -0
  40. data/doc/classes/BoolFromFloatInstruction.src/M000071.html +15 -0
  41. data/doc/classes/BoolFromFloatInstruction.src/M000072.html +15 -0
  42. data/doc/classes/BoolFromFloatInstruction.src/M000073.html +15 -0
  43. data/doc/classes/BoolFromFloatInstruction.src/M000074.html +15 -0
  44. data/doc/classes/BoolFromIntInstruction.html +218 -0
  45. data/doc/classes/BoolFromIntInstruction.src/M000067.html +15 -0
  46. data/doc/classes/BoolFromIntInstruction.src/M000068.html +15 -0
  47. data/doc/classes/BoolFromIntInstruction.src/M000069.html +15 -0
  48. data/doc/classes/BoolFromIntInstruction.src/M000070.html +15 -0
  49. data/doc/classes/BoolNotInstruction.html +218 -0
  50. data/doc/classes/BoolNotInstruction.src/M000019.html +15 -0
  51. data/doc/classes/BoolNotInstruction.src/M000020.html +15 -0
  52. data/doc/classes/BoolNotInstruction.src/M000021.html +15 -0
  53. data/doc/classes/BoolNotInstruction.src/M000022.html +15 -0
  54. data/doc/classes/BoolOrInstruction.html +218 -0
  55. data/doc/classes/BoolOrInstruction.src/M000007.html +15 -0
  56. data/doc/classes/BoolOrInstruction.src/M000008.html +16 -0
  57. data/doc/classes/BoolOrInstruction.src/M000009.html +15 -0
  58. data/doc/classes/BoolOrInstruction.src/M000010.html +15 -0
  59. data/doc/classes/BoolRandomInstruction.html +218 -0
  60. data/doc/classes/BoolRandomInstruction.src/M000187.html +15 -0
  61. data/doc/classes/BoolRandomInstruction.src/M000188.html +14 -0
  62. data/doc/classes/BoolRandomInstruction.src/M000189.html +15 -0
  63. data/doc/classes/BoolRandomInstruction.src/M000190.html +15 -0
  64. data/doc/classes/BoolType.html +196 -0
  65. data/doc/classes/BoolType.src/M000240.html +16 -0
  66. data/doc/classes/BoolType.src/M000241.html +15 -0
  67. data/doc/classes/BoolType.src/M000242.html +15 -0
  68. data/doc/classes/BoolXorInstruction.html +218 -0
  69. data/doc/classes/BoolXorInstruction.src/M000011.html +15 -0
  70. data/doc/classes/BoolXorInstruction.src/M000012.html +16 -0
  71. data/doc/classes/BoolXorInstruction.src/M000013.html +15 -0
  72. data/doc/classes/BoolXorInstruction.src/M000014.html +15 -0
  73. data/doc/classes/ChannelNode.html +161 -0
  74. data/doc/classes/ChannelNode.src/M000249.html +15 -0
  75. data/doc/classes/ChannelNode.src/M000250.html +16 -0
  76. data/doc/classes/CodeType.html +269 -0
  77. data/doc/classes/CodeType.src/M000219.html +38 -0
  78. data/doc/classes/CodeType.src/M000220.html +16 -0
  79. data/doc/classes/CodeType.src/M000221.html +16 -0
  80. data/doc/classes/CodeType.src/M000222.html +16 -0
  81. data/doc/classes/CodeType.src/M000223.html +24 -0
  82. data/doc/classes/CodeType.src/M000224.html +42 -0
  83. data/doc/classes/ERCNode.html +183 -0
  84. data/doc/classes/ERCNode.src/M000254.html +15 -0
  85. data/doc/classes/ERCNode.src/M000255.html +16 -0
  86. data/doc/classes/ERCNode.src/M000256.html +16 -0
  87. data/doc/classes/ExecPopInstruction.html +218 -0
  88. data/doc/classes/ExecPopInstruction.src/M000075.html +15 -0
  89. data/doc/classes/ExecPopInstruction.src/M000076.html +14 -0
  90. data/doc/classes/ExecPopInstruction.src/M000077.html +15 -0
  91. data/doc/classes/ExecPopInstruction.src/M000078.html +14 -0
  92. data/doc/classes/FloatAbsInstruction.html +218 -0
  93. data/doc/classes/FloatAbsInstruction.src/M000107.html +15 -0
  94. data/doc/classes/FloatAbsInstruction.src/M000108.html +15 -0
  95. data/doc/classes/FloatAbsInstruction.src/M000109.html +15 -0
  96. data/doc/classes/FloatAbsInstruction.src/M000110.html +15 -0
  97. data/doc/classes/FloatAddInstruction.html +218 -0
  98. data/doc/classes/FloatAddInstruction.src/M000079.html +15 -0
  99. data/doc/classes/FloatAddInstruction.src/M000080.html +16 -0
  100. data/doc/classes/FloatAddInstruction.src/M000081.html +15 -0
  101. data/doc/classes/FloatAddInstruction.src/M000082.html +15 -0
  102. data/doc/classes/FloatCosineInstruction.html +218 -0
  103. data/doc/classes/FloatCosineInstruction.src/M000123.html +15 -0
  104. data/doc/classes/FloatCosineInstruction.src/M000124.html +15 -0
  105. data/doc/classes/FloatCosineInstruction.src/M000125.html +15 -0
  106. data/doc/classes/FloatCosineInstruction.src/M000126.html +15 -0
  107. data/doc/classes/FloatDivideInstruction.html +218 -0
  108. data/doc/classes/FloatDivideInstruction.src/M000091.html +15 -0
  109. data/doc/classes/FloatDivideInstruction.src/M000092.html +16 -0
  110. data/doc/classes/FloatDivideInstruction.src/M000093.html +20 -0
  111. data/doc/classes/FloatDivideInstruction.src/M000094.html +15 -0
  112. data/doc/classes/FloatFromBoolInstruction.html +218 -0
  113. data/doc/classes/FloatFromBoolInstruction.src/M000055.html +15 -0
  114. data/doc/classes/FloatFromBoolInstruction.src/M000056.html +15 -0
  115. data/doc/classes/FloatFromBoolInstruction.src/M000057.html +15 -0
  116. data/doc/classes/FloatFromBoolInstruction.src/M000058.html +15 -0
  117. data/doc/classes/FloatFromIntInstruction.html +218 -0
  118. data/doc/classes/FloatFromIntInstruction.src/M000063.html +15 -0
  119. data/doc/classes/FloatFromIntInstruction.src/M000064.html +15 -0
  120. data/doc/classes/FloatFromIntInstruction.src/M000065.html +15 -0
  121. data/doc/classes/FloatFromIntInstruction.src/M000066.html +15 -0
  122. data/doc/classes/FloatGreaterThanQInstruction.html +218 -0
  123. data/doc/classes/FloatGreaterThanQInstruction.src/M000035.html +15 -0
  124. data/doc/classes/FloatGreaterThanQInstruction.src/M000036.html +16 -0
  125. data/doc/classes/FloatGreaterThanQInstruction.src/M000037.html +15 -0
  126. data/doc/classes/FloatGreaterThanQInstruction.src/M000038.html +15 -0
  127. data/doc/classes/FloatIfInstruction.html +218 -0
  128. data/doc/classes/FloatIfInstruction.src/M000047.html +16 -0
  129. data/doc/classes/FloatIfInstruction.src/M000048.html +15 -0
  130. data/doc/classes/FloatIfInstruction.src/M000049.html +14 -0
  131. data/doc/classes/FloatIfInstruction.src/M000050.html +17 -0
  132. data/doc/classes/FloatLessThanQInstruction.html +218 -0
  133. data/doc/classes/FloatLessThanQInstruction.src/M000039.html +15 -0
  134. data/doc/classes/FloatLessThanQInstruction.src/M000040.html +16 -0
  135. data/doc/classes/FloatLessThanQInstruction.src/M000041.html +15 -0
  136. data/doc/classes/FloatLessThanQInstruction.src/M000042.html +15 -0
  137. data/doc/classes/FloatMaxInstruction.html +218 -0
  138. data/doc/classes/FloatMaxInstruction.src/M000095.html +15 -0
  139. data/doc/classes/FloatMaxInstruction.src/M000096.html +16 -0
  140. data/doc/classes/FloatMaxInstruction.src/M000097.html +15 -0
  141. data/doc/classes/FloatMaxInstruction.src/M000098.html +15 -0
  142. data/doc/classes/FloatMinInstruction.html +218 -0
  143. data/doc/classes/FloatMinInstruction.src/M000099.html +15 -0
  144. data/doc/classes/FloatMinInstruction.src/M000100.html +16 -0
  145. data/doc/classes/FloatMinInstruction.src/M000101.html +15 -0
  146. data/doc/classes/FloatMinInstruction.src/M000102.html +15 -0
  147. data/doc/classes/FloatMultiplyInstruction.html +218 -0
  148. data/doc/classes/FloatMultiplyInstruction.src/M000083.html +15 -0
  149. data/doc/classes/FloatMultiplyInstruction.src/M000084.html +16 -0
  150. data/doc/classes/FloatMultiplyInstruction.src/M000085.html +15 -0
  151. data/doc/classes/FloatMultiplyInstruction.src/M000086.html +15 -0
  152. data/doc/classes/FloatNegativeInstruction.html +218 -0
  153. data/doc/classes/FloatNegativeInstruction.src/M000103.html +15 -0
  154. data/doc/classes/FloatNegativeInstruction.src/M000104.html +15 -0
  155. data/doc/classes/FloatNegativeInstruction.src/M000105.html +15 -0
  156. data/doc/classes/FloatNegativeInstruction.src/M000106.html +15 -0
  157. data/doc/classes/FloatPowerInstruction.html +218 -0
  158. data/doc/classes/FloatPowerInstruction.src/M000111.html +15 -0
  159. data/doc/classes/FloatPowerInstruction.src/M000112.html +16 -0
  160. data/doc/classes/FloatPowerInstruction.src/M000113.html +20 -0
  161. data/doc/classes/FloatPowerInstruction.src/M000114.html +15 -0
  162. data/doc/classes/FloatRandomInstruction.html +218 -0
  163. data/doc/classes/FloatRandomInstruction.src/M000191.html +15 -0
  164. data/doc/classes/FloatRandomInstruction.src/M000192.html +14 -0
  165. data/doc/classes/FloatRandomInstruction.src/M000193.html +15 -0
  166. data/doc/classes/FloatRandomInstruction.src/M000194.html +15 -0
  167. data/doc/classes/FloatSineInstruction.html +218 -0
  168. data/doc/classes/FloatSineInstruction.src/M000119.html +15 -0
  169. data/doc/classes/FloatSineInstruction.src/M000120.html +15 -0
  170. data/doc/classes/FloatSineInstruction.src/M000121.html +15 -0
  171. data/doc/classes/FloatSineInstruction.src/M000122.html +15 -0
  172. data/doc/classes/FloatSqrtInstruction.html +218 -0
  173. data/doc/classes/FloatSqrtInstruction.src/M000115.html +15 -0
  174. data/doc/classes/FloatSqrtInstruction.src/M000116.html +15 -0
  175. data/doc/classes/FloatSqrtInstruction.src/M000117.html +19 -0
  176. data/doc/classes/FloatSqrtInstruction.src/M000118.html +15 -0
  177. data/doc/classes/FloatSubtractInstruction.html +218 -0
  178. data/doc/classes/FloatSubtractInstruction.src/M000087.html +15 -0
  179. data/doc/classes/FloatSubtractInstruction.src/M000088.html +16 -0
  180. data/doc/classes/FloatSubtractInstruction.src/M000089.html +15 -0
  181. data/doc/classes/FloatSubtractInstruction.src/M000090.html +15 -0
  182. data/doc/classes/FloatTangentInstruction.html +218 -0
  183. data/doc/classes/FloatTangentInstruction.src/M000127.html +15 -0
  184. data/doc/classes/FloatTangentInstruction.src/M000128.html +15 -0
  185. data/doc/classes/FloatTangentInstruction.src/M000129.html +15 -0
  186. data/doc/classes/FloatTangentInstruction.src/M000130.html +15 -0
  187. data/doc/classes/FloatType.html +196 -0
  188. data/doc/classes/FloatType.src/M000243.html +19 -0
  189. data/doc/classes/FloatType.src/M000244.html +15 -0
  190. data/doc/classes/FloatType.src/M000245.html +15 -0
  191. data/doc/classes/Helpers.html +161 -0
  192. data/doc/classes/Helpers.src/M000343.html +21 -0
  193. data/doc/classes/Helpers.src/M000344.html +24 -0
  194. data/doc/classes/Instruction/InstructionMethodError.html +110 -0
  195. data/doc/classes/Instruction/NaNResultError.html +110 -0
  196. data/doc/classes/Instruction/NotEnoughStackItems.html +110 -0
  197. data/doc/classes/Instruction.html +500 -0
  198. data/doc/classes/Instruction.src/M000131.html +17 -0
  199. data/doc/classes/Instruction.src/M000132.html +15 -0
  200. data/doc/classes/Instruction.src/M000133.html +15 -0
  201. data/doc/classes/Instruction.src/M000134.html +15 -0
  202. data/doc/classes/Instruction.src/M000135.html +15 -0
  203. data/doc/classes/Instruction.src/M000136.html +15 -0
  204. data/doc/classes/Instruction.src/M000137.html +15 -0
  205. data/doc/classes/Instruction.src/M000138.html +15 -0
  206. data/doc/classes/Instruction.src/M000139.html +22 -0
  207. data/doc/classes/Instruction.src/M000140.html +15 -0
  208. data/doc/classes/Instruction.src/M000141.html +25 -0
  209. data/doc/classes/Instruction.src/M000142.html +15 -0
  210. data/doc/classes/Instruction.src/M000143.html +15 -0
  211. data/doc/classes/Instruction.src/M000144.html +15 -0
  212. data/doc/classes/Instruction.src/M000145.html +15 -0
  213. data/doc/classes/Instruction.src/M000146.html +15 -0
  214. data/doc/classes/InstructionNode.html +161 -0
  215. data/doc/classes/InstructionNode.src/M000247.html +15 -0
  216. data/doc/classes/InstructionNode.src/M000248.html +16 -0
  217. data/doc/classes/IntAbsInstruction.html +218 -0
  218. data/doc/classes/IntAbsInstruction.src/M000175.html +15 -0
  219. data/doc/classes/IntAbsInstruction.src/M000176.html +15 -0
  220. data/doc/classes/IntAbsInstruction.src/M000177.html +15 -0
  221. data/doc/classes/IntAbsInstruction.src/M000178.html +15 -0
  222. data/doc/classes/IntAddInstruction.html +218 -0
  223. data/doc/classes/IntAddInstruction.src/M000147.html +15 -0
  224. data/doc/classes/IntAddInstruction.src/M000148.html +16 -0
  225. data/doc/classes/IntAddInstruction.src/M000149.html +15 -0
  226. data/doc/classes/IntAddInstruction.src/M000150.html +15 -0
  227. data/doc/classes/IntDepthInstruction.html +218 -0
  228. data/doc/classes/IntDepthInstruction.src/M000211.html +15 -0
  229. data/doc/classes/IntDepthInstruction.src/M000212.html +14 -0
  230. data/doc/classes/IntDepthInstruction.src/M000213.html +15 -0
  231. data/doc/classes/IntDepthInstruction.src/M000214.html +15 -0
  232. data/doc/classes/IntDivideInstruction.html +218 -0
  233. data/doc/classes/IntDivideInstruction.src/M000155.html +15 -0
  234. data/doc/classes/IntDivideInstruction.src/M000156.html +16 -0
  235. data/doc/classes/IntDivideInstruction.src/M000157.html +20 -0
  236. data/doc/classes/IntDivideInstruction.src/M000158.html +15 -0
  237. data/doc/classes/IntDuplicateInstruction.html +218 -0
  238. data/doc/classes/IntDuplicateInstruction.src/M000203.html +15 -0
  239. data/doc/classes/IntDuplicateInstruction.src/M000204.html +15 -0
  240. data/doc/classes/IntDuplicateInstruction.src/M000205.html +15 -0
  241. data/doc/classes/IntDuplicateInstruction.src/M000206.html +15 -0
  242. data/doc/classes/IntEqualQInstruction.html +218 -0
  243. data/doc/classes/IntEqualQInstruction.src/M000023.html +15 -0
  244. data/doc/classes/IntEqualQInstruction.src/M000024.html +16 -0
  245. data/doc/classes/IntEqualQInstruction.src/M000025.html +15 -0
  246. data/doc/classes/IntEqualQInstruction.src/M000026.html +15 -0
  247. data/doc/classes/IntFlushInstruction.html +218 -0
  248. data/doc/classes/IntFlushInstruction.src/M000215.html +15 -0
  249. data/doc/classes/IntFlushInstruction.src/M000216.html +14 -0
  250. data/doc/classes/IntFlushInstruction.src/M000217.html +14 -0
  251. data/doc/classes/IntFlushInstruction.src/M000218.html +15 -0
  252. data/doc/classes/IntFromBoolInstruction.html +218 -0
  253. data/doc/classes/IntFromBoolInstruction.src/M000051.html +15 -0
  254. data/doc/classes/IntFromBoolInstruction.src/M000052.html +15 -0
  255. data/doc/classes/IntFromBoolInstruction.src/M000053.html +15 -0
  256. data/doc/classes/IntFromBoolInstruction.src/M000054.html +15 -0
  257. data/doc/classes/IntFromFloatInstruction.html +218 -0
  258. data/doc/classes/IntFromFloatInstruction.src/M000059.html +15 -0
  259. data/doc/classes/IntFromFloatInstruction.src/M000060.html +15 -0
  260. data/doc/classes/IntFromFloatInstruction.src/M000061.html +15 -0
  261. data/doc/classes/IntFromFloatInstruction.src/M000062.html +15 -0
  262. data/doc/classes/IntGreaterThanQInstruction.html +218 -0
  263. data/doc/classes/IntGreaterThanQInstruction.src/M000031.html +15 -0
  264. data/doc/classes/IntGreaterThanQInstruction.src/M000032.html +16 -0
  265. data/doc/classes/IntGreaterThanQInstruction.src/M000033.html +15 -0
  266. data/doc/classes/IntGreaterThanQInstruction.src/M000034.html +15 -0
  267. data/doc/classes/IntIfInstruction.html +218 -0
  268. data/doc/classes/IntIfInstruction.src/M000043.html +16 -0
  269. data/doc/classes/IntIfInstruction.src/M000044.html +15 -0
  270. data/doc/classes/IntIfInstruction.src/M000045.html +14 -0
  271. data/doc/classes/IntIfInstruction.src/M000046.html +17 -0
  272. data/doc/classes/IntLessThanQInstruction.html +218 -0
  273. data/doc/classes/IntLessThanQInstruction.src/M000027.html +15 -0
  274. data/doc/classes/IntLessThanQInstruction.src/M000028.html +16 -0
  275. data/doc/classes/IntLessThanQInstruction.src/M000029.html +15 -0
  276. data/doc/classes/IntLessThanQInstruction.src/M000030.html +15 -0
  277. data/doc/classes/IntMaxInstruction.html +218 -0
  278. data/doc/classes/IntMaxInstruction.src/M000167.html +15 -0
  279. data/doc/classes/IntMaxInstruction.src/M000168.html +16 -0
  280. data/doc/classes/IntMaxInstruction.src/M000169.html +16 -0
  281. data/doc/classes/IntMaxInstruction.src/M000170.html +15 -0
  282. data/doc/classes/IntMinInstruction.html +218 -0
  283. data/doc/classes/IntMinInstruction.src/M000171.html +15 -0
  284. data/doc/classes/IntMinInstruction.src/M000172.html +16 -0
  285. data/doc/classes/IntMinInstruction.src/M000173.html +16 -0
  286. data/doc/classes/IntMinInstruction.src/M000174.html +15 -0
  287. data/doc/classes/IntModuloInstruction.html +218 -0
  288. data/doc/classes/IntModuloInstruction.src/M000163.html +15 -0
  289. data/doc/classes/IntModuloInstruction.src/M000164.html +16 -0
  290. data/doc/classes/IntModuloInstruction.src/M000165.html +20 -0
  291. data/doc/classes/IntModuloInstruction.src/M000166.html +15 -0
  292. data/doc/classes/IntMultiplyInstruction.html +218 -0
  293. data/doc/classes/IntMultiplyInstruction.src/M000151.html +15 -0
  294. data/doc/classes/IntMultiplyInstruction.src/M000152.html +16 -0
  295. data/doc/classes/IntMultiplyInstruction.src/M000153.html +15 -0
  296. data/doc/classes/IntMultiplyInstruction.src/M000154.html +15 -0
  297. data/doc/classes/IntNegativeInstruction.html +218 -0
  298. data/doc/classes/IntNegativeInstruction.src/M000179.html +15 -0
  299. data/doc/classes/IntNegativeInstruction.src/M000180.html +15 -0
  300. data/doc/classes/IntNegativeInstruction.src/M000181.html +15 -0
  301. data/doc/classes/IntNegativeInstruction.src/M000182.html +15 -0
  302. data/doc/classes/IntPopInstruction.html +218 -0
  303. data/doc/classes/IntPopInstruction.src/M000195.html +15 -0
  304. data/doc/classes/IntPopInstruction.src/M000196.html +15 -0
  305. data/doc/classes/IntPopInstruction.src/M000197.html +14 -0
  306. data/doc/classes/IntPopInstruction.src/M000198.html +14 -0
  307. data/doc/classes/IntRandomInstruction.html +218 -0
  308. data/doc/classes/IntRandomInstruction.src/M000183.html +15 -0
  309. data/doc/classes/IntRandomInstruction.src/M000184.html +14 -0
  310. data/doc/classes/IntRandomInstruction.src/M000185.html +15 -0
  311. data/doc/classes/IntRandomInstruction.src/M000186.html +15 -0
  312. data/doc/classes/IntRotateInstruction.html +218 -0
  313. data/doc/classes/IntRotateInstruction.src/M000207.html +15 -0
  314. data/doc/classes/IntRotateInstruction.src/M000208.html +17 -0
  315. data/doc/classes/IntRotateInstruction.src/M000209.html +14 -0
  316. data/doc/classes/IntRotateInstruction.src/M000210.html +17 -0
  317. data/doc/classes/IntSubtractInstruction.html +218 -0
  318. data/doc/classes/IntSubtractInstruction.src/M000159.html +15 -0
  319. data/doc/classes/IntSubtractInstruction.src/M000160.html +16 -0
  320. data/doc/classes/IntSubtractInstruction.src/M000161.html +16 -0
  321. data/doc/classes/IntSubtractInstruction.src/M000162.html +15 -0
  322. data/doc/classes/IntSwapInstruction.html +218 -0
  323. data/doc/classes/IntSwapInstruction.src/M000199.html +15 -0
  324. data/doc/classes/IntSwapInstruction.src/M000200.html +16 -0
  325. data/doc/classes/IntSwapInstruction.src/M000201.html +14 -0
  326. data/doc/classes/IntSwapInstruction.src/M000202.html +16 -0
  327. data/doc/classes/IntType.html +240 -0
  328. data/doc/classes/IntType.src/M000235.html +15 -0
  329. data/doc/classes/IntType.src/M000236.html +15 -0
  330. data/doc/classes/IntType.src/M000237.html +18 -0
  331. data/doc/classes/IntType.src/M000238.html +15 -0
  332. data/doc/classes/IntType.src/M000239.html +15 -0
  333. data/doc/classes/LiteralNode.html +183 -0
  334. data/doc/classes/LiteralNode.src/M000251.html +15 -0
  335. data/doc/classes/LiteralNode.src/M000252.html +16 -0
  336. data/doc/classes/LiteralNode.src/M000253.html +16 -0
  337. data/doc/classes/Nudge/Channel.html +437 -0
  338. data/doc/classes/Nudge/Channel.src/M000286.html +15 -0
  339. data/doc/classes/Nudge/Channel.src/M000287.html +19 -0
  340. data/doc/classes/Nudge/Channel.src/M000288.html +15 -0
  341. data/doc/classes/Nudge/Channel.src/M000289.html +15 -0
  342. data/doc/classes/Nudge/Channel.src/M000290.html +15 -0
  343. data/doc/classes/Nudge/Channel.src/M000291.html +19 -0
  344. data/doc/classes/Nudge/Channel.src/M000292.html +19 -0
  345. data/doc/classes/Nudge/Channel.src/M000293.html +17 -0
  346. data/doc/classes/Nudge/Channel.src/M000294.html +15 -0
  347. data/doc/classes/Nudge/Channel.src/M000295.html +20 -0
  348. data/doc/classes/Nudge/Channel.src/M000296.html +15 -0
  349. data/doc/classes/Nudge/Channel.src/M000297.html +17 -0
  350. data/doc/classes/Nudge/Channel.src/M000298.html +15 -0
  351. data/doc/classes/Nudge/CodeBlock.html +331 -0
  352. data/doc/classes/Nudge/CodeBlock.src/M000263.html +15 -0
  353. data/doc/classes/Nudge/CodeBlock.src/M000264.html +15 -0
  354. data/doc/classes/Nudge/CodeBlock.src/M000265.html +15 -0
  355. data/doc/classes/Nudge/CodeBlock.src/M000266.html +15 -0
  356. data/doc/classes/Nudge/CodeBlock.src/M000267.html +15 -0
  357. data/doc/classes/Nudge/CodeBlock.src/M000268.html +17 -0
  358. data/doc/classes/Nudge/CodeBlock.src/M000269.html +20 -0
  359. data/doc/classes/Nudge/CodeBlock.src/M000270.html +15 -0
  360. data/doc/classes/Nudge/CodeBlock.src/M000271.html +19 -0
  361. data/doc/classes/Nudge/DeadLocation.html +152 -0
  362. data/doc/classes/Nudge/DeadLocation.src/M000334.html +17 -0
  363. data/doc/classes/Nudge/Erc.html +335 -0
  364. data/doc/classes/Nudge/Erc.src/M000278.html +16 -0
  365. data/doc/classes/Nudge/Erc.src/M000279.html +15 -0
  366. data/doc/classes/Nudge/Erc.src/M000280.html +15 -0
  367. data/doc/classes/Nudge/Erc.src/M000281.html +15 -0
  368. data/doc/classes/Nudge/Erc.src/M000282.html +18 -0
  369. data/doc/classes/Nudge/Erc.src/M000283.html +15 -0
  370. data/doc/classes/Nudge/Erc.src/M000284.html +17 -0
  371. data/doc/classes/Nudge/Erc.src/M000285.html +15 -0
  372. data/doc/classes/Nudge/Individual.html +313 -0
  373. data/doc/classes/Nudge/Individual.src/M000314.html +21 -0
  374. data/doc/classes/Nudge/Individual.src/M000315.html +15 -0
  375. data/doc/classes/Nudge/Individual.src/M000316.html +15 -0
  376. data/doc/classes/Nudge/Individual.src/M000317.html +17 -0
  377. data/doc/classes/Nudge/Individual.src/M000318.html +25 -0
  378. data/doc/classes/Nudge/InstructionPoint/InstructionNotFoundError.html +110 -0
  379. data/doc/classes/Nudge/InstructionPoint.html +350 -0
  380. data/doc/classes/Nudge/InstructionPoint.src/M000299.html +15 -0
  381. data/doc/classes/Nudge/InstructionPoint.src/M000300.html +15 -0
  382. data/doc/classes/Nudge/InstructionPoint.src/M000301.html +17 -0
  383. data/doc/classes/Nudge/InstructionPoint.src/M000302.html +15 -0
  384. data/doc/classes/Nudge/InstructionPoint.src/M000303.html +17 -0
  385. data/doc/classes/Nudge/InstructionPoint.src/M000304.html +17 -0
  386. data/doc/classes/Nudge/InstructionPoint.src/M000305.html +17 -0
  387. data/doc/classes/Nudge/InstructionPoint.src/M000306.html +15 -0
  388. data/doc/classes/Nudge/Interpreter.html +369 -0
  389. data/doc/classes/Nudge/Interpreter.src/M000257.html +20 -0
  390. data/doc/classes/Nudge/Interpreter.src/M000258.html +19 -0
  391. data/doc/classes/Nudge/Interpreter.src/M000259.html +15 -0
  392. data/doc/classes/Nudge/Interpreter.src/M000260.html +19 -0
  393. data/doc/classes/Nudge/Interpreter.src/M000261.html +17 -0
  394. data/doc/classes/Nudge/LiteralPoint.html +291 -0
  395. data/doc/classes/Nudge/LiteralPoint.src/M000272.html +16 -0
  396. data/doc/classes/Nudge/LiteralPoint.src/M000273.html +15 -0
  397. data/doc/classes/Nudge/LiteralPoint.src/M000274.html +15 -0
  398. data/doc/classes/Nudge/LiteralPoint.src/M000275.html +18 -0
  399. data/doc/classes/Nudge/LiteralPoint.src/M000276.html +17 -0
  400. data/doc/classes/Nudge/LiteralPoint.src/M000277.html +15 -0
  401. data/doc/classes/Nudge/Location.html +525 -0
  402. data/doc/classes/Nudge/Location.src/M000319.html +19 -0
  403. data/doc/classes/Nudge/Location.src/M000320.html +15 -0
  404. data/doc/classes/Nudge/Location.src/M000321.html +26 -0
  405. data/doc/classes/Nudge/Location.src/M000322.html +15 -0
  406. data/doc/classes/Nudge/Location.src/M000323.html +20 -0
  407. data/doc/classes/Nudge/Location.src/M000324.html +16 -0
  408. data/doc/classes/Nudge/Location.src/M000325.html +25 -0
  409. data/doc/classes/Nudge/Location.src/M000326.html +15 -0
  410. data/doc/classes/Nudge/Location.src/M000327.html +21 -0
  411. data/doc/classes/Nudge/Location.src/M000328.html +16 -0
  412. data/doc/classes/Nudge/Location.src/M000329.html +15 -0
  413. data/doc/classes/Nudge/Location.src/M000330.html +16 -0
  414. data/doc/classes/Nudge/Location.src/M000331.html +20 -0
  415. data/doc/classes/Nudge/Location.src/M000332.html +17 -0
  416. data/doc/classes/Nudge/Location.src/M000333.html +17 -0
  417. data/doc/classes/Nudge/NondominatedSubset.html +196 -0
  418. data/doc/classes/Nudge/NondominatedSubset.src/M000005.html +19 -0
  419. data/doc/classes/Nudge/NondominatedSubset.src/M000006.html +19 -0
  420. data/doc/classes/Nudge/NondominatedSubset.src/M000007.html +25 -0
  421. data/doc/classes/Nudge/NondominatedSubset.src/M000339.html +19 -0
  422. data/doc/classes/Nudge/NondominatedSubset.src/M000340.html +19 -0
  423. data/doc/classes/Nudge/NondominatedSubset.src/M000341.html +25 -0
  424. data/doc/classes/Nudge/PopulationResample.html +175 -0
  425. data/doc/classes/Nudge/PopulationResample.src/M000003.html +22 -0
  426. data/doc/classes/Nudge/PopulationResample.src/M000337.html +22 -0
  427. data/doc/classes/Nudge/ProgramPoint.html +148 -0
  428. data/doc/classes/Nudge/ProgramPoint.src/M000262.html +15 -0
  429. data/doc/classes/Nudge/RandomGuess.html +176 -0
  430. data/doc/classes/Nudge/RandomGuess.src/M000002.html +21 -0
  431. data/doc/classes/Nudge/RandomGuess.src/M000336.html +21 -0
  432. data/doc/classes/Nudge/ResampleValues.html +169 -0
  433. data/doc/classes/Nudge/ResampleValues.src/M000004.html +36 -0
  434. data/doc/classes/Nudge/ResampleValues.src/M000338.html +36 -0
  435. data/doc/classes/Nudge/SearchOperator.html +175 -0
  436. data/doc/classes/Nudge/SearchOperator.src/M000001.html +15 -0
  437. data/doc/classes/Nudge/SearchOperator.src/M000335.html +15 -0
  438. data/doc/classes/Nudge/Stack.html +350 -0
  439. data/doc/classes/Nudge/Stack.src/M000307.html +15 -0
  440. data/doc/classes/Nudge/Stack.src/M000308.html +15 -0
  441. data/doc/classes/Nudge/Stack.src/M000309.html +18 -0
  442. data/doc/classes/Nudge/Stack.src/M000310.html +15 -0
  443. data/doc/classes/Nudge/Stack.src/M000311.html +15 -0
  444. data/doc/classes/Nudge/Stack.src/M000312.html +15 -0
  445. data/doc/classes/Nudge/Stack.src/M000313.html +15 -0
  446. data/doc/classes/Nudge/UniformBackboneCrossover.html +152 -0
  447. data/doc/classes/Nudge/UniformBackboneCrossover.src/M000008.html +35 -0
  448. data/doc/classes/Nudge/UniformBackboneCrossover.src/M000342.html +35 -0
  449. data/doc/classes/Nudge.html +174 -0
  450. data/doc/classes/NudgeType.html +363 -0
  451. data/doc/classes/NudgeType.src/M000225.html +17 -0
  452. data/doc/classes/NudgeType.src/M000226.html +15 -0
  453. data/doc/classes/NudgeType.src/M000227.html +15 -0
  454. data/doc/classes/NudgeType.src/M000228.html +15 -0
  455. data/doc/classes/NudgeType.src/M000229.html +15 -0
  456. data/doc/classes/NudgeType.src/M000230.html +15 -0
  457. data/doc/classes/NudgeType.src/M000231.html +15 -0
  458. data/doc/classes/NudgeType.src/M000232.html +15 -0
  459. data/doc/classes/NudgeType.src/M000233.html +15 -0
  460. data/doc/classes/NudgeType.src/M000234.html +15 -0
  461. data/doc/created.rid +1 -0
  462. data/doc/files/lib/instructions/bool_basics_rb.html +90 -0
  463. data/doc/files/lib/instructions/comparisons_rb.html +90 -0
  464. data/doc/files/lib/instructions/conditionals_rb.html +90 -0
  465. data/doc/files/lib/instructions/conversions_rb.html +90 -0
  466. data/doc/files/lib/instructions/exec_rb.html +90 -0
  467. data/doc/files/lib/instructions/float_arithmetic_rb.html +90 -0
  468. data/doc/files/lib/instructions/float_transcendental_rb.html +90 -0
  469. data/doc/files/lib/instructions/infrastructure_rb.html +100 -0
  470. data/doc/files/lib/instructions/int_arithmetic_rb.html +90 -0
  471. data/doc/files/lib/instructions/random_value_rb.html +90 -0
  472. data/doc/files/lib/instructions/stack_manipulation_rb.html +90 -0
  473. data/doc/files/lib/interpreter/grammars/nudge_language_helpers_rb.html +97 -0
  474. data/doc/files/lib/interpreter/grammars/nudge_language_treetop.html +180 -0
  475. data/doc/files/lib/interpreter/interpreter_rb.html +90 -0
  476. data/doc/files/lib/interpreter/programPoints_rb.html +90 -0
  477. data/doc/files/lib/interpreter/stack_rb.html +90 -0
  478. data/doc/files/lib/interpreter/types/codeType_rb.html +157 -0
  479. data/doc/files/lib/interpreter/types/codeType_rb.src/M000001.html +15 -0
  480. data/doc/files/lib/interpreter/types/codeType_rb.src/M000002.html +15 -0
  481. data/doc/files/lib/interpreter/types/pushTypes_rb.html +107 -0
  482. data/doc/files/lib/nudge_rb.html +152 -0
  483. data/doc/files/lib/search/evaluators/structural_complexity_rb.html +90 -0
  484. data/doc/files/lib/search/helpers_rb.html +90 -0
  485. data/doc/files/lib/search/individual/individual_rb.html +90 -0
  486. data/doc/files/lib/search/locations/location_rb.html +100 -0
  487. data/doc/files/lib/search/operators/basic_operators_rb.html +90 -0
  488. data/doc/fr_class_index.html +191 -0
  489. data/doc/fr_file_index.html +71 -0
  490. data/doc/fr_method_index.html +711 -0
  491. data/doc/index.html +21 -0
  492. data/doc/rdoc-style.css +299 -0
  493. data/features/parser_recognizes_nudge_language.feature +9 -0
  494. data/lib/instructions/bool_basics.rb +85 -0
  495. data/lib/instructions/code_basics.rb +14 -0
  496. data/lib/instructions/comparisons.rb +152 -0
  497. data/lib/instructions/conditionals.rb +44 -0
  498. data/lib/instructions/conversions.rb +94 -0
  499. data/lib/instructions/exec.rb +154 -0
  500. data/lib/instructions/float_arithmetic.rb +201 -0
  501. data/lib/instructions/float_transcendental.rb +47 -0
  502. data/lib/instructions/infrastructure.rb +84 -0
  503. data/lib/instructions/int_arithmetic.rb +160 -0
  504. data/lib/instructions/name_basics.rb +44 -0
  505. data/lib/instructions/name_bindings.rb +65 -0
  506. data/lib/instructions/random_value.rb +43 -0
  507. data/lib/instructions/stack_manipulation.rb +739 -0
  508. data/lib/interpreter/grammars/nudge_language.treetop +83 -0
  509. data/lib/interpreter/grammars/nudge_language_helpers.rb +64 -0
  510. data/lib/interpreter/interpreter.rb +176 -0
  511. data/lib/interpreter/programPoints.rb +236 -0
  512. data/lib/interpreter/stack.rb +39 -0
  513. data/lib/interpreter/types/codeType.rb +108 -0
  514. data/lib/interpreter/types/pushTypes.rb +102 -0
  515. data/lib/nudge.rb +38 -0
  516. data/lib/search/experiments/experiment.rb +53 -0
  517. data/lib/search/helpers.rb +22 -0
  518. data/lib/search/individual/batch.rb +25 -0
  519. data/lib/search/individual/individual.rb +147 -0
  520. data/lib/search/operators/basic_operators.rb +230 -0
  521. data/lib/search/operators/evaluators.rb +107 -0
  522. data/lib/search/operators/samplers_and_selectors.rb +123 -0
  523. data/lib/search/stations/station.rb +147 -0
  524. data/push_language_coverage.md +177 -0
  525. data/readme.md +19 -0
  526. data/spec/data/couchdb_spec.rb +2 -0
  527. data/spec/fixtures/just_block.example +1 -0
  528. data/spec/fixtures/just_block_with_newline.example +1 -0
  529. data/spec/fixtures/long_arithmetic.example +7 -0
  530. data/spec/fixtures/one_line_instr.example +1 -0
  531. data/spec/fixtures/untidy1.example +20 -0
  532. data/spec/fixtures/untidy1fixed.example +12 -0
  533. data/spec/instructions/bool_basics_spec.rb +97 -0
  534. data/spec/instructions/bool_stack_spec.rb +391 -0
  535. data/spec/instructions/code_basics_spec.rb +43 -0
  536. data/spec/instructions/code_stack_spec.rb +382 -0
  537. data/spec/instructions/comparisons_spec.rb +486 -0
  538. data/spec/instructions/conditionals_spec.rb +162 -0
  539. data/spec/instructions/conversions_spec.rb +92 -0
  540. data/spec/instructions/exec_spec.rb +883 -0
  541. data/spec/instructions/float_calculations_spec.rb +148 -0
  542. data/spec/instructions/float_stack_spec.rb +382 -0
  543. data/spec/instructions/float_transcendental_spec.rb +89 -0
  544. data/spec/instructions/instruction_class_spec.rb +9 -0
  545. data/spec/instructions/int_calculations_spec.rb +125 -0
  546. data/spec/instructions/int_stack_spec.rb +398 -0
  547. data/spec/instructions/name_basics_spec.rb +158 -0
  548. data/spec/instructions/name_bindings_spec.rb +257 -0
  549. data/spec/instructions/name_stack_spec.rb +382 -0
  550. data/spec/instructions/random_values_spec.rb +68 -0
  551. data/spec/integration/search_integration.rb +67 -0
  552. data/spec/interpreter/channel_spec.rb +92 -0
  553. data/spec/interpreter/codeblock_spec.rb +135 -0
  554. data/spec/interpreter/codetype_spec.rb +257 -0
  555. data/spec/interpreter/erc_spec.rb +130 -0
  556. data/spec/interpreter/instruction_spec.rb +97 -0
  557. data/spec/interpreter/interpreter_spec.rb +266 -0
  558. data/spec/interpreter/literal_spec.rb +94 -0
  559. data/spec/interpreter/parser_spec.rb +324 -0
  560. data/spec/interpreter/stack_spec.rb +81 -0
  561. data/spec/interpreter/types_spec.rb +102 -0
  562. data/spec/search/batch_spec.rb +30 -0
  563. data/spec/search/experiments/experiment_spec.rb +101 -0
  564. data/spec/search/helpers_spec.rb +59 -0
  565. data/spec/search/individual_spec.rb +356 -0
  566. data/spec/search/operators/any_one_sampler_spec.rb +40 -0
  567. data/spec/search/operators/dominated_quantile_spec.rb +111 -0
  568. data/spec/search/operators/duplicate_genomes_spec.rb +35 -0
  569. data/spec/search/operators/evaluators/program_point_evaluator_spec.rb +43 -0
  570. data/spec/search/operators/evaluators/test_case_evaluator_spec.rb +133 -0
  571. data/spec/search/operators/infrastructure_spec.rb +47 -0
  572. data/spec/search/operators/most_dominated_subset_spec.rb +47 -0
  573. data/spec/search/operators/nondominated_subset_spec.rb +97 -0
  574. data/spec/search/operators/pointCrossover_spec.rb +55 -0
  575. data/spec/search/operators/pointDeletion_spec.rb +57 -0
  576. data/spec/search/operators/pointMutation_spec.rb +71 -0
  577. data/spec/search/operators/random_guess_spec.rb +51 -0
  578. data/spec/search/operators/resample_and_clone_spec.rb +50 -0
  579. data/spec/search/operators/resample_values_spec.rb +126 -0
  580. data/spec/search/operators/sizePreservingMutation_spec.rb +2 -0
  581. data/spec/search/operators/uniformBackboneCrossover_spec.rb +63 -0
  582. data/spec/search/stations/station_spec.rb +496 -0
  583. data/spec/spec_helper.rb +11 -0
  584. metadata +738 -0
@@ -0,0 +1,102 @@
1
+ # coding: utf-8
2
+
3
+ class NudgeType
4
+ require 'singleton'
5
+ include Singleton
6
+
7
+ @@all_types = []
8
+
9
+ def self.inherited(subclass)
10
+ @@all_types << subclass
11
+ super
12
+ end
13
+
14
+ def self.all_types
15
+ @@all_types
16
+ end
17
+
18
+ def self.push_types
19
+ [IntType, BoolType, FloatType]
20
+ end
21
+
22
+ def self.to_nudgecode
23
+ self.to_s.slice(0..-5).downcase
24
+ end
25
+
26
+ def self.from_s
27
+ raise "Your subclass of NudgeType should provide a method for parsing string values in code"
28
+ end
29
+ end
30
+
31
+
32
+
33
+
34
+ class IntType < NudgeType
35
+ @defaultLowest = -100
36
+ @defaultHighest = 100
37
+
38
+ def self.defaultLowest
39
+ @defaultLowest
40
+ end
41
+
42
+ def self.defaultHighest
43
+ @defaultHighest
44
+ end
45
+
46
+ def self.random_value(params={})
47
+ bottom = params[:randomIntegerLowerBound] || @defaultLowest
48
+ top = params[:randomIntegerUpperBound] || @defaultHighest
49
+ lowest, highest = [bottom,top].min, [bottom,top].max
50
+ rand(highest-lowest).to_i + lowest
51
+ end
52
+
53
+ def self.from_s(string_value)
54
+ return string_value.to_i
55
+ end
56
+
57
+ def self.any_value
58
+ self.random_value
59
+ end
60
+ end
61
+
62
+
63
+
64
+
65
+ class BoolType < NudgeType
66
+ def self.random_value(params = {})
67
+ p = params[:randomBooleanTruthProb] || 0.5
68
+ rand() < p
69
+ end
70
+
71
+ def self.from_s(string_value)
72
+ return string_value.downcase == "true"
73
+ end
74
+
75
+ def self.any_value
76
+ self.random_value
77
+ end
78
+ end
79
+
80
+
81
+
82
+
83
+ class FloatType < NudgeType
84
+ @defaultLowest = -1000.0
85
+ @defaultHighest = 1000.0
86
+
87
+ def self.random_value(params = {})
88
+ bottom = params[:randomFloatLowerBound] || @defaultLowest
89
+ top = params[:randomFloatUpperBound] || @defaultHighest
90
+ bottom, top = [bottom,top].min, [bottom,top].max
91
+ range = top - bottom
92
+ (rand*range) + bottom
93
+ end
94
+
95
+ def self.from_s(string_value)
96
+ return string_value.to_f
97
+ end
98
+
99
+ def self.any_value
100
+ self.random_value
101
+ end
102
+ end
data/lib/nudge.rb ADDED
@@ -0,0 +1,38 @@
1
+ $: << File.join(File.dirname(__FILE__), "/../lib")
2
+
3
+ require 'rubygems'
4
+ require 'treetop'
5
+ require 'polyglot'
6
+ require 'active_support'
7
+ require 'interpreter/grammars/nudge_language_helpers'
8
+ require 'interpreter/grammars/nudge_language'
9
+ require 'interpreter/interpreter'
10
+ require 'interpreter/types/pushTypes'
11
+ require 'interpreter/types/codeType'
12
+ require 'interpreter/stack'
13
+ require 'interpreter/programPoints'
14
+ require 'search/helpers'
15
+
16
+ require 'instructions/infrastructure'
17
+ require 'instructions/stack_manipulation'
18
+ require 'instructions/int_arithmetic'
19
+ require 'instructions/float_arithmetic'
20
+ require 'instructions/float_transcendental'
21
+ require 'instructions/bool_basics'
22
+ require 'instructions/comparisons'
23
+ require 'instructions/conditionals'
24
+ require 'instructions/conversions'
25
+ require 'instructions/random_value'
26
+ require 'instructions/exec'
27
+ require 'instructions/name_bindings'
28
+ require 'instructions/name_basics'
29
+ require 'instructions/code_basics'
30
+
31
+
32
+ require 'search/individual/individual'
33
+ require 'search/individual/batch'
34
+ require 'search/operators/basic_operators'
35
+ require 'search/operators/samplers_and_selectors'
36
+ require 'search/operators/evaluators'
37
+ require 'search/stations/station'
38
+ require 'search/experiments/experiment'
@@ -0,0 +1,53 @@
1
+ module Nudge
2
+ require 'open-uri'
3
+
4
+ class Experiment
5
+ attr_reader :name
6
+ attr_accessor :config
7
+ attr_accessor :couch_url
8
+ attr_accessor :instructions, :types, :variable_names
9
+ attr_accessor :station_names, :objectives
10
+
11
+ def initialize(options = {})
12
+ @name = options[:name] || 'default_experiment'
13
+ @config = Nudge::Config.new
14
+ @instructions = Instruction.all_instructions
15
+ @types = [BoolType, FloatType, IntType]
16
+ @variable_names = []
17
+
18
+ # paths
19
+ @couch_url = options[:couch_url] || 'http://localhost:5984'
20
+
21
+ # infrastructure
22
+ @station_names = []
23
+ @objectives = {}
24
+
25
+ Nudge::Config.stored_state.call(self) unless !Config.stored_state
26
+ end
27
+
28
+ def build_station(name, params = {})
29
+ new_s = Station.new(name, params)
30
+ self.station_names << new_s.name
31
+ end
32
+
33
+ def station_known?(name)
34
+ return @station_names.include?(name)
35
+ end
36
+
37
+ def couch_live?
38
+ begin
39
+ ack = (open(@couch_url) {|db| db.status[0]} == "200")
40
+ rescue SocketError # there may be more exceptions to catch!
41
+ ack = false
42
+ end
43
+ return ack
44
+ end
45
+
46
+ def connect_stations(flow_from, flow_to)
47
+ raise ArgumentError, "Unknown station: #{flow_from}" if !station_known?(flow_from)
48
+ raise ArgumentError, "Unknown station: #{flow_from}" if !station_known?(flow_to)
49
+ Station.stations[flow_from].flows_into Station.stations[flow_to]
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,22 @@
1
+ module Nudge
2
+ class InterpreterSettings
3
+ attr_accessor :instructions, :references, :types
4
+
5
+ def initialize(params = {})
6
+ @instructions = params[:instructions] || Instruction.all_instructions
7
+ @references = params[:references] || []
8
+ @types = params[:types] || NudgeType.push_types
9
+ end
10
+ end
11
+
12
+
13
+ class Config
14
+ def self.stored_state
15
+ @stored_state
16
+ end
17
+
18
+ def self.setup(&block)
19
+ @stored_state = block
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ module Nudge
2
+ # A Batch is simply an Array of Individuals, with validation for all assignment methods
3
+ class Batch < Array
4
+
5
+ def self.[](*args)
6
+ raise ArgumentError unless args.inject(true) {|anded, a| anded & a.kind_of?(Individual)}
7
+ super
8
+ end
9
+
10
+ def []=(index, obj)
11
+ raise ArgumentError unless obj.kind_of?(Individual)
12
+ super
13
+ end
14
+
15
+ def <<(obj)
16
+ raise ArgumentError unless obj.kind_of?(Individual)
17
+ super
18
+ end
19
+
20
+ def initialize(*args)
21
+ raise ArgumentError unless args.inject(true) {|anded, a| anded & a.kind_of?(Individual)}
22
+ super
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,147 @@
1
+ require 'couchrest'
2
+
3
+ module Nudge
4
+
5
+ class Individual
6
+ def self.helperParser
7
+ @helperParser ||= NudgeLanguageParser.new()
8
+ end
9
+
10
+ def self.get(db_url, individual_id)
11
+ # connect
12
+ db = CouchRest.database!(db_url)
13
+
14
+ # search
15
+ couchDoc = db.get(individual_id.to_s)
16
+ puts couchDoc
17
+
18
+ # create new guy
19
+ newDude = self.new(couchDoc["genome"])
20
+ newDude.instance_variable_set('@id',couchDoc["_id"])
21
+ newDude.timestamp = couchDoc["creation_time"]
22
+ newDude.scores = couchDoc["scores"]
23
+
24
+ return newDude
25
+ end
26
+
27
+ attr_accessor :genome, :scores, :progress, :ancestors, :station, :program, :timestamp
28
+ attr_reader :id
29
+
30
+ def initialize(listing)
31
+ @helperParser =
32
+
33
+ @genome = listing
34
+ raise(ArgumentError, "Nudge program cannot be parsed") if Individual.helperParser.parse(genome) == nil
35
+ @program = Individual.helperParser.parse(genome).to_points
36
+ @scores = Hash.new
37
+ @timestamp = Time.now.to_i
38
+ @progress = 0
39
+ @ancestors = []
40
+ @station = ""
41
+ end
42
+
43
+ def known_scores
44
+ return self.scores.keys.sort
45
+ end
46
+
47
+ def points
48
+ return self.program.points
49
+ end
50
+
51
+ def score_vector(template = self.known_scores)
52
+ vector = []
53
+ template.each {|obj| vector << self.scores[obj]}
54
+ return vector
55
+ end
56
+
57
+
58
+ def dominated_by?(other, template = self.known_scores)
59
+ noWorse = true
60
+ somewhatBetter = false
61
+ template.each do |score|
62
+ if self.scores[score] && other.scores[score]
63
+ noWorse &&= (self.scores[score] >= other.scores[score])
64
+ somewhatBetter ||= (self.scores[score] > other.scores[score])
65
+ else
66
+ return false
67
+ end
68
+ end
69
+ return noWorse && somewhatBetter
70
+ end
71
+
72
+
73
+ def delete_point(which)
74
+ return self.program.listing if (which < 1 || which > self.program.points)
75
+ return "block {}" if which == 1
76
+ chunks = isolate_point(which)
77
+ variant = chunks[:left] + chunks[:right]
78
+ return variant
79
+ end
80
+
81
+
82
+ def replace_point(which, newCode = "")
83
+ raise(ArgumentError, "program points can only be replaced by nonempty strings") if newCode == ""
84
+ return self.program.listing if (which < 1 || which > self.program.points)
85
+ chunks = isolate_point(which)
86
+ variant = (chunks[:left] || "") + " #{newCode} " + (chunks[:right] || "")
87
+ return variant
88
+ end
89
+
90
+
91
+ def isolate_point(which)
92
+ raise(ArgumentError, "point specified is out of range in this genome") if
93
+ (which < 1 || which > self.program.points)
94
+ result = {}
95
+
96
+ # we're going to work in an array so we can do abacus-like manipulations
97
+ workingCopy = self.program.listing.split("\n")
98
+ posn = which - 1
99
+
100
+ # look at the point itself now
101
+ # if it's a block, pull in more points from 'the right' until the braces balance here
102
+ if workingCopy[posn].include?("block")
103
+ leftCount = workingCopy[posn].count("{")
104
+ rightCount = workingCopy[posn].count("}")
105
+ while leftCount > rightCount do
106
+ workingCopy[posn] += (workingCopy[posn+1])
107
+ workingCopy.delete_at(posn+1)
108
+ leftCount = workingCopy[posn].count("{")
109
+ rightCount = workingCopy[posn].count("}")
110
+ end
111
+ end
112
+
113
+ # whether the point is a block or not, we want to avoid taking extra closing braces
114
+ # so we will peel off extra right braces into new elements in our workingCopy array
115
+ leftCount = workingCopy[posn].count("{")
116
+ rightCount = workingCopy[posn].count("}")
117
+ while leftCount < rightCount do
118
+ workingCopy[posn] = workingCopy[posn].strip
119
+ workingCopy = workingCopy.insert(posn+1,"}")
120
+ workingCopy[posn] = workingCopy[posn].chomp("}")
121
+ leftCount = workingCopy[posn].count("{")
122
+ rightCount = workingCopy[posn].count("}")
123
+ end
124
+
125
+ # we'll return an array of three strings
126
+ # everything in the genome to the left of the point
127
+ # the isolated point itself
128
+ # everything to the right of the point from the genome
129
+ # noting that if which==1, we will have empty left & right, and return the entire codeblock
130
+ result[:middle] = workingCopy[posn]
131
+ if which > 1
132
+ result[:left] = workingCopy[0..posn-1].join
133
+ result[:right] = workingCopy[posn+1..-1].join
134
+ end
135
+ return result
136
+ end
137
+
138
+ def write
139
+ where = CouchRest.database!(@station.database)
140
+ response = where.save_doc({
141
+ "genome" => @genome,
142
+ "scores" => @scores,
143
+ "creation_time" => @timestamp})
144
+ @id = response["id"]
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,230 @@
1
+ module Nudge
2
+
3
+ # Abstract class that from which specific SearchOperator subclasses inherit initialization
4
+
5
+ class SearchOperator
6
+ attr_accessor :params
7
+
8
+ def initialize(params={})
9
+ @params = params
10
+ end
11
+ end
12
+
13
+
14
+
15
+ class RandomGuessOperator < SearchOperator
16
+ attr_accessor :context
17
+
18
+ def initialize(params ={})
19
+ @context = InterpreterSettings.new(:instructions => params[:instructions],
20
+ :references => params[:references], :types => params[:types])
21
+ super
22
+ end
23
+
24
+ # returns an Array of random Individuals
25
+ #
26
+ # the first (optional) parameter specifies how many to make, and defaults to 1
27
+ # the second (also optional) parameter is a hash or set of hash bindings that
28
+ # temporarily override those set in the initialization
29
+ #
30
+ # For example, if
31
+ # <tt>myRandomGuesser = RandomGuessOperator.new(:randomIntegerLowerBound => -90000)</tt>
32
+ #
33
+ # [<tt>myRandomGuesser.generate()</tt>]
34
+ # produces a list of 1 Individual, and if it has any IntType samples they will be in [-90000,100]
35
+ # (since the default +:randomIntegerLowerBound+ is 100)
36
+ # [<tt>myRandomGuesser.generate(1,:randomIntegerLowerBound => 0)</tt>]
37
+ # makes one Individual whose IntType samples (if any) will be between [0,100]
38
+
39
+ def generate(howMany = 1, tempParams ={})
40
+ result = Batch.new
41
+ howMany.times do
42
+ newGenome = CodeType.random_value(@context, @params.merge(tempParams))
43
+ newDude = Individual.new(newGenome)
44
+ newDude.progress = 0
45
+ result << newDude
46
+ end
47
+ result
48
+ end
49
+ end
50
+
51
+
52
+ class ResampleAndCloneOperator < SearchOperator
53
+ # returns an Array of clones of Individuals randomly selected from the crowd passed in
54
+ #
55
+ # the first (required) parameter is an Array of Individuals
56
+ # the second (optional) parameter is how many samples to take, and defaults to 1
57
+ #
58
+ # For example, if
59
+ # <tt>@currentPopulation = [a list of 300 Individuals]</tt> and
60
+ # <tt>myRandomSampler = ResampleAndCloneOperator.new(@currentPopulation)</tt>
61
+ # [<tt>myRandomSampler.generate()</tt>]
62
+ # produces a list of 1 Individual, which is a clone of somebody from <tt>@currentPopulation</tt>
63
+ # [<tt>myRandomGuesser.generate(11)</tt>]
64
+ # returns a list of 11 Individuals cloned from <tt>@currentPopulation</tt>,
65
+ # possibly including repeats
66
+
67
+ def generate(crowd, howMany = 1)
68
+ result = Batch.new
69
+ howMany.times do
70
+ donor = crowd.sample
71
+ newGenome = donor.genome.clone
72
+ newDude = Individual.new(newGenome)
73
+ newDude.progress = donor.progress + 1
74
+ result << newDude
75
+ end
76
+ return result
77
+ end
78
+ end
79
+
80
+
81
+ class ResampleValuesOperator < SearchOperator
82
+
83
+ # returns an Array of clones of Individuals randomly selected from the crowd passed in
84
+ # the first (required) parameter is an Array of Individuals
85
+ # the second (optional) parameter is how many samples to take, and defaults to 1
86
+ #
87
+ # For example, if
88
+ # @currentPopulation = [a list of 300 Individuals]
89
+ # myRandomSampler = ResampleAndCloneOperator.new(@currentPopulation)
90
+ # myRandomSampler.generate()::
91
+ # produces a list of 1 Individual, which is a clone of somebody from @currentPopulation
92
+ # myRandomGuesser.generate(11)::
93
+ # returns a list of 11 Individuals cloned from @currentPopulation, possibly including repeats
94
+
95
+ def generate(crowd, howManyCopies = 1, parameter_overrides = {})
96
+ crowd.each {|dude| raise(ArgumentError) if !dude.kind_of?(Individual) }
97
+
98
+ result = Batch.new
99
+ tempParams = @params.merge(parameter_overrides)
100
+ crowd.each do |dude|
101
+ wildtype = dude.program.listing
102
+ howManyCopies.times do
103
+ novelty = ""
104
+ wildtype.each_line do |line|
105
+ line = line.sub(/\((.*)\)/,
106
+ "(#{IntType.random_value(tempParams)})") if line.include?("sample int")
107
+ line = line.sub(/\((.*)\)/,
108
+ "(#{BoolType.random_value(tempParams)})") if line.include?("sample bool")
109
+ line = line.sub(/\((.*)\)/,
110
+ "(#{FloatType.random_value(tempParams)})") if line.include?("sample float")
111
+ novelty << line
112
+ end
113
+ mutant = Individual.new(novelty)
114
+ mutant.progress = dude.progress + 1
115
+ result << mutant
116
+ end
117
+ end
118
+ result
119
+ end
120
+ end
121
+
122
+
123
+
124
+
125
+ class UniformBackboneCrossoverOperator < SearchOperator
126
+ def generate(crowd, howMany = crowd.length, prob = 0.5)
127
+ result = Batch.new
128
+ howMany.times do
129
+ where = rand(crowd.length)
130
+ mom = crowd[where]
131
+ dad = crowd[ (where+1) % crowd.length ]
132
+ xover = "block {\n"
133
+ (0..mom.program.contents.length-1).each do |point|
134
+ if rand() < prob
135
+ xover << mom.program.contents[point].tidy + "\n"
136
+ else
137
+ begin
138
+ xover << dad.program.contents[point].tidy + "\n"
139
+ rescue
140
+ xover << mom.program.contents[point].tidy + "\n"
141
+ end
142
+ end
143
+ end
144
+ xover << "}"
145
+ baby = Individual.new(xover)
146
+ baby.progress = [mom.progress,dad.progress].max + 1
147
+
148
+ result << baby
149
+ end
150
+ return result
151
+ end
152
+ end
153
+
154
+
155
+
156
+ class PointCrossoverOperator < SearchOperator
157
+ def generate(crowd, howManyBabies = 1)
158
+ raise(ArgumentError) if !crowd.kind_of?(Array)
159
+ raise(ArgumentError) if crowd.empty?
160
+ crowd.each {|dude| raise(ArgumentError) if !dude.kind_of?(Individual) }
161
+
162
+ result = Batch.new
163
+ production = crowd.length*howManyBabies
164
+ production.times do
165
+ mom = crowd.sample
166
+ dad = crowd.sample
167
+ momSplit = mom.isolate_point(rand(mom.points)+1)
168
+ dadSplit = dad.isolate_point(rand(dad.points)+1)
169
+ babyGenome = (momSplit[:left] || "") + " #{dadSplit[:middle]} " + (momSplit[:right] || "")
170
+ baby = Individual.new(babyGenome)
171
+ baby.progress = [mom.progress,dad.progress].max + 1
172
+ result << baby
173
+ end
174
+ return result
175
+ end
176
+ end
177
+
178
+
179
+
180
+
181
+ class PointDeleteOperator < SearchOperator
182
+ def generate(crowd, howManyCopies = 1)
183
+ raise(ArgumentError) if !crowd.kind_of?(Array)
184
+ crowd.each {|dude| raise(ArgumentError) if !dude.kind_of?(Individual) }
185
+
186
+ result = Batch.new
187
+ crowd.each do |dude|
188
+ howManyCopies.times do
189
+ where = rand(dude.points)+1
190
+ variant = dude.delete_point(where)
191
+ baby = Individual.new(variant)
192
+ baby.progress = dude.progress + 1
193
+ result << baby
194
+ end
195
+ end
196
+ return result
197
+ end
198
+ end
199
+
200
+
201
+
202
+ class PointMutationOperator < SearchOperator
203
+ attr_accessor :context
204
+
205
+ def initialize(params ={})
206
+ @context = InterpreterSettings.new(:instructions => params[:instructions],
207
+ :references => params[:references], :types => params[:types])
208
+ super
209
+ end
210
+
211
+ def generate(crowd, howManyCopies = 1, tempParams ={})
212
+ raise(ArgumentError) if !crowd.kind_of?(Array)
213
+ raise(ArgumentError) if crowd.empty?
214
+ crowd.each {|dude| raise(ArgumentError) if !dude.kind_of?(Individual) }
215
+
216
+ result = Batch.new
217
+ crowd.each do |dude|
218
+ howManyCopies.times do
219
+ where = rand(dude.points)+1
220
+ newCode = CodeType.random_value(@context, @params.merge(tempParams))
221
+ variant = dude.replace_point(where,newCode)
222
+ baby = Individual.new(variant)
223
+ baby.progress = dude.progress + 1
224
+ result << baby
225
+ end
226
+ end
227
+ return result
228
+ end
229
+ end
230
+ end