nudge 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,107 @@
1
+ module Nudge
2
+
3
+ class Evaluator < SearchOperator
4
+ attr_accessor :name
5
+
6
+ def initialize(params = {})
7
+ raise(ArgumentError, "Evaluators must be initialized with names") if params[:name] == nil
8
+ @name = params[:name]
9
+ end
10
+ end
11
+
12
+
13
+
14
+
15
+
16
+ class ProgramPointEvaluator < Evaluator
17
+ def evaluate(batch)
18
+ raise(ArgumentError, "Can only evaluate a Batch of Individuals") if !batch.kind_of?(Batch)
19
+ batch.each {|i| i.scores[@name] = i.points}
20
+ end
21
+ end
22
+
23
+
24
+
25
+
26
+
27
+ class TestCase
28
+ attr_accessor :bindings, :expectations, :gauges
29
+
30
+ def initialize(args = {})
31
+ @bindings = args[:bindings] || Hash.new
32
+ @expectations = args[:expectations] || Hash.new
33
+ @gauges = args[:gauges] || Hash.new
34
+
35
+ if (@expectations.keys - @gauges.keys).length > 0
36
+ raise ArgumentError, "One or more expectations have no defined gauge"
37
+ end
38
+ end
39
+ end
40
+
41
+
42
+
43
+
44
+
45
+ class TestCaseEvaluator < Evaluator
46
+ attr_accessor :interpreter_settings
47
+
48
+ def evaluate(batch, cases = [], params = {})
49
+ raise(ArgumentError, "Can only evaluate a Batch of Individuals") if !batch.kind_of?(Batch)
50
+
51
+ instructions = params[:instructions] || Instruction.all_instructions
52
+ types = params[:types] || [IntType, BoolType, FloatType]
53
+ variable_names = params[:references] || []
54
+
55
+ batch.each do |dude|
56
+ if !params[:deterministic] || !dude.scores[@name]
57
+ score = 0
58
+ readings = {}
59
+ cases.each do |example|
60
+ difference = 0
61
+
62
+ # make an Interpreter
63
+ workspace = Interpreter.new(
64
+ :instructions => instructions,
65
+ :types => types,
66
+ :references => variable_names)
67
+
68
+ # set up the program
69
+ workspace.reset(dude.genome)
70
+
71
+ # set up the bindings
72
+ example.bindings.each do |key,value|
73
+ workspace.bind_variable(key, value)
74
+ end
75
+
76
+ # run it
77
+ workspace.run
78
+
79
+ # apply the gauge(s) for each expectation
80
+ example.gauges.each do |variable_name,the_gauge|
81
+ readings[variable_name] = the_gauge.call(workspace)
82
+ end
83
+
84
+ # synthesize readings into a single scalar difference
85
+ # FIXME this should be a settable Proc
86
+ example.gauges.each do |variable_name,the_gauge|
87
+ begin
88
+ difference = (readings[variable_name].value - example.expectations[variable_name])
89
+ rescue
90
+ difference = 100000
91
+ end
92
+ end
93
+
94
+ score += difference.abs
95
+ end
96
+ # aggregate differences
97
+ dude.scores[@name] = score.to_f / cases.length
98
+
99
+ puts "#{score.to_f / cases.length}" if params[:feedback]
100
+ else
101
+ puts dude.scores[@name] if params[:feedback]
102
+ end
103
+ end
104
+ end
105
+
106
+ end
107
+ end
@@ -0,0 +1,123 @@
1
+ module Nudge
2
+
3
+ class Sampler < SearchOperator
4
+ def initialize (params = {})
5
+ super
6
+ end
7
+
8
+ def all_known_scores(crowd)
9
+ union = []
10
+ crowd.each do |dude|
11
+ union |= dude.known_scores
12
+ end
13
+ return union
14
+ end
15
+
16
+
17
+ def all_shared_scores(crowd)
18
+ intersection = self.all_known_scores(crowd)
19
+ crowd.each do |dude|
20
+ intersection = intersection & dude.known_scores
21
+ end
22
+ return intersection
23
+ end
24
+
25
+
26
+ def domination_classes(crowd, template = all_shared_scores(crowd))
27
+ result = Hash.new()
28
+ crowd.each_index do |i|
29
+ dominatedBy = 0
30
+ crowd.each_index do |j|
31
+ dominatedBy += 1 if crowd[i].dominated_by?(crowd[j], template)
32
+ end
33
+ result[dominatedBy] ||= []
34
+ result[dominatedBy].push crowd[i]
35
+ end
36
+ return result
37
+ end
38
+
39
+
40
+ def diversity_classes(crowd)
41
+ result = Hash.new()
42
+ crowd.each do |dude|
43
+ result[dude.program.tidy] ||= []
44
+ result[dude.program.tidy] << dude
45
+ end
46
+ return result
47
+ end
48
+ end
49
+
50
+
51
+ class NondominatedSubsetSelector < Sampler
52
+
53
+ def generate(crowd, template = all_shared_scores(crowd))
54
+ result = Batch.new
55
+ crowd.each do |dude|
56
+ dominated = false
57
+ crowd.each do |otherDude|
58
+ dominated ||= dude.dominated_by?(otherDude, template)
59
+ end
60
+ if !dominated
61
+ result << dude
62
+ end
63
+ end
64
+ return result
65
+ end
66
+ end
67
+
68
+
69
+ class DominatedQuantileSampler < Sampler
70
+ def generate(crowd, proportion = 0.5, template = all_shared_scores(crowd))
71
+ classified = domination_classes(crowd, template)
72
+ increasing_grades = classified.keys.sort {|a,b| b <=> a}
73
+ partial_ordering = []
74
+ increasing_grades.each {|grade| partial_ordering += classified[grade]}
75
+ how_many = crowd.length * proportion
76
+
77
+ result = Batch.new
78
+ partial_ordering[0..how_many-1].each {|dude| result << dude} unless how_many == 0
79
+ return result
80
+ end
81
+ end
82
+
83
+
84
+
85
+
86
+
87
+ class MostDominatedSubsetSampler < Sampler
88
+ def generate(crowd, template = all_shared_scores(crowd))
89
+ result = Batch.new
90
+ classified = domination_classes(crowd, template)
91
+ worst_key = classified.keys.sort[-1]
92
+ classified[worst_key].each {|bad_dude| result.push bad_dude}
93
+ return result
94
+ end
95
+ end
96
+
97
+
98
+
99
+
100
+
101
+ class AnyOneSampler < Sampler
102
+ def generate(crowd)
103
+ result = Batch[crowd.sample]
104
+ end
105
+ end
106
+
107
+
108
+
109
+
110
+
111
+ class AllDuplicatedGenomesSampler < Sampler
112
+ def generate(crowd)
113
+ result = Batch.new
114
+ clustered = diversity_classes(crowd)
115
+ clustered.each do |genome, array|
116
+ if array.length > 1
117
+ result.concat array
118
+ end
119
+ end
120
+ return result
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,147 @@
1
+ module Nudge
2
+ class Station
3
+ require 'set'
4
+
5
+ def self.stations
6
+ @stations ||= self.cleanup
7
+ end
8
+
9
+ def self.cleanup
10
+ @stations = Hash[:DEAD,DeadStation.new]
11
+ end
12
+
13
+
14
+ attr_reader :name
15
+ attr_accessor :downstream, :population, :capacity
16
+ attr_accessor :settings
17
+ attr_accessor :database
18
+ attr_accessor :cull_check, :generate_rule, :promotion_rule, :cull_rule
19
+
20
+
21
+ def initialize(name, params = {})
22
+ if !Station.stations.include? name
23
+ @name = name
24
+ else
25
+ raise ArgumentError, "Station names must be unique"
26
+ end
27
+
28
+ @capacity = params[:capacity] || 100
29
+ @settings = InterpreterSettings.new(params)
30
+ @population = []
31
+ @downstream = Set.new
32
+
33
+ @generate_rule = params[:generate_rule] || Proc.new { |crowd| RandomGuessOperator.new.generate}
34
+ @promotion_rule = params[:promotion_rule] || Proc.new { |indiv| false }
35
+ @cull_check = params[:cull_check] || Proc.new {@population.length > @capacity}
36
+ if params[:database]
37
+ @database = "#{params[:database]}/#{@name}"
38
+ else
39
+ @database = "http://localhost:5984/#{@name}"
40
+ end
41
+
42
+ Station.stations[@name] = self
43
+ end
44
+
45
+
46
+ def flows_into(otherPlace)
47
+ @downstream.add(otherPlace.name)
48
+ end
49
+
50
+
51
+ def breeding_pool
52
+ result = []
53
+ result += @population
54
+ @downstream.each do |place|
55
+ result += Station.stations[place].population
56
+ end
57
+ return result
58
+ end
59
+
60
+
61
+ def add_individual(newDude)
62
+ newDude.station = self
63
+ @population << newDude
64
+ end
65
+
66
+
67
+ def transfer(popIndex, newStationName)
68
+ if popIndex < 0 || popIndex > @population.length
69
+ raise ArgumentError, "self#transfer called with index #{popIndex}"
70
+ end
71
+ if !Station.stations.include?(newStationName)
72
+ raise ArgumentError, "self#transfer called with nonexistent station \"#{newStationName}\""
73
+ end
74
+
75
+ movedDude = @population[popIndex]
76
+ Station.stations[newStationName].population << movedDude
77
+ @population.delete_at(popIndex)
78
+ movedDude.station = Station.stations[newStationName]
79
+ end
80
+
81
+
82
+ def promote?(myDude)
83
+ return @promotion_rule.call(myDude)
84
+ end
85
+
86
+
87
+ def promote(popIndex, newLoc = nil)
88
+ if newLoc
89
+ raise(ArgumentError,
90
+ "\"#{@name}\" is not connected to \"#{newLoc}\"") if !@downstream.include?(newLoc)
91
+ else
92
+ newLoc = @downstream.to_a.sample || self.name
93
+ end
94
+ self.transfer(popIndex,newLoc)
95
+ end
96
+
97
+
98
+ def review_and_promote
99
+ up_for_promotion = @population.find_all {|dude| self.promote?(dude) }
100
+ up_for_promotion.each {|dude| self.promote(@population.find_index(dude)) }
101
+ end
102
+
103
+
104
+ def cull?
105
+ return cull_check.call
106
+ end
107
+
108
+
109
+ def review_and_cull
110
+ end
111
+
112
+
113
+ def cull_all
114
+ @population.length.times do
115
+ self.transfer(0, :DEAD)
116
+ end
117
+ end
118
+
119
+
120
+ def generate
121
+ prospects = self.breeding_pool
122
+ my_babies = self.generate_rule.call( prospects )
123
+ @population += my_babies
124
+ end
125
+
126
+
127
+ def core_cycle
128
+ self.generate
129
+ self.review_and_promote
130
+ self.review_and_cull
131
+ end
132
+ end
133
+
134
+
135
+
136
+
137
+ class DeadStation < Station
138
+ def initialize()
139
+ @name = :DEAD
140
+ @capacity = nil
141
+ @population = []
142
+ end
143
+
144
+ def core_cycle
145
+ end
146
+ end
147
+ end
@@ -0,0 +1,177 @@
1
+ INTEGER instructions
2
+
3
+ INTEGER.%: IntModuloInstruction
4
+ INTEGER.*: IntMultiplyInstruction
5
+ INTEGER.+: IntAddInstruction
6
+ INTEGER.-: IntSubtractInstruction
7
+ INTEGER./: IntDivideInstruction
8
+ INTEGER.<: IntLessThanQInstruction
9
+ INTEGER.=: IntEqualQInstruction
10
+ INTEGER.>: IntGreaterThanQInstruction
11
+ INTEGER.DEFINE: IntDefineInstruction
12
+ INTEGER.DUP: IntDuplicateInstruction
13
+ INTEGER.FLUSH: IntFlushInstruction
14
+ INTEGER.FROMBOOLEAN: IntFromBoolInstruction
15
+ INTEGER.FROMFLOAT: IntFromFloatInstruction
16
+ INTEGER.MAX: IntMaxInstruction
17
+ INTEGER.MIN: IntMinInstruction
18
+ INTEGER.POP: IntPopInstruction
19
+ INTEGER.RAND: IntRandomInstruction
20
+ INTEGER.ROT: IntRotateInstruction
21
+ INTEGER.SHOVE: IntShoveInstruction
22
+ INTEGER.STACKDEPTH: IntDepthInstruction
23
+ INTEGER.SWAP: IntSwapInstruction
24
+ INTEGER.YANK: IntYankInstruction
25
+ INTEGER.YANKDUP: IntYankdupInstruction
26
+
27
+ IntAbsInstruction
28
+ IntIfInstruction
29
+ IntNegativeInstruction
30
+
31
+ FLOAT instructions
32
+
33
+ FLOAT.%: FloatModuloInstruction
34
+ FLOAT.*: FloatMultiplyInstruction
35
+ FLOAT.+: FloatAddInstruction
36
+ FLOAT.-: FloatSubtractInstruction
37
+ FLOAT./: FloatDivideInstruction
38
+ FLOAT.<: FloatLessThanQInstruction
39
+ FLOAT.=: FloatEqualQInstruction
40
+ FLOAT.>: FloatGreaterThanQInstruction
41
+ FLOAT.COS: FloatCosineInstruction
42
+ FLOAT.DEFINE: FloatDefineInstruction
43
+ FLOAT.DUP: FloatDuplicateInstruction
44
+ FLOAT.FLUSH: FloatFlushInstruction
45
+ FLOAT.FROMBOOLEAN: FloatFromBoolInstruction
46
+ FLOAT.FROMINTEGER: FloatFromIntInstruction
47
+ FLOAT.MAX: FloatMaxInstruction
48
+ FLOAT.MIN: FloatMinInstruction
49
+ FLOAT.POP: FloatPopInstruction
50
+ FLOAT.RAND: FloatRandomInstruction
51
+ FLOAT.ROT: FloatRotateInstruction
52
+ FLOAT.SHOVE: FloatShoveInstruction
53
+ FLOAT.SIN: FloatSineInstruction
54
+ FLOAT.STACKDEPTH: FloatDepthInstruction
55
+ FLOAT.SWAP: FloatSwapInstruction
56
+ FLOAT.TAN: FloatTangentInstruction
57
+ FLOAT.YANK: FloatYankInstruction
58
+ FLOAT.YANKDUP: FloatYankdupInstruction
59
+
60
+ FloatAbsInstruction
61
+ FloatIfInstruction
62
+ FloatNegativeInstruction
63
+ FloatPowerInstruction
64
+ FloatSqrtInstruction
65
+
66
+ BOOLEAN instructions
67
+
68
+ BOOLEAN.=: BoolEqualQInstruction
69
+ BOOLEAN.AND: BoolAndInstruction
70
+ BOOLEAN.DEFINE: BoolDefineInstruction
71
+ BOOLEAN.DUP: BoolDuplicateInstruction
72
+ BOOLEAN.FLUSH: BoolFlushInstruction
73
+ BOOLEAN.FROMFLOAT: BoolFromFloatInstruction
74
+ BOOLEAN.FROMINTEGER: BoolFromIntInstruction
75
+ BOOLEAN.NOT: BoolNotInstruction
76
+ BOOLEAN.OR: BoolOrInstruction
77
+ BOOLEAN.POP: BoolPopInstruction
78
+ BOOLEAN.RAND: BoolRandomInstruction
79
+ BOOLEAN.ROT: BoolRotateInstruction
80
+ BOOLEAN.SHOVE: BoolShoveInstruction
81
+ BOOLEAN.STACKDEPTH: BoolDepthInstruction
82
+ BOOLEAN.SWAP: BoolSwapInstruction
83
+ BOOLEAN.YANK: BoolYankInstruction
84
+ BOOLEAN.YANKDUP: BoolYankdupInstruction
85
+
86
+ BoolXorInstruction
87
+
88
+
89
+
90
+ NAME instructions
91
+
92
+ NAME.=: NameEqualQInstruction
93
+ NAME.DUP: NameDupInstruction
94
+ NAME.FLUSH: NameFlushInstruction
95
+ NAME.POP: NamePopInstruction
96
+ NAME.QUOTE: NameDisableLookupInstruction
97
+ NAME.RAND: NameNextInstruction
98
+ NAME.RANDBOUNDNAME: NameRandomBoundInstruction
99
+ NAME.ROT: NameRotInstruction
100
+ NAME.SHOVE: NameShoveInstruction
101
+ NAME.STACKDEPTH: NameDepthInstruction
102
+ NAME.SWAP: NameSwapInstruction
103
+ NAME.YANK: NameYankInstruction
104
+ NAME.YANKDUP: NameYankdupInstruction
105
+
106
+
107
+
108
+ EXEC instructions
109
+
110
+ EXEC.=: ExecEqualQInstruction
111
+ EXEC.DEFINE: ExecDefineInstruction
112
+ EXEC.DO*COUNT: ExecDoCountInstruction
113
+ EXEC.DO*RANGE: ExecDoRangeInstruction
114
+ EXEC.DO*TIMES: ExecDoTimesInstruction
115
+ EXEC.DUP: ExecDuplicateInstruction
116
+ EXEC.FLUSH: ExecFlushInstruction
117
+ EXEC.IF: ExecIfInstruction
118
+ EXEC.K: ExecKInstruction
119
+ EXEC.POP: ExecPopInstruction
120
+ EXEC.ROT: ExecRotateInstruction
121
+ EXEC.S: ExecSInstruction
122
+ EXEC.SHOVE: ExecShoveInstruction
123
+ EXEC.STACKDEPTH: ExecDepthInstruction
124
+ EXEC.SWAP: ExecSwapInstruction
125
+ EXEC.Y: ExecYInstruction
126
+ EXEC.YANK: ExecYankInstruction
127
+ EXEC.YANKDUP: ExecYankdupInstruction
128
+
129
+
130
+
131
+ CODE instructions
132
+
133
+ CODE.=:
134
+ CODE.APPEND:
135
+ CODE.ATOM:
136
+ CODE.CAR:
137
+ CODE.CDR:
138
+ CODE.CONS:
139
+ CODE.CONTAINER:
140
+ CODE.CONTAINS:
141
+ CODE.DEFINE:
142
+ CODE.DEFINITION:
143
+ CODE.DISCREPANCY:
144
+ CODE.DO:
145
+ CODE.DO*:
146
+ CODE.DO*COUNT:
147
+ CODE.DO*RANGE:
148
+ CODE.DO*TIMES:
149
+ CODE.DUP: CodeDuplicateInstruction
150
+ CODE.EXTRACT:
151
+ CODE.FLUSH: CodeFlushInstruction
152
+ CODE.FROMBOOLEAN:
153
+ CODE.FROMFLOAT:
154
+ CODE.FROMINTEGER:
155
+ CODE.FROMNAME:
156
+ CODE.IF:
157
+ CODE.INSERT:
158
+ CODE.INSTRUCTIONS:
159
+ CODE.LENGTH:
160
+ CODE.LIST:
161
+ CODE.MEMBER:
162
+ CODE.NOOP: CodeNoopInstruction
163
+ CODE.NTH:
164
+ CODE.NTHCDR:
165
+ CODE.NULL:
166
+ CODE.POP: CodePopInstruction
167
+ CODE.POSITION:
168
+ CODE.QUOTE:
169
+ CODE.RAND:
170
+ CODE.ROT: CodeRotateInstruction
171
+ CODE.SHOVE: CodeShoveInstruction
172
+ CODE.SIZE:
173
+ CODE.STACKDEPTH: CodeDepthInstruction
174
+ CODE.SUBST:
175
+ CODE.SWAP: CodeSwapInstruction
176
+ CODE.YANK: CodeYankInstruction
177
+ CODE.YANKDUP: CodeYankdupInstruction
data/readme.md ADDED
@@ -0,0 +1,19 @@
1
+ # Pragmatic Genetic Programming
2
+
3
+ The first release of the Pragmatic GP package will include a Ruby implementation of a [Push 3.0 language interpreter](http://hampshire.edu/lspector/push3-description.html "Push 3"), a framework for setting up and managing straightforward genetic programming projects using an [ALPS](http://idesign.ucsc.edu/projects/alps.html "ALPS algorithms")-based algorithm, and a simple architecture for monitoring and exploring the results of GP runs as they arise.
4
+
5
+ This is a complete rewrite of an earlier project written in Python, and is really just a huge down-to-the-roots refactoring that relies on a lot of Ruby's more convenient metaprogramming features.
6
+
7
+ We're building this from the bottom up, so it doesn't "work" in the sense you might expect. At the moment, only the specs pass. There isn't any centralized run behavior in place yet, though that will be coming soon.
8
+
9
+ ## Requirements
10
+
11
+ For the time being requirements need to be installed by hand.
12
+
13
+ First, the codebase increasingly relies on features of ruby 1.9.1. If you'd like to work with it, I'd recommend using [rvm](http://rvm.beginrescueend.com/) to set it up to work alongside the other version(s) of the Ruby interpreter your system may depend on.
14
+
15
+ You'll need to download and install [couchDB](http://couchdb.apache.org/), and have it running before launching a full-fledged Nudge Experiment.
16
+
17
+ To run and verify the codebase, you'll need to have recent versions of the following gems: [haml](http://haml-lang.com/), [sinatra](http://www.sinatrarb.com/), [treetop](http://treetop.rubyforge.org/), [activesupport](http://as.rubyonrails.org/), and [couchrest](http://github.com/jchris/couchrest); [rspec](http://rspec.info/), [cucumber](http://cukes.info/) and [fakeweb](http://fakeweb.rubyforge.org/) to be able to run the specs and confirm the codebase works on your system.
18
+
19
+ If as we are you're developing with TextMate, you'll need to make sure your 'PATH' variable in the application is set correctly by adding the path to your *active* ruby binary and gems to the front.
@@ -0,0 +1,2 @@
1
+ require File.join(File.dirname(__FILE__), "/../spec_helper")
2
+ include Nudge
@@ -0,0 +1 @@
1
+ block {}
@@ -0,0 +1 @@
1
+ <%= fixture(:just_block)%>
@@ -0,0 +1,7 @@
1
+ block {
2
+ literal int(8)
3
+ literal int(9)
4
+ do int_multiply
5
+ block {
6
+ sample int(-2)
7
+ do int_divide}}
@@ -0,0 +1 @@
1
+ do foo_bar
@@ -0,0 +1,20 @@
1
+ block {
2
+ do fee
3
+ block {
4
+ block
5
+ {
6
+
7
+ do fie
8
+ block {
9
+
10
+ }}
11
+ block {
12
+ do foe
13
+ do fum
14
+ } literal float ( -8812.1
15
+ )}
16
+ ref u
17
+ block {
18
+
19
+ }
20
+ }
@@ -0,0 +1,12 @@
1
+ block {
2
+ do fee
3
+ block {
4
+ block {
5
+ do fie
6
+ block {}}
7
+ block {
8
+ do foe
9
+ do fum}
10
+ literal float (-8812.1)}
11
+ ref u
12
+ block {}}