rubyneat 0.3.5.alpha.2

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 (261) hide show
  1. checksums.yaml +7 -0
  2. data/.directory +4 -0
  3. data/.gitignore.orig +20 -0
  4. data/.idea/.name +1 -0
  5. data/.idea/.rakeTasks +7 -0
  6. data/.idea/dictionaries/trader.xml +3 -0
  7. data/.idea/encodings.xml +5 -0
  8. data/.idea/misc.xml +5 -0
  9. data/.idea/modules.xml +9 -0
  10. data/.idea/rubyneat.iml +197 -0
  11. data/.idea/runConfigurations/invpend_neat.xml +26 -0
  12. data/.idea/runConfigurations/sigdebug_neat.xml +24 -0
  13. data/.idea/runConfigurations/xor_neat.xml +26 -0
  14. data/.idea/runConfigurations/xordebug_neat.xml +24 -0
  15. data/.idea/runConfigurations/xorsin_neat.xml +24 -0
  16. data/.idea/scopes/scope_settings.xml +5 -0
  17. data/.idea/vcs.xml +7 -0
  18. data/.idea/workspace.xml +1124 -0
  19. data/.semver +5 -0
  20. data/.yardoc/checksums +11 -0
  21. data/.yardoc/object_types +0 -0
  22. data/.yardoc/objects/root.dat +0 -0
  23. data/.yardoc/proxy_types +0 -0
  24. data/Gemfile +32 -0
  25. data/Gemfile.lock +135 -0
  26. data/Gemfile.lock.orig +147 -0
  27. data/Guardfile +8 -0
  28. data/Rakefile +61 -0
  29. data/bin/neat +83 -0
  30. data/config/application.rb +5 -0
  31. data/doc/ControllerPoint.html +125 -0
  32. data/doc/CuteA.html +286 -0
  33. data/doc/CuteB.html +297 -0
  34. data/doc/DSL.html +883 -0
  35. data/doc/NEAT/BasicNeuronTypes/BiasNeuron.html +518 -0
  36. data/doc/NEAT/BasicNeuronTypes/CosineNeuron.html +274 -0
  37. data/doc/NEAT/BasicNeuronTypes/InputNeuron.html +366 -0
  38. data/doc/NEAT/BasicNeuronTypes/SigmoidNeuron.html +275 -0
  39. data/doc/NEAT/BasicNeuronTypes/SineNeuron.html +274 -0
  40. data/doc/NEAT/BasicNeuronTypes/TanhNeuron.html +274 -0
  41. data/doc/NEAT/BasicNeuronTypes.html +136 -0
  42. data/doc/NEAT/Controller/NeatSettings.html +3985 -0
  43. data/doc/NEAT/Controller.html +2490 -0
  44. data/doc/NEAT/Critter/Genotype/Gene.html +979 -0
  45. data/doc/NEAT/Critter/Genotype.html +1601 -0
  46. data/doc/NEAT/Critter/Phenotype.html +603 -0
  47. data/doc/NEAT/Critter.html +1037 -0
  48. data/doc/NEAT/DSL.html +1255 -0
  49. data/doc/NEAT/Evaluator.html +420 -0
  50. data/doc/NEAT/Evolver/CritterOp.html +551 -0
  51. data/doc/NEAT/Evolver.html +602 -0
  52. data/doc/NEAT/Expressor.html +327 -0
  53. data/doc/NEAT/Graph/DependencyResolver.html +478 -0
  54. data/doc/NEAT/Graph/GraphException.html +123 -0
  55. data/doc/NEAT/Graph.html +402 -0
  56. data/doc/NEAT/NeatException.html +123 -0
  57. data/doc/NEAT/NeatOb.html +567 -0
  58. data/doc/NEAT/Neuron.html +1067 -0
  59. data/doc/NEAT/Operator.html +162 -0
  60. data/doc/NEAT/Population.html +1961 -0
  61. data/doc/NEAT/Trait.html +169 -0
  62. data/doc/NEAT.html +588 -0
  63. data/doc/_index.html +373 -0
  64. data/doc/class_list.html +54 -0
  65. data/doc/css/common.css +1 -0
  66. data/doc/css/full_list.css +57 -0
  67. data/doc/css/style.css +339 -0
  68. data/doc/file_list.html +53 -0
  69. data/doc/frames.html +26 -0
  70. data/doc/index.html +373 -0
  71. data/doc/js/app.js +219 -0
  72. data/doc/js/full_list.js +178 -0
  73. data/doc/js/jquery.js +4 -0
  74. data/doc/method_list.html +1415 -0
  75. data/doc/top-level-namespace.html +164 -0
  76. data/foo/foo_aquarium_example.rb +38 -0
  77. data/foo/foo_gosu.rb +99 -0
  78. data/foo/foo_rubygoo.rb +104 -0
  79. data/foo/foo_sdl.rb +34 -0
  80. data/foo/icon.png +0 -0
  81. data/lib/rubyneat/critter.rb +374 -0
  82. data/lib/rubyneat/default_neat.rb +10 -0
  83. data/lib/rubyneat/dsl.rb +130 -0
  84. data/lib/rubyneat/evaluator.rb +51 -0
  85. data/lib/rubyneat/evolver.rb +315 -0
  86. data/lib/rubyneat/expressor.rb +110 -0
  87. data/lib/rubyneat/graph.rb +95 -0
  88. data/lib/rubyneat/neuron.rb +152 -0
  89. data/lib/rubyneat/population.rb +227 -0
  90. data/lib/rubyneat/rubyneat.rb +429 -0
  91. data/lib/rubyneat.rb +8 -0
  92. data/neater/invpend_neat.rb +150 -0
  93. data/neater/rnlib/inverted_pendulum.rb +380 -0
  94. data/neater/rnlib/xor.rb +10 -0
  95. data/neater/sigdebug_neat.rb +136 -0
  96. data/neater/xor_neat.rb +137 -0
  97. data/neater/xoranalog_neat.rb +138 -0
  98. data/neater/xorsin_neat.rb +143 -0
  99. data/projectFilesBackup/.idea/rubyneat.iml +180 -0
  100. data/public/.directory +4 -0
  101. data/public/background.png +0 -0
  102. data/public/background.xcf +0 -0
  103. data/public/cart.png +0 -0
  104. data/public/cart.xcf +0 -0
  105. data/public/metalpoles_molton_ball_l.jpg +0 -0
  106. data/public/old_background.png +0 -0
  107. data/public/pointer.png +0 -0
  108. data/public/pointer.xcf +0 -0
  109. data/public/pole.kra +0 -0
  110. data/public/pole.png +0 -0
  111. data/public/pole.xcf +0 -0
  112. data/public/wheel-of-year-stone-DD-131-WOYS.jpg +0 -0
  113. data/public/wheel.png +0 -0
  114. data/public/wheel.xcf +0 -0
  115. data/public/wood-planks-texture.jpg +0 -0
  116. data/rdoc/ControllerPoint.html +116 -0
  117. data/rdoc/CuteA.html +177 -0
  118. data/rdoc/CuteB.html +178 -0
  119. data/rdoc/DSLSetup.html +177 -0
  120. data/rdoc/GameTestWindow.html +242 -0
  121. data/rdoc/GameWindow.html +292 -0
  122. data/rdoc/Gemfile.html +215 -0
  123. data/rdoc/Gemfile_lock.html +327 -0
  124. data/rdoc/GraphTest.html +210 -0
  125. data/rdoc/Guardfile.html +198 -0
  126. data/rdoc/InvertedPendulum/Cart.html +668 -0
  127. data/rdoc/InvertedPendulum/DSL.html +259 -0
  128. data/rdoc/InvertedPendulum/InvPendWindow.html +402 -0
  129. data/rdoc/InvertedPendulum.html +198 -0
  130. data/rdoc/Logger.html +98 -0
  131. data/rdoc/NEAT/BasicNeuronTypes/BiasNeuron.html +265 -0
  132. data/rdoc/NEAT/BasicNeuronTypes/CosineNeuron.html +162 -0
  133. data/rdoc/NEAT/BasicNeuronTypes/InputNeuron.html +206 -0
  134. data/rdoc/NEAT/BasicNeuronTypes/SigmoidNeuron.html +162 -0
  135. data/rdoc/NEAT/BasicNeuronTypes/SineNeuron.html +162 -0
  136. data/rdoc/NEAT/BasicNeuronTypes/TanhNeuron.html +161 -0
  137. data/rdoc/NEAT/BasicNeuronTypes.html +107 -0
  138. data/rdoc/NEAT/Controller/NeatSettings.html +880 -0
  139. data/rdoc/NEAT/Controller.html +729 -0
  140. data/rdoc/NEAT/Critter/Genotype/Gene.html +457 -0
  141. data/rdoc/NEAT/Critter/Genotype.html +735 -0
  142. data/rdoc/NEAT/Critter/Phenotype.html +330 -0
  143. data/rdoc/NEAT/Critter.html +489 -0
  144. data/rdoc/NEAT/DSL.html +729 -0
  145. data/rdoc/NEAT/Evaluator.html +256 -0
  146. data/rdoc/NEAT/Evolver/CritterOp.html +349 -0
  147. data/rdoc/NEAT/Evolver.html +891 -0
  148. data/rdoc/NEAT/Expressor.html +402 -0
  149. data/rdoc/NEAT/Graph/DependencyResolver.html +291 -0
  150. data/rdoc/NEAT/Graph/GraphException.html +105 -0
  151. data/rdoc/NEAT/Graph.html +263 -0
  152. data/rdoc/NEAT/NeatException.html +105 -0
  153. data/rdoc/NEAT/NeatOb.html +325 -0
  154. data/rdoc/NEAT/Neuron.html +481 -0
  155. data/rdoc/NEAT/Operator.html +109 -0
  156. data/rdoc/NEAT/Population.html +935 -0
  157. data/rdoc/NEAT/Trait.html +117 -0
  158. data/rdoc/NEAT.html +422 -0
  159. data/rdoc/Object.html +384 -0
  160. data/rdoc/Phi.html +98 -0
  161. data/rdoc/Player.html +383 -0
  162. data/rdoc/Rakefile.html +254 -0
  163. data/rdoc/RubyNEAT/Application.html +105 -0
  164. data/rdoc/RubyNEAT.html +98 -0
  165. data/rdoc/SDL/Event2.html +98 -0
  166. data/rdoc/SDL.html +98 -0
  167. data/rdoc/Vector.html +195 -0
  168. data/rdoc/created.rid +125 -0
  169. data/rdoc/doc/ControllerPoint_html.html +299 -0
  170. data/rdoc/doc/CuteA_html.html +438 -0
  171. data/rdoc/doc/CuteB_html.html +436 -0
  172. data/rdoc/doc/DSL_html.html +992 -0
  173. data/rdoc/doc/NEAT/BasicNeuronTypes/BiasNeuron_html.html +617 -0
  174. data/rdoc/doc/NEAT/BasicNeuronTypes/CosineNeuron_html.html +413 -0
  175. data/rdoc/doc/NEAT/BasicNeuronTypes/InputNeuron_html.html +498 -0
  176. data/rdoc/doc/NEAT/BasicNeuronTypes/SigmoidNeuron_html.html +413 -0
  177. data/rdoc/doc/NEAT/BasicNeuronTypes/SineNeuron_html.html +413 -0
  178. data/rdoc/doc/NEAT/BasicNeuronTypes/TanhNeuron_html.html +412 -0
  179. data/rdoc/doc/NEAT/BasicNeuronTypes_html.html +310 -0
  180. data/rdoc/doc/NEAT/Controller/NeatSettings_html.html +3324 -0
  181. data/rdoc/doc/NEAT/Controller_html.html +2212 -0
  182. data/rdoc/doc/NEAT/Critter/Genotype/Gene_html.html +997 -0
  183. data/rdoc/doc/NEAT/Critter/Genotype_html.html +1556 -0
  184. data/rdoc/doc/NEAT/Critter/Phenotype_html.html +687 -0
  185. data/rdoc/doc/NEAT/Critter_html.html +1037 -0
  186. data/rdoc/doc/NEAT/DSL_html.html +1349 -0
  187. data/rdoc/doc/NEAT/Evaluator_html.html +556 -0
  188. data/rdoc/doc/NEAT/Evolver/CritterOp_html.html +690 -0
  189. data/rdoc/doc/NEAT/Evolver_html.html +677 -0
  190. data/rdoc/doc/NEAT/Expressor_html.html +468 -0
  191. data/rdoc/doc/NEAT/Graph/DependencyResolver_html.html +598 -0
  192. data/rdoc/doc/NEAT/Graph/GraphException_html.html +299 -0
  193. data/rdoc/doc/NEAT/Graph_html.html +527 -0
  194. data/rdoc/doc/NEAT/NeatException_html.html +299 -0
  195. data/rdoc/doc/NEAT/NeatOb_html.html +671 -0
  196. data/rdoc/doc/NEAT/Neuron_html.html +1095 -0
  197. data/rdoc/doc/NEAT/Operator_html.html +337 -0
  198. data/rdoc/doc/NEAT/Population_html.html +1795 -0
  199. data/rdoc/doc/NEAT/Trait_html.html +344 -0
  200. data/rdoc/doc/NEAT_html.html +736 -0
  201. data/rdoc/doc/_index_html.html +559 -0
  202. data/rdoc/doc/class_list_html.html +369 -0
  203. data/rdoc/doc/css/common_css.html +188 -0
  204. data/rdoc/doc/css/full_list_css.html +243 -0
  205. data/rdoc/doc/css/style_css.html +530 -0
  206. data/rdoc/doc/file_list_html.html +240 -0
  207. data/rdoc/doc/frames_html.html +217 -0
  208. data/rdoc/doc/index_html.html +559 -0
  209. data/rdoc/doc/js/app_js.html +423 -0
  210. data/rdoc/doc/js/full_list_js.html +372 -0
  211. data/rdoc/doc/js/jquery_js.html +1536 -0
  212. data/rdoc/doc/method_list_html.html +1375 -0
  213. data/rdoc/doc/top-level-namespace_html.html +317 -0
  214. data/rdoc/fonts/Lato-Light.ttf +0 -0
  215. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  216. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  217. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  218. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  219. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  220. data/rdoc/fonts.css +167 -0
  221. data/rdoc/images/add.png +0 -0
  222. data/rdoc/images/arrow_up.png +0 -0
  223. data/rdoc/images/brick.png +0 -0
  224. data/rdoc/images/brick_link.png +0 -0
  225. data/rdoc/images/bug.png +0 -0
  226. data/rdoc/images/bullet_black.png +0 -0
  227. data/rdoc/images/bullet_toggle_minus.png +0 -0
  228. data/rdoc/images/bullet_toggle_plus.png +0 -0
  229. data/rdoc/images/date.png +0 -0
  230. data/rdoc/images/delete.png +0 -0
  231. data/rdoc/images/find.png +0 -0
  232. data/rdoc/images/loadingAnimation.gif +0 -0
  233. data/rdoc/images/macFFBgHack.png +0 -0
  234. data/rdoc/images/package.png +0 -0
  235. data/rdoc/images/page_green.png +0 -0
  236. data/rdoc/images/page_white_text.png +0 -0
  237. data/rdoc/images/page_white_width.png +0 -0
  238. data/rdoc/images/plugin.png +0 -0
  239. data/rdoc/images/ruby.png +0 -0
  240. data/rdoc/images/tag_blue.png +0 -0
  241. data/rdoc/images/tag_green.png +0 -0
  242. data/rdoc/images/transparent.png +0 -0
  243. data/rdoc/images/wrench.png +0 -0
  244. data/rdoc/images/wrench_orange.png +0 -0
  245. data/rdoc/images/zoom.png +0 -0
  246. data/rdoc/index.html +282 -0
  247. data/rdoc/js/darkfish.js +140 -0
  248. data/rdoc/js/jquery.js +18 -0
  249. data/rdoc/js/navigation.js +142 -0
  250. data/rdoc/js/search.js +109 -0
  251. data/rdoc/js/search_index.js +1 -0
  252. data/rdoc/js/searcher.js +228 -0
  253. data/rdoc/rdoc.css +580 -0
  254. data/rdoc/rubyneat_gemspec.html +387 -0
  255. data/rdoc/table_of_contents.html +2502 -0
  256. data/rdoc/xordebug_log.html +170598 -0
  257. data/rdoc/xorsin_log.html +22569 -0
  258. data/rubyneat.gemspec +347 -0
  259. data/rubyneat.gemspec.orig +375 -0
  260. data/spec/lib/rubyneat/rubyneat_spec.rb +132 -0
  261. metadata +555 -0
@@ -0,0 +1,137 @@
1
+ #!/usr/bin/env neat
2
+ require 'rubyneat/dsl'
3
+ require 'xor'
4
+
5
+ include NEAT::DSL
6
+
7
+ #= TEST FOR RubyNEAT
8
+
9
+ # The number of inputs to the xor function
10
+ XOR_INPUTS = 2
11
+ XOR_STATES = 2 ** XOR_INPUTS
12
+ MAX_FIT = XOR_STATES
13
+ ALMOST_FIT = XOR_STATES - 0.5
14
+
15
+ # This defines the controller
16
+ define "XOR System" do
17
+ # Define the IO neurons
18
+ inputs {
19
+ cinv = Hash[(1..XOR_INPUTS).map{|i| [("i%s" % i).to_sym, InputNeuron]}]
20
+ cinv[:bias] = BiasNeuron
21
+ cinv
22
+ }
23
+ outputs out: TanhNeuron
24
+
25
+ # Hidden neuron specification is optional.
26
+ # The name given here is largely meaningless, but may be useful as some sort
27
+ # of unique flag.
28
+ hidden tan: TanhNeuron
29
+
30
+ ### Settings
31
+ ## General
32
+ hash_on_fitness false
33
+ start_population_size 30
34
+ population_size 30
35
+ max_generations 10000
36
+ max_population_history 10
37
+
38
+ ## Evolver probabilities and SDs
39
+ # Perturbations
40
+ mutate_perturb_gene_weights_prob 0.10
41
+ mutate_perturb_gene_weights_sd 0.25
42
+
43
+ # Complete Change of weight
44
+ mutate_change_gene_weights_prob 0.10
45
+ mutate_change_gene_weights_sd 1.00
46
+
47
+ # Adding new neurons and genes
48
+ mutate_add_neuron_prob 0.05
49
+ mutate_add_gene_prob 0.20
50
+
51
+ # Switching genes on and off
52
+ mutate_gene_disable_prob 0.01
53
+ mutate_gene_reenable_prob 0.01
54
+
55
+ interspecies_mate_rate 0.03
56
+ mate_only_prob 0.10 #0.7
57
+
58
+ # Mating
59
+ survival_threshold 0.20 # top % allowed to mate in a species.
60
+ survival_mininum_per_species 4 # for small populations, we need SOMETHING to go on.
61
+
62
+ # Fitness costs
63
+ fitness_cost_per_neuron 0#.00001
64
+ fitness_cost_per_gene 0#.00001
65
+
66
+ # Speciation
67
+ compatibility_threshold 2.5
68
+ disjoint_coefficient 0.6
69
+ excess_coefficient 0.6
70
+ weight_coefficient 0.2
71
+ max_species 20
72
+ dropoff_age 15
73
+ smallest_species 5
74
+
75
+ # Sequencing
76
+ start_sequence_at 0
77
+ end_sequence_at 2 ** XOR_INPUTS - 1
78
+ end
79
+
80
+ evolve do
81
+ # This query shall return a vector result that will serve
82
+ # as the inputs to the critter.
83
+ query { |seq|
84
+ # We'll use the seq to create the xor sequences via
85
+ # the least signficant bits.
86
+ condition_boolean_vector (0 ... XOR_INPUTS).map{|i| (seq & (1 << i)) != 0}
87
+ }
88
+
89
+ # Compare the fitness of two critters. We may choose a different ordering
90
+ # here.
91
+ compare {|f1, f2| f2 <=> f1 }
92
+
93
+ # Here we integrate the cost with the fitness.
94
+ cost { |fitvec, cost|
95
+ fit = XOR_STATES - fitvec.reduce {|a,r| a+r} - cost
96
+ $log.debug ">>>>>>> fitvec #{fitvec} => #{fit}, cost #{cost}"
97
+ fit
98
+ }
99
+
100
+ fitness { |vin, vout, seq|
101
+ unless vout == :error
102
+ bin = uncondition_boolean_vector vin
103
+ bout = uncondition_boolean_vector vout
104
+ bactual = [xor(*vin)]
105
+ vactual = condition_boolean_vector bactual
106
+ fit = (bout == bactual) ? 0.00 : 1.00
107
+ #simple_fitness_error(vout, vactual.map{|f| f * 0.50 })
108
+ bfit = (bout == bactual) ? 'T' : 'F'
109
+ $log.debug "(%s) Fitness bin=%s, bout=%s, bactual=%s, vout=%s, fit=%6.3f, seq=%s" % [bfit,
110
+ bin,
111
+ bout,
112
+ bactual,
113
+ vout,
114
+ fit,
115
+ seq]
116
+ fit
117
+ else
118
+ $log.debug "Error on #{vin} [#{seq}]"
119
+ 1.0
120
+ end
121
+ }
122
+
123
+ stop_on_fitness {|fitness, c|
124
+ puts "*** Generation Run #{c.generation_num}, best is #{fitness[:best]} ***\n\n"
125
+ fitness[:best] >= ALMOST_FIT
126
+ }
127
+ end
128
+
129
+ report do |rept|
130
+ $log.info "REPORT #{rept.to_yaml}"
131
+ end
132
+
133
+ # The block here is called upon the completion of each generation
134
+ run_engine do |c|
135
+ $log.info "******** Run of generation %s completed, history count %d ********" %
136
+ [c.generation_num, c.population_history.size]
137
+ end
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env neat
2
+ require 'rubyneat/dsl'
3
+ require 'xor'
4
+
5
+ include NEAT::DSL
6
+
7
+ #= TEST FOR RubyNEAT -- Analog Fitness Vector for XOR
8
+
9
+ # The number of inputs to the xor function
10
+ XOR_INPUTS = 2
11
+ XOR_STATES = 2 ** XOR_INPUTS
12
+ MAX_FIT = XOR_STATES
13
+ ALMOST_FIT = XOR_STATES - 0.3
14
+
15
+ # This defines the controller
16
+ define "XOR Analog Fitness System" do
17
+ # Define the IO neurons
18
+ inputs {
19
+ cinv = Hash[(1..XOR_INPUTS).map{|i| [("i%s" % i).to_sym, InputNeuron]}]
20
+ cinv[:bias] = BiasNeuron
21
+ cinv
22
+ }
23
+ outputs out: TanhNeuron
24
+
25
+ # Hidden neuron specification is optional.
26
+ # The name given here is largely meaningless, but may be useful as some sort
27
+ # of unique flag.
28
+ hidden tan: TanhNeuron
29
+
30
+ ### Settings
31
+ ## General
32
+ hash_on_fitness false
33
+ start_population_size 30
34
+ population_size 30
35
+ max_generations 10000
36
+ max_population_history 10
37
+
38
+ ## Evolver probabilities and SDs
39
+ # Perturbations
40
+ mutate_perturb_gene_weights_prob 0.10
41
+ mutate_perturb_gene_weights_sd 0.50
42
+
43
+ # Complete Change of weight
44
+ mutate_change_gene_weights_prob 0.05
45
+ mutate_change_gene_weights_sd 2.00
46
+
47
+
48
+ # Adding new neurons and genes
49
+ mutate_add_neuron_prob 0.07
50
+ mutate_add_gene_prob 0.20
51
+
52
+ # Switching genes on and off
53
+ mutate_gene_disable_prob 0.01
54
+ mutate_gene_reenable_prob 0.01
55
+
56
+ interspecies_mate_rate 0.03
57
+ mate_only_prob 0.10 #0.7
58
+
59
+ # Mating
60
+ survival_threshold 0.20 # top % allowed to mate in a species.
61
+ survival_mininum_per_species 4 # for small populations, we need SOMETHING to go on.
62
+
63
+ # Fitness costs
64
+ fitness_cost_per_neuron 0#.00001
65
+ fitness_cost_per_gene 0#.00001
66
+
67
+ # Speciation
68
+ compatibility_threshold 2.5
69
+ disjoint_coefficient 0.6
70
+ excess_coefficient 0.6
71
+ weight_coefficient 0.2
72
+ max_species 20
73
+ dropoff_age 15
74
+ smallest_species 5
75
+
76
+ # Sequencing
77
+ start_sequence_at 0
78
+ end_sequence_at 2 ** XOR_INPUTS - 1
79
+ end
80
+
81
+ evolve do
82
+ # This query shall return a vector result that will serve
83
+ # as the inputs to the critter.
84
+ query { |seq|
85
+ # We'll use the seq to create the xor sequences via
86
+ # the least signficant bits.
87
+ condition_boolean_vector (0 ... XOR_INPUTS).map{|i| (seq & (1 << i)) != 0}
88
+ }
89
+
90
+ # Compare the fitness of two critters. We may choose a different ordering
91
+ # here.
92
+ compare {|f1, f2| f2 <=> f1 }
93
+
94
+ # Here we integrate the cost with the fitness.
95
+ cost { |fitvec, cost|
96
+ fit = XOR_STATES - fitvec.reduce {|a,r| a+r} - cost
97
+ $log.debug ">>>>>>> fitvec #{fitvec} => #{fit}, cost #{cost}"
98
+ fit
99
+ }
100
+
101
+ fitness { |vin, vout, seq|
102
+ unless vout == :error
103
+ bin = uncondition_boolean_vector vin
104
+ bout = uncondition_boolean_vector vout
105
+ bactual = [xor(*vin)]
106
+ vactual = condition_boolean_vector bactual
107
+ #fit = (bout == bactual) ? 0.00 : 1.00
108
+ fit = simple_fitness_error(vout, vactual) / 2.0
109
+ bfit = (bout == bactual) ? 'T' : 'F'
110
+ $log.debug "(%s) Fitness bin=%s, bout=%s, bactual=%s, vout=%s, fit=%6.3f, seq=%s" % [bfit,
111
+ bin,
112
+ bout,
113
+ bactual,
114
+ vout,
115
+ fit,
116
+ seq]
117
+ fit
118
+ else
119
+ $log.debug "Error on #{vin} [#{seq}]"
120
+ 1.0
121
+ end
122
+ }
123
+
124
+ stop_on_fitness {|fitness, c|
125
+ puts "*** Generation Run #{c.generation_num}, best is #{fitness[:best]} ***\n\n"
126
+ fitness[:best] >= ALMOST_FIT
127
+ }
128
+ end
129
+
130
+ report do |rept|
131
+ $log.info "REPORT #{rept.to_yaml}"
132
+ end
133
+
134
+ # The block here is called upon the completion of each generation
135
+ run_engine do |c|
136
+ $log.info "******** Run of generation %s completed, history count %d ********" %
137
+ [c.generation_num, c.population_history.size]
138
+ end
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env neat
2
+ require 'rubyneat/dsl'
3
+ require 'xor'
4
+
5
+ include NEAT::DSL
6
+
7
+ #= DEBUGGING FOR RubyNEAT using SineNeurons
8
+
9
+ # The number of inputs to the xor function
10
+ XOR_INPUTS = 2
11
+ XOR_STATES = 2 ** XOR_INPUTS
12
+ MAX_FIT = XOR_STATES
13
+ ALMOST_FIT = (XOR_STATES - 0.5)
14
+
15
+ # This defines the controller
16
+ define "XOR Sin CPPN Debug System" do
17
+ # Define the IO neurons
18
+ inputs {
19
+ cinv = Hash[(1..XOR_INPUTS).map{|i| [("i%s" % i).to_sym, InputNeuron]}]
20
+ cinv[:bias] = BiasNeuron
21
+ cinv
22
+ }
23
+ outputs out: SineNeuron
24
+
25
+ # Hidden neuron specification is optional.
26
+ # The key names given here is largely meaningless,
27
+ # but may be useful as some sort
28
+ # of unique flag.
29
+ hidden sin: SineNeuron, cos: CosineNeuron, tanh: TanhNeuron
30
+
31
+ ### Settings
32
+ ## General
33
+ hash_on_fitness = false
34
+ start_population_size 60
35
+ population_size 60
36
+ max_generations 10000
37
+ max_population_history 10
38
+
39
+ ## Evolver probabilities and SDs
40
+ # Perturbations
41
+ mutate_perturb_gene_weights_prob 0.200
42
+ mutate_perturb_gene_weights_sd 0.25
43
+
44
+ # Complete Change of weight
45
+ mutate_change_gene_weights_prob 0.01
46
+ mutate_change_gene_weights_sd 2.00
47
+
48
+ # Adding new neurons and genes
49
+ mutate_add_neuron_prob 0.20
50
+ mutate_add_gene_prob 0.20
51
+
52
+ # Switching genes on and off
53
+ mutate_gene_disable_prob 0.01
54
+ mutate_gene_reenable_prob 0.01
55
+
56
+ interspecies_mate_rate 0.03
57
+ mate_only_prob 0.05
58
+
59
+ # Mating
60
+ survival_threshold 0.20 # top % allowed to mate in a species.
61
+ survival_mininum_per_species 4 # for small populations, we need SOMETHING to go on.
62
+
63
+ # Fitness costs
64
+ fitness_cost_per_neuron 0.00001
65
+ fitness_cost_per_gene 0.00001
66
+
67
+ # Speciation
68
+ compatibility_threshold 2.5
69
+ disjoint_coefficient 0.6
70
+ excess_coefficient 0.6
71
+ weight_coefficient 0.2
72
+ max_species 20
73
+ dropoff_age 15
74
+ smallest_species 5
75
+
76
+ # Sequencing
77
+ start_sequence_at 0
78
+ end_sequence_at 2 ** XOR_INPUTS - 1
79
+ end
80
+
81
+ evolve do
82
+ # This query shall return a vector result that will serve
83
+ # as the inputs to the critter.
84
+ query { |seq| @seq = seq
85
+ # We'll use the seq to create the xor sequences via
86
+ # the least signficant bits.
87
+ condition_boolean_vector (0 ... XOR_INPUTS).map{|i| (seq & (1 << i)) != 0}
88
+ }
89
+
90
+ # This block is called directly by the neuron through its yield, if given.
91
+ # It will be called repeatedly until you return false here.
92
+ recurrence { |outvec| false }
93
+
94
+ # Compare the fitness of two critters. We may choose a different ordering
95
+ # here.
96
+ compare {|f1, f2| f2 <=> f1 }
97
+
98
+ # Here we integrate the cost with the fitness.
99
+ cost { |fitvec, cost|
100
+ fit = (XOR_STATES - fitvec.reduce {|a,r| a+r}) - cost # ((rand(5) == 0) ? cost : 0)
101
+ $log.debug ">>>>>>> fitvec #{fitvec} => #{fit}, cost #{cost}"
102
+ fit
103
+ }
104
+
105
+ fitness { |vin, vout, seq|
106
+ unless vout == :error
107
+ bin = uncondition_boolean_vector vin
108
+ bout = uncondition_boolean_vector vout
109
+ bactual = [xor(*vin)]
110
+ vactual = condition_boolean_vector bactual
111
+ fit = (bout == bactual) ? 0.00 : 1.00
112
+ #simple_fitness_error(vout, vactual.map{|f| f * 0.50 })
113
+ bfit = (bout == bactual) ? 'T' : 'F'
114
+ $log.debug "(%s) Fitness bin=%s, bout=%s, bactual=%s, vout=%s, fit=%6.3f, seq=%s" % [bfit,
115
+ bin,
116
+ bout,
117
+ bactual,
118
+ vout,
119
+ fit,
120
+ seq]
121
+ fit
122
+ else
123
+ $log.debug "Error on #{vin} [#{seq}]"
124
+ 1.00
125
+ end
126
+ }
127
+
128
+ stop_on_fitness {|fitness, c|
129
+ puts "*** Generation Run #{c.generation_num}, best is #{fitness[:best]} ***\n\n"
130
+ fitness[:best] >= MAX_FIT - 0.5
131
+ }
132
+ end
133
+
134
+ report do |rept|
135
+ $log.info "REPORT #{rept.to_yaml}"
136
+ end
137
+
138
+ # The block here is called upon the completion of each generation
139
+ run_engine do |c|
140
+ $log.info "******** Run of generation %s completed, history count %d ********" %
141
+ [c.generation_num, c.population_history.size]
142
+ end
143
+
@@ -0,0 +1,180 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="ModuleRunConfigurationManager">
4
+ <configuration default="false" name="Run spec 'oread_spec': rubyneat" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
5
+ <predefined_log_file id="RUBY_RSPEC" enabled="true" />
6
+ <module name="rubyneat" />
7
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
8
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
9
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
10
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
11
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
12
+ <envs>
13
+ <env name="JRUBY_OPTS" value="-X+O" />
14
+ </envs>
15
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
16
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
17
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
18
+ <COVERAGE_PATTERN ENABLED="true">
19
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
20
+ </COVERAGE_PATTERN>
21
+ </EXTENSION>
22
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
23
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
24
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/lib/deep_dive/deep_dive_spec.rb" />
25
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
26
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
27
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
28
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
29
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
30
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
31
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
32
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
33
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
34
+ <RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
35
+ <RunnerSettings RunnerId="RubyDebugRunner" />
36
+ <ConfigurationWrapper RunnerId="RubyDebugRunner" />
37
+ <method />
38
+ </configuration>
39
+ <configuration default="false" name="neat" type="RubyRunConfigurationType" factoryName="Ruby">
40
+ <module name="rubyneat" />
41
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
42
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/bin" />
43
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
44
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
45
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
46
+ <envs>
47
+ <env name="RUBYLIB" value="$MODULE_DIR$/lib:$MODULE_DIR$/neater" />
48
+ </envs>
49
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
50
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
51
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
52
+ <COVERAGE_PATTERN ENABLED="true">
53
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
54
+ </COVERAGE_PATTERN>
55
+ </EXTENSION>
56
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
57
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/bin/neat.rb" />
58
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="run xor" />
59
+ <RunnerSettings RunnerId="RubyCover" />
60
+ <RunnerSettings RunnerId="RubyDebugRunner" />
61
+ <RunnerSettings RunnerId="RubyRunner" />
62
+ <ConfigurationWrapper RunnerId="RubyCover" />
63
+ <ConfigurationWrapper RunnerId="RubyDebugRunner" />
64
+ <ConfigurationWrapper RunnerId="RubyRunner" />
65
+ <method />
66
+ </configuration>
67
+ <configuration default="false" name="xor_neat" type="RubyRunConfigurationType" factoryName="Ruby">
68
+ <module name="rubyneat" />
69
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
70
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$" />
71
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
72
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
73
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
74
+ <envs />
75
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
76
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
77
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
78
+ <COVERAGE_PATTERN ENABLED="true">
79
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
80
+ </COVERAGE_PATTERN>
81
+ </EXTENSION>
82
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
83
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/xor_neat.rb" />
84
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
85
+ <RunnerSettings RunnerId="RubyDebugRunner" />
86
+ <RunnerSettings RunnerId="RubyRunner" />
87
+ <ConfigurationWrapper RunnerId="RubyDebugRunner" />
88
+ <ConfigurationWrapper RunnerId="RubyRunner" />
89
+ <method />
90
+ </configuration>
91
+ <configuration default="false" name="deep_dive" type="RubyRunConfigurationType" factoryName="Ruby" temporary="true">
92
+ <module name="rubyneat" />
93
+ <RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
94
+ <RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/lib/deep_dive" />
95
+ <RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
96
+ <RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
97
+ <RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
98
+ <envs />
99
+ <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
100
+ <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
101
+ <EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
102
+ <COVERAGE_PATTERN ENABLED="true">
103
+ <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
104
+ </COVERAGE_PATTERN>
105
+ </EXTENSION>
106
+ <EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
107
+ <RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/lib/deep_dive/deep_dive.rb" />
108
+ <RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
109
+ <RunnerSettings RunnerId="RubyDebugRunner" />
110
+ <ConfigurationWrapper RunnerId="RubyDebugRunner" />
111
+ <method />
112
+ </configuration>
113
+ </component>
114
+ <component name="NewModuleRootManager">
115
+ <content url="file://$MODULE_DIR$">
116
+ <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
117
+ </content>
118
+ <orderEntry type="jdk" jdkName="RVM: ruby-2.0.0-p353" jdkType="RUBY_SDK" />
119
+ <orderEntry type="sourceFolder" forTests="false" />
120
+ <orderEntry type="library" scope="PROVIDED" name="addressable (v2.3.5, RVM: ruby-2.0.0-p353) [gem]" level="application" />
121
+ <orderEntry type="library" scope="PROVIDED" name="aquarium (v0.5.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
122
+ <orderEntry type="library" scope="PROVIDED" name="awesome_print (v1.2.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
123
+ <orderEntry type="library" scope="PROVIDED" name="bson (v1.9.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
124
+ <orderEntry type="library" scope="PROVIDED" name="bson_ext (v1.9.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
125
+ <orderEntry type="library" scope="PROVIDED" name="builder (v3.2.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
126
+ <orderEntry type="library" scope="PROVIDED" name="bundler (v1.3.5, RVM: ruby-2.0.0-p353) [gem]" level="application" />
127
+ <orderEntry type="library" scope="PROVIDED" name="celluloid (v0.15.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
128
+ <orderEntry type="library" scope="PROVIDED" name="coderay (v1.1.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
129
+ <orderEntry type="library" scope="PROVIDED" name="debase (v0.0.9, RVM: ruby-2.0.0-p353) [gem]" level="application" />
130
+ <orderEntry type="library" scope="PROVIDED" name="debugger-ruby_core_source (v1.3.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
131
+ <orderEntry type="library" scope="PROVIDED" name="deep_dive (v0.0.4, RVM: ruby-2.0.0-p353) [gem]" level="application" />
132
+ <orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.2.5, RVM: ruby-2.0.0-p353) [gem]" level="application" />
133
+ <orderEntry type="library" scope="PROVIDED" name="distribution (v0.7.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
134
+ <orderEntry type="library" scope="PROVIDED" name="docile (v1.1.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
135
+ <orderEntry type="library" scope="PROVIDED" name="faraday (v0.8.8, RVM: ruby-2.0.0-p353) [gem]" level="application" />
136
+ <orderEntry type="library" scope="PROVIDED" name="ffi (v1.9.3, RVM: ruby-2.0.0-p353) [gem]" level="application" />
137
+ <orderEntry type="library" scope="PROVIDED" name="formatador (v0.2.4, RVM: ruby-2.0.0-p353) [gem]" level="application" />
138
+ <orderEntry type="library" scope="PROVIDED" name="git (v1.2.6, RVM: ruby-2.0.0-p353) [gem]" level="application" />
139
+ <orderEntry type="library" scope="PROVIDED" name="github_api (v0.10.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
140
+ <orderEntry type="library" scope="PROVIDED" name="guard (v2.2.5, RVM: ruby-2.0.0-p353) [gem]" level="application" />
141
+ <orderEntry type="library" scope="PROVIDED" name="guard-rspec (v4.2.3, RVM: ruby-2.0.0-p353) [gem]" level="application" />
142
+ <orderEntry type="library" scope="PROVIDED" name="hashie (v2.0.5, RVM: ruby-2.0.0-p353) [gem]" level="application" />
143
+ <orderEntry type="library" scope="PROVIDED" name="highline (v1.6.20, RVM: ruby-2.0.0-p353) [gem]" level="application" />
144
+ <orderEntry type="library" scope="PROVIDED" name="httpauth (v0.2.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
145
+ <orderEntry type="library" scope="PROVIDED" name="jeweler (v1.8.8, RVM: ruby-2.0.0-p353) [gem]" level="application" />
146
+ <orderEntry type="library" scope="PROVIDED" name="json (v1.8.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
147
+ <orderEntry type="library" scope="PROVIDED" name="jwt (v0.1.8, RVM: ruby-2.0.0-p353) [gem]" level="application" />
148
+ <orderEntry type="library" scope="PROVIDED" name="listen (v2.4.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
149
+ <orderEntry type="library" scope="PROVIDED" name="lumberjack (v1.0.4, RVM: ruby-2.0.0-p353) [gem]" level="application" />
150
+ <orderEntry type="library" scope="PROVIDED" name="method_source (v0.8.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
151
+ <orderEntry type="library" scope="PROVIDED" name="mongo (v1.9.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
152
+ <orderEntry type="library" scope="PROVIDED" name="multi_json (v1.8.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
153
+ <orderEntry type="library" scope="PROVIDED" name="multi_xml (v0.5.5, RVM: ruby-2.0.0-p353) [gem]" level="application" />
154
+ <orderEntry type="library" scope="PROVIDED" name="multipart-post (v1.2.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
155
+ <orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.5.10, RVM: ruby-2.0.0-p353) [gem]" level="application" />
156
+ <orderEntry type="library" scope="PROVIDED" name="oauth2 (v0.9.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
157
+ <orderEntry type="library" scope="PROVIDED" name="pry (v0.9.12.4, RVM: ruby-2.0.0-p353) [gem]" level="application" />
158
+ <orderEntry type="library" scope="PROVIDED" name="rack (v1.5.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
159
+ <orderEntry type="library" scope="PROVIDED" name="rake (v10.1.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
160
+ <orderEntry type="library" scope="PROVIDED" name="rb-fsevent (v0.9.4, RVM: ruby-2.0.0-p353) [gem]" level="application" />
161
+ <orderEntry type="library" scope="PROVIDED" name="rb-inotify (v0.9.3, RVM: ruby-2.0.0-p353) [gem]" level="application" />
162
+ <orderEntry type="library" scope="PROVIDED" name="rdoc (v4.1.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
163
+ <orderEntry type="library" scope="PROVIDED" name="rspec (v2.14.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
164
+ <orderEntry type="library" scope="PROVIDED" name="rspec-core (v2.14.7, RVM: ruby-2.0.0-p353) [gem]" level="application" />
165
+ <orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v2.14.4, RVM: ruby-2.0.0-p353) [gem]" level="application" />
166
+ <orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v2.14.4, RVM: ruby-2.0.0-p353) [gem]" level="application" />
167
+ <orderEntry type="library" scope="PROVIDED" name="semver (v1.0.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
168
+ <orderEntry type="library" scope="PROVIDED" name="simplecov (v0.8.2, RVM: ruby-2.0.0-p353) [gem]" level="application" />
169
+ <orderEntry type="library" scope="PROVIDED" name="simplecov-html (v0.8.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
170
+ <orderEntry type="library" scope="PROVIDED" name="slop (v3.4.7, RVM: ruby-2.0.0-p353) [gem]" level="application" />
171
+ <orderEntry type="library" scope="PROVIDED" name="thor (v0.18.1, RVM: ruby-2.0.0-p353) [gem]" level="application" />
172
+ <orderEntry type="library" scope="PROVIDED" name="timers (v1.1.0, RVM: ruby-2.0.0-p353) [gem]" level="application" />
173
+ <orderEntry type="library" scope="PROVIDED" name="yard (v0.8.7.3, RVM: ruby-2.0.0-p353) [gem]" level="application" />
174
+ </component>
175
+ <component name="RModuleSettingsStorage">
176
+ <LOAD_PATH number="1" string0="$MODULE_DIR$/bin" />
177
+ <I18N_FOLDERS number="0" />
178
+ </component>
179
+ </module>
180
+
data/public/.directory ADDED
@@ -0,0 +1,4 @@
1
+ [Dolphin]
2
+ PreviewsShown=true
3
+ Timestamp=2014,2,8,20,33,7
4
+ Version=3
Binary file
Binary file
data/public/cart.png ADDED
Binary file
data/public/cart.xcf ADDED
Binary file
Binary file
Binary file
Binary file
Binary file
data/public/pole.kra ADDED
Binary file
data/public/pole.png ADDED
Binary file
data/public/pole.xcf ADDED
Binary file
data/public/wheel.png ADDED
Binary file
data/public/wheel.xcf ADDED
Binary file
Binary file