rubyneat 0.3.5.alpha.2

Sign up to get free protection for your applications and to get access to all the features.
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