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,935 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class NEAT::Population - rubyneat 0.3.4</title>
8
+
9
+ <link href="../fonts.css" rel="stylesheet">
10
+ <link href="../rdoc.css" rel="stylesheet">
11
+
12
+ <script type="text/javascript">
13
+ var rdoc_rel_prefix = "../";
14
+ </script>
15
+
16
+ <script src="../js/jquery.js"></script>
17
+ <script src="../js/navigation.js"></script>
18
+ <script src="../js/search_index.js"></script>
19
+ <script src="../js/search.js"></script>
20
+ <script src="../js/searcher.js"></script>
21
+ <script src="../js/darkfish.js"></script>
22
+
23
+
24
+ <body id="top" role="document" class="class">
25
+ <nav role="navigation">
26
+ <div id="project-navigation">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
+ <h2>
29
+ <a href="../index.html" rel="home">Home</a>
30
+ </h2>
31
+
32
+ <div id="table-of-contents-navigation">
33
+ <a href="../table_of_contents.html#pages">Pages</a>
34
+ <a href="../table_of_contents.html#classes">Classes</a>
35
+ <a href="../table_of_contents.html#methods">Methods</a>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="search-section" role="search" class="project-section initially-hidden">
40
+ <form action="#" method="get" accept-charset="utf-8">
41
+ <div id="search-field-wrapper">
42
+ <input id="search-field" role="combobox" aria-label="Search"
43
+ aria-autocomplete="list" aria-controls="search-results"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
+ title="Type to search, Up and Down to navigate, Enter to load">
46
+ </div>
47
+
48
+ <ul id="search-results" aria-label="Search Results"
49
+ aria-busy="false" aria-expanded="false"
50
+ aria-atomic="false" class="initially-hidden"></ul>
51
+ </form>
52
+ </div>
53
+
54
+ </div>
55
+
56
+
57
+
58
+ <div id="class-metadata">
59
+
60
+ <div id="parent-class-section" class="nav-section">
61
+ <h3>Parent</h3>
62
+
63
+
64
+ <p class="link">NeatOb
65
+
66
+ </div>
67
+
68
+
69
+
70
+ <!-- Method Quickref -->
71
+ <div id="method-list-section" class="nav-section">
72
+ <h3>Methods</h3>
73
+
74
+ <ul class="link-list" role="directory">
75
+
76
+ <li class="calls-super" ><a href="#method-c-new">::new</a>
77
+
78
+ <li ><a href="#method-i-analyze-21">#analyze!</a>
79
+
80
+ <li ><a href="#method-i-best_critter">#best_critter</a>
81
+
82
+ <li ><a href="#method-i-dump_s">#dump_s</a>
83
+
84
+ <li ><a href="#method-i-evaluate-21">#evaluate!</a>
85
+
86
+ <li ><a href="#method-i-evolve">#evolve</a>
87
+
88
+ <li ><a href="#method-i-express-21">#express!</a>
89
+
90
+ <li ><a href="#method-i-initialize_for_recurrence-21">#initialize_for_recurrence!</a>
91
+
92
+ <li ><a href="#method-i-mutate-21">#mutate!</a>
93
+
94
+ <li ><a href="#method-i-report">#report</a>
95
+
96
+ <li ><a href="#method-i-report_best_fit">#report_best_fit</a>
97
+
98
+ <li ><a href="#method-i-report_fitness">#report_fitness</a>
99
+
100
+ <li ><a href="#method-i-report_fitness_species">#report_fitness_species</a>
101
+
102
+ <li ><a href="#method-i-report_worst_fit">#report_worst_fit</a>
103
+
104
+ <li ><a href="#method-i-speciate-21">#speciate!</a>
105
+
106
+ <li ><a href="#method-i-worst_critter">#worst_critter</a>
107
+
108
+ </ul>
109
+ </div>
110
+
111
+ </div>
112
+ </nav>
113
+
114
+ <main role="main" aria-labelledby="class-NEAT::Population">
115
+ <h1 id="class-NEAT::Population" class="class">
116
+ class NEAT::Population
117
+ </h1>
118
+
119
+ <section class="description">
120
+
121
+ <h1 id="class-NEAT::Population-label-Population+of+NEAT+Critters."><a href="Population.html">Population</a> of <a href="../NEAT.html">NEAT</a> Critters.<span><a href="#class-NEAT::Population-label-Population+of+NEAT+Critters.">&para;</a> <a href="#documentation">&uarr;</a></span></h1>
122
+
123
+ <pre>The Population
124
+ In ourselves we have the pool of neurons the critters all use.
125
+ the pool of neurons are indirects, of course, as during phenotype
126
+ expression, all the phenotypes shall be created individually.</pre>
127
+
128
+ </section>
129
+
130
+
131
+
132
+
133
+ <section id="5Buntitled-5D" class="documentation-section">
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+ <section class="attribute-method-details" class="method-section">
142
+ <header>
143
+ <h3>Attributes</h3>
144
+ </header>
145
+
146
+
147
+ <div id="attribute-i-critters" class="method-detail">
148
+ <div class="method-heading attribute-method-heading">
149
+ <span class="method-name">critters</span><span
150
+ class="attribute-access-type">[RW]</span>
151
+ </div>
152
+
153
+ <div class="method-description">
154
+
155
+ <p>list of critter in this population</p>
156
+
157
+ </div>
158
+ </div>
159
+
160
+ <div id="attribute-i-fitness" class="method-detail">
161
+ <div class="method-heading attribute-method-heading">
162
+ <span class="method-name">fitness</span><span
163
+ class="attribute-access-type">[R]</span>
164
+ </div>
165
+
166
+ <div class="method-description">
167
+
168
+ <p>Overall population fitness and novelty</p>
169
+
170
+ </div>
171
+ </div>
172
+
173
+ <div id="attribute-i-hidden_neurons" class="method-detail">
174
+ <div class="method-heading attribute-method-heading">
175
+ <span class="method-name">hidden_neurons</span><span
176
+ class="attribute-access-type">[RW]</span>
177
+ </div>
178
+
179
+ <div class="method-description">
180
+
181
+ <p>List of possible neuron classes for hidden neurons.</p>
182
+
183
+ </div>
184
+ </div>
185
+
186
+ <div id="attribute-i-input_neurons" class="method-detail">
187
+ <div class="method-heading attribute-method-heading">
188
+ <span class="method-name">input_neurons</span><span
189
+ class="attribute-access-type">[RW]</span>
190
+ </div>
191
+
192
+ <div class="method-description">
193
+
194
+ <p>Ordered list or hash of input neuron classes (all critters generated here
195
+ shall have this)</p>
196
+
197
+ </div>
198
+ </div>
199
+
200
+ <div id="attribute-i-novelty" class="method-detail">
201
+ <div class="method-heading attribute-method-heading">
202
+ <span class="method-name">novelty</span><span
203
+ class="attribute-access-type">[R]</span>
204
+ </div>
205
+
206
+ <div class="method-description">
207
+
208
+ <p>Overall population fitness and novelty</p>
209
+
210
+ </div>
211
+ </div>
212
+
213
+ <div id="attribute-i-output_neurons" class="method-detail">
214
+ <div class="method-heading attribute-method-heading">
215
+ <span class="method-name">output_neurons</span><span
216
+ class="attribute-access-type">[RW]</span>
217
+ </div>
218
+
219
+ <div class="method-description">
220
+
221
+ <p>Ordered list or hash of output neuron classes (all critters generated here
222
+ shall have this)</p>
223
+
224
+ </div>
225
+ </div>
226
+
227
+ <div id="attribute-i-species" class="method-detail">
228
+ <div class="method-heading attribute-method-heading">
229
+ <span class="method-name">species</span><span
230
+ class="attribute-access-type">[R]</span>
231
+ </div>
232
+
233
+ <div class="method-description">
234
+
235
+ <p>Hash list of species lists</p>
236
+
237
+ </div>
238
+ </div>
239
+
240
+ <div id="attribute-i-traits" class="method-detail">
241
+ <div class="method-heading attribute-method-heading">
242
+ <span class="method-name">traits</span><span
243
+ class="attribute-access-type">[RW]</span>
244
+ </div>
245
+
246
+ <div class="method-description">
247
+
248
+
249
+
250
+ </div>
251
+ </div>
252
+
253
+ </section>
254
+
255
+
256
+
257
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
258
+ <header>
259
+ <h3>Public Class Methods</h3>
260
+ </header>
261
+
262
+
263
+ <div id="method-c-new" class="method-detail ">
264
+
265
+ <div class="method-heading">
266
+ <span class="method-name">new</span><span
267
+ class="method-args">(c, &block)</span>
268
+
269
+ <span class="method-click-advice">click to toggle source</span>
270
+
271
+ </div>
272
+
273
+
274
+ <div class="method-description">
275
+
276
+ <p>Create initial (ramdom) population of critters</p>
277
+
278
+
279
+ <div class="method-calls-super">
280
+ Calls superclass method
281
+
282
+ </div>
283
+
284
+
285
+
286
+ <div class="method-source-code" id="new-source">
287
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 37</span>
288
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">c</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
289
+ <span class="ruby-keyword">super</span>
290
+ <span class="ruby-ivar">@input_neurons</span> = <span class="ruby-identifier">c</span>.<span class="ruby-identifier">neural_inputs</span>.<span class="ruby-identifier">clone</span>
291
+ <span class="ruby-ivar">@output_neurons</span> = <span class="ruby-identifier">c</span>.<span class="ruby-identifier">neural_outputs</span>.<span class="ruby-identifier">clone</span>
292
+ <span class="ruby-ivar">@hidden_neurons</span> = <span class="ruby-keyword">unless</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">neural_hidden</span>.<span class="ruby-identifier">nil?</span>
293
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">neural_hidden</span>
294
+ <span class="ruby-keyword">else</span>
295
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">neuron_catalog</span>.<span class="ruby-identifier">keep_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">input?</span>}
296
+ <span class="ruby-keyword">end</span>
297
+ <span class="ruby-ivar">@critters</span> = (<span class="ruby-value">0</span> <span class="ruby-operator">...</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">parms</span>.<span class="ruby-identifier">start_population_size</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">parms</span>.<span class="ruby-identifier">population_size</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span>
298
+ <span class="ruby-constant">Critter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword">self</span>)
299
+ <span class="ruby-keyword">end</span>
300
+ <span class="ruby-identifier">block</span>.(<span class="ruby-keyword">self</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">block</span>.<span class="ruby-identifier">nil?</span>
301
+ <span class="ruby-keyword">end</span></pre>
302
+ </div>
303
+
304
+ </div>
305
+
306
+
307
+
308
+
309
+ </div>
310
+
311
+
312
+ </section>
313
+
314
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
315
+ <header>
316
+ <h3>Public Instance Methods</h3>
317
+ </header>
318
+
319
+
320
+ <div id="method-i-analyze-21" class="method-detail ">
321
+
322
+ <div class="method-heading">
323
+ <span class="method-name">analyze!</span><span
324
+ class="method-args">()</span>
325
+
326
+ <span class="method-click-advice">click to toggle source</span>
327
+
328
+ </div>
329
+
330
+
331
+ <div class="method-description">
332
+
333
+ <p>Alalyze evaluation results.</p>
334
+
335
+
336
+
337
+
338
+ <div class="method-source-code" id="analyze-21-source">
339
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 74</span>
340
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">analyze!</span>
341
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">critter</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">evaluator</span>.<span class="ruby-identifier">analyze_for_fitness!</span> <span class="ruby-identifier">critter</span> }
342
+ <span class="ruby-keyword">end</span></pre>
343
+ </div>
344
+
345
+ </div>
346
+
347
+
348
+
349
+
350
+ </div>
351
+
352
+
353
+ <div id="method-i-best_critter" class="method-detail ">
354
+
355
+ <div class="method-heading">
356
+ <span class="method-name">best_critter</span><span
357
+ class="method-args">()</span>
358
+
359
+ <span class="method-click-advice">click to toggle source</span>
360
+
361
+ </div>
362
+
363
+
364
+ <div class="method-description">
365
+
366
+ <p>The “best critter” is the critter with the lowest (closet to zero) fitness
367
+ rating.</p>
368
+
369
+
370
+
371
+
372
+ <div class="method-source-code" id="best_critter-source">
373
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 176</span>
374
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">best_critter</span>
375
+ <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">compare_func</span>.<span class="ruby-identifier">nil?</span>
376
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">min</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">compare_func</span>.(<span class="ruby-identifier">a</span>.<span class="ruby-identifier">fitness</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">fitness</span>) }
377
+ <span class="ruby-keyword">else</span>
378
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">min</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">fitness</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">fitness</span>}
379
+ <span class="ruby-keyword">end</span>
380
+ <span class="ruby-keyword">end</span></pre>
381
+ </div>
382
+
383
+ </div>
384
+
385
+
386
+
387
+
388
+ </div>
389
+
390
+
391
+ <div id="method-i-dump_s" class="method-detail ">
392
+
393
+ <div class="method-heading">
394
+ <span class="method-name">dump_s</span><span
395
+ class="method-args">()</span>
396
+
397
+ <span class="method-click-advice">click to toggle source</span>
398
+
399
+ </div>
400
+
401
+
402
+ <div class="method-description">
403
+
404
+
405
+
406
+
407
+
408
+
409
+ <div class="method-source-code" id="dump_s-source">
410
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 194</span>
411
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">dump_s</span>
412
+ <span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;\npopulation:\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">crit</span><span class="ruby-operator">|</span> <span class="ruby-identifier">crit</span>.<span class="ruby-identifier">dump_s</span> }.<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;\n&quot;</span>)
413
+ <span class="ruby-keyword">end</span></pre>
414
+ </div>
415
+
416
+ </div>
417
+
418
+
419
+
420
+
421
+ </div>
422
+
423
+
424
+ <div id="method-i-evaluate-21" class="method-detail ">
425
+
426
+ <div class="method-heading">
427
+ <span class="method-name">evaluate!</span><span
428
+ class="method-args">()</span>
429
+
430
+ <span class="method-click-advice">click to toggle source</span>
431
+
432
+ </div>
433
+
434
+
435
+ <div class="method-description">
436
+
437
+ <p>Called for each sequence.</p>
438
+
439
+
440
+
441
+
442
+ <div class="method-source-code" id="evaluate-21-source">
443
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 69</span>
444
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">evaluate!</span>
445
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">critter</span><span class="ruby-operator">|</span> <span class="ruby-identifier">critter</span>.<span class="ruby-identifier">evaluate!</span> }
446
+ <span class="ruby-keyword">end</span></pre>
447
+ </div>
448
+
449
+ </div>
450
+
451
+
452
+
453
+
454
+ </div>
455
+
456
+
457
+ <div id="method-i-evolve" class="method-detail ">
458
+
459
+ <div class="method-heading">
460
+ <span class="method-name">evolve</span><span
461
+ class="method-args">()</span>
462
+
463
+ <span class="method-click-advice">click to toggle source</span>
464
+
465
+ </div>
466
+
467
+
468
+ <div class="method-description">
469
+
470
+ <p>Call this after evaluation. Returns a newly-evolved population.</p>
471
+
472
+
473
+
474
+
475
+ <div class="method-source-code" id="evolve-source">
476
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 80</span>
477
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">evolve</span>
478
+ <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">evolver</span>.<span class="ruby-identifier">evolve</span> <span class="ruby-keyword">self</span>
479
+ <span class="ruby-keyword">end</span></pre>
480
+ </div>
481
+
482
+ </div>
483
+
484
+
485
+
486
+
487
+ </div>
488
+
489
+
490
+ <div id="method-i-express-21" class="method-detail ">
491
+
492
+ <div class="method-heading">
493
+ <span class="method-name">express!</span><span
494
+ class="method-args">()</span>
495
+
496
+ <span class="method-click-advice">click to toggle source</span>
497
+
498
+ </div>
499
+
500
+
501
+ <div class="method-description">
502
+
503
+ <p>Express the entire population.</p>
504
+
505
+
506
+
507
+
508
+ <div class="method-source-code" id="express-21-source">
509
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 64</span>
510
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">express!</span>
511
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">critter</span><span class="ruby-operator">|</span> <span class="ruby-identifier">critter</span>.<span class="ruby-identifier">express!</span> }
512
+ <span class="ruby-keyword">end</span></pre>
513
+ </div>
514
+
515
+ </div>
516
+
517
+
518
+
519
+
520
+ </div>
521
+
522
+
523
+ <div id="method-i-initialize_for_recurrence-21" class="method-detail ">
524
+
525
+ <div class="method-heading">
526
+ <span class="method-name">initialize_for_recurrence!</span><span
527
+ class="method-args">()</span>
528
+
529
+ <span class="method-click-advice">click to toggle source</span>
530
+
531
+ </div>
532
+
533
+
534
+ <div class="method-description">
535
+
536
+ <p>Make sure all critters are reset and prepared for recurrent network
537
+ evaluation.</p>
538
+
539
+
540
+
541
+
542
+ <div class="method-source-code" id="initialize_for_recurrence-21-source">
543
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 54</span>
544
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize_for_recurrence!</span>
545
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">crit</span><span class="ruby-operator">|</span> <span class="ruby-identifier">crit</span>.<span class="ruby-identifier">initialize_neurons!</span>}
546
+ <span class="ruby-keyword">end</span></pre>
547
+ </div>
548
+
549
+ </div>
550
+
551
+
552
+
553
+
554
+ </div>
555
+
556
+
557
+ <div id="method-i-mutate-21" class="method-detail ">
558
+
559
+ <div class="method-heading">
560
+ <span class="method-name">mutate!</span><span
561
+ class="method-args">()</span>
562
+
563
+ <span class="method-click-advice">click to toggle source</span>
564
+
565
+ </div>
566
+
567
+
568
+ <div class="method-description">
569
+
570
+ <p>Mutate the genes and neurons.</p>
571
+
572
+
573
+
574
+
575
+ <div class="method-source-code" id="mutate-21-source">
576
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 59</span>
577
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">mutate!</span>
578
+ <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">evolver</span>.<span class="ruby-identifier">mutate!</span> <span class="ruby-keyword">self</span>
579
+ <span class="ruby-keyword">end</span></pre>
580
+ </div>
581
+
582
+ </div>
583
+
584
+
585
+
586
+
587
+ </div>
588
+
589
+
590
+ <div id="method-i-report" class="method-detail ">
591
+
592
+ <div class="method-heading">
593
+ <span class="method-name">report</span><span
594
+ class="method-args">()</span>
595
+
596
+ <span class="method-click-advice">click to toggle source</span>
597
+
598
+ </div>
599
+
600
+
601
+ <div class="method-description">
602
+
603
+ <h2 id="method-i-report-label-Generate+a+report+on+the+state+of+this+population.">Generate a report on the state of this population.<span><a href="#method-i-report-label-Generate+a+report+on+the+state+of+this+population.">&para;</a> <a href="#documentation">&uarr;</a></span></h2>
604
+
605
+
606
+
607
+
608
+ <div class="method-source-code" id="report-source">
609
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 165</span>
610
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">report</span>
611
+ {
612
+ <span class="ruby-identifier">fitness</span><span class="ruby-operator">:</span> <span class="ruby-identifier">report_fitness</span>,
613
+ <span class="ruby-identifier">fitness_species</span><span class="ruby-operator">:</span> <span class="ruby-identifier">report_fitness_species</span>,
614
+ <span class="ruby-identifier">best_critter</span><span class="ruby-operator">:</span> <span class="ruby-identifier">report_best_fit</span>,
615
+ <span class="ruby-identifier">worst_critter</span><span class="ruby-operator">:</span> <span class="ruby-identifier">report_worst_fit</span>,
616
+ }
617
+ <span class="ruby-keyword">end</span></pre>
618
+ </div>
619
+
620
+ </div>
621
+
622
+
623
+
624
+
625
+ </div>
626
+
627
+
628
+ <div id="method-i-speciate-21" class="method-detail ">
629
+
630
+ <div class="method-heading">
631
+ <span class="method-name">speciate!</span><span
632
+ class="method-args">()</span>
633
+
634
+ <span class="method-click-advice">click to toggle source</span>
635
+
636
+ </div>
637
+
638
+
639
+ <div class="method-description">
640
+
641
+ <pre>Group critters into species
642
+ Note that the @species objects
643
+ have useful singleton methods:</pre>
644
+ <ul><li>
645
+ <p>@species.member? – checks all of the lists for membership, not just the
646
+ hash</p>
647
+ </li><li>
648
+ <p>@<a href="crit">species</a>.fitness – fitness of the entire species</p>
649
+ </li></ul>
650
+
651
+
652
+
653
+
654
+ <div class="method-source-code" id="speciate-21-source">
655
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 89</span>
656
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">speciate!</span>
657
+ <span class="ruby-comment"># We blow away existing species and create our own member? function</span>
658
+ <span class="ruby-ivar">@species</span> = {} <span class="ruby-comment"># lists keyed by representative critter</span>
659
+ <span class="ruby-keyword">def</span> <span class="ruby-ivar">@species</span>.<span class="ruby-identifier">member?</span>(<span class="ruby-identifier">crit</span>)
660
+ <span class="ruby-keyword">super</span>.<span class="ruby-identifier">member?</span>(<span class="ruby-identifier">crit</span>) <span class="ruby-keyword">or</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">li</span><span class="ruby-operator">|</span> <span class="ruby-identifier">li</span>.<span class="ruby-identifier">member?</span> <span class="ruby-identifier">crit</span>}.<span class="ruby-identifier">reduce</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">t1</span>, <span class="ruby-identifier">t2</span><span class="ruby-operator">|</span> <span class="ruby-identifier">t1</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">t2</span> }
661
+ <span class="ruby-keyword">end</span>
662
+
663
+ <span class="ruby-keyword">def</span> <span class="ruby-ivar">@species</span>.<span class="ruby-identifier">evaluate!</span>
664
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">sp</span><span class="ruby-operator">|</span>
665
+ <span class="ruby-identifier">sp</span>.<span class="ruby-identifier">fitness</span> = <span class="ruby-identifier">sp</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">crit</span><span class="ruby-operator">|</span> <span class="ruby-identifier">crit</span>.<span class="ruby-identifier">fitness</span>}.<span class="ruby-identifier">reduce</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">a</span>,<span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span><span class="ruby-operator">+</span><span class="ruby-identifier">b</span>} <span class="ruby-operator">/</span> <span class="ruby-identifier">sp</span>.<span class="ruby-identifier">size</span>
666
+ <span class="ruby-keyword">end</span>
667
+ <span class="ruby-keyword">end</span>
668
+
669
+ <span class="ruby-keyword">def</span> <span class="ruby-ivar">@species</span>.<span class="ruby-identifier">compactify!</span>(<span class="ruby-identifier">parm</span>)
670
+ <span class="ruby-identifier">mutt</span> = <span class="ruby-keyword">self</span>[<span class="ruby-value">:mutt</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">splist</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">k</span>, <span class="ruby-identifier">splist</span>]}.<span class="ruby-identifier">reject</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">splist</span><span class="ruby-operator">|</span>
671
+ <span class="ruby-identifier">splist</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">parm</span>.<span class="ruby-identifier">smallest_species</span>
672
+ }.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">splist</span><span class="ruby-operator">|</span>
673
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">delete</span> <span class="ruby-identifier">k</span>
674
+ <span class="ruby-identifier">splist</span>
675
+ }.<span class="ruby-identifier">flatten</span>
676
+
677
+ <span class="ruby-comment"># FIXME this code is not dry!!!!</span>
678
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">mutt</span>.<span class="ruby-identifier">fitness=</span>(<span class="ruby-identifier">fit</span>)
679
+ <span class="ruby-ivar">@fitness</span> = <span class="ruby-identifier">fit</span>
680
+ <span class="ruby-keyword">end</span>
681
+
682
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">mutt</span>.<span class="ruby-identifier">fitness</span>
683
+ <span class="ruby-ivar">@fitness</span>
684
+ <span class="ruby-keyword">end</span>
685
+
686
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">delete</span> <span class="ruby-value">:mutt</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>[<span class="ruby-value">:mutt</span>].<span class="ruby-identifier">empty?</span>
687
+ <span class="ruby-keyword">end</span>
688
+
689
+ <span class="ruby-comment"># Some convience parms</span>
690
+ <span class="ruby-identifier">parm</span> = <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">parms</span>
691
+
692
+ <span class="ruby-comment"># And so now we iterate...</span>
693
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">crit</span><span class="ruby-operator">|</span>
694
+ <span class="ruby-identifier">wearein</span> = <span class="ruby-keyword">false</span>
695
+ <span class="ruby-ivar">@species</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">ck</span>, <span class="ruby-identifier">list</span><span class="ruby-operator">|</span>
696
+ <span class="ruby-identifier">delta</span> = <span class="ruby-identifier">crit</span>.<span class="ruby-identifier">compare</span>(<span class="ruby-identifier">ck</span>)
697
+ <span class="ruby-comment">#log.debug { &quot;delta for #{crit} and #{ck} is #{delta}&quot; }</span>
698
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">delta</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">parm</span>.<span class="ruby-identifier">compatibility_threshold</span>
699
+ <span class="ruby-identifier">list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">crit</span>
700
+ <span class="ruby-identifier">wearein</span> = <span class="ruby-keyword">true</span>
701
+ <span class="ruby-keyword">break</span>
702
+ <span class="ruby-keyword">end</span>
703
+ <span class="ruby-keyword">end</span>
704
+
705
+ <span class="ruby-comment"># New species?</span>
706
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">wearein</span>
707
+ <span class="ruby-ivar">@species</span>[<span class="ruby-identifier">crit</span>] = <span class="ruby-identifier">species</span> = [<span class="ruby-identifier">crit</span>]
708
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">species</span>.<span class="ruby-identifier">fitness=</span>(<span class="ruby-identifier">fit</span>)
709
+ <span class="ruby-ivar">@fitness</span> = <span class="ruby-identifier">fit</span>
710
+ <span class="ruby-keyword">end</span>
711
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">species</span>.<span class="ruby-identifier">fitness</span>
712
+ <span class="ruby-ivar">@fitness</span>
713
+ <span class="ruby-keyword">end</span>
714
+ <span class="ruby-keyword">end</span>
715
+ <span class="ruby-keyword">end</span>
716
+
717
+ <span class="ruby-comment"># Compactify the species if less than smallest_species</span>
718
+ <span class="ruby-ivar">@species</span>.<span class="ruby-identifier">compactify!</span> <span class="ruby-identifier">parm</span>
719
+
720
+ <span class="ruby-comment"># And now we evaluate all species for fitness...</span>
721
+ <span class="ruby-ivar">@species</span>.<span class="ruby-identifier">evaluate!</span>
722
+
723
+ <span class="ruby-comment"># Dump for debugging reasons</span>
724
+ <span class="ruby-ivar">@species</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">sp</span><span class="ruby-operator">|</span>
725
+ <span class="ruby-identifier">log</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">&quot;&gt;&gt; Species #{k} has #{sp.size} members with a #{sp.fitness} fitness&quot;</span>
726
+ <span class="ruby-keyword">end</span>
727
+
728
+ <span class="ruby-keyword">end</span></pre>
729
+ </div>
730
+
731
+ </div>
732
+
733
+
734
+
735
+
736
+ </div>
737
+
738
+
739
+ <div id="method-i-worst_critter" class="method-detail ">
740
+
741
+ <div class="method-heading">
742
+ <span class="method-name">worst_critter</span><span
743
+ class="method-args">()</span>
744
+
745
+ <span class="method-click-advice">click to toggle source</span>
746
+
747
+ </div>
748
+
749
+
750
+ <div class="method-description">
751
+
752
+ <p>The “worst critter” is the critter with the highest (away from zero)
753
+ fitness rating.</p>
754
+
755
+
756
+
757
+
758
+ <div class="method-source-code" id="worst_critter-source">
759
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 186</span>
760
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">worst_critter</span>
761
+ <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">compare_func</span>.<span class="ruby-identifier">nil?</span>
762
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">max</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">compare_func</span>.(<span class="ruby-identifier">a</span>.<span class="ruby-identifier">fitness</span>, <span class="ruby-identifier">b</span>.<span class="ruby-identifier">fitness</span>) }
763
+ <span class="ruby-keyword">else</span>
764
+ <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">max</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">a</span>, <span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">fitness</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">fitness</span>}
765
+ <span class="ruby-keyword">end</span>
766
+ <span class="ruby-keyword">end</span></pre>
767
+ </div>
768
+
769
+ </div>
770
+
771
+
772
+
773
+
774
+ </div>
775
+
776
+
777
+ </section>
778
+
779
+ <section id="protected-instance-5Buntitled-5D-method-details" class="method-section">
780
+ <header>
781
+ <h3>Protected Instance Methods</h3>
782
+ </header>
783
+
784
+
785
+ <div id="method-i-report_best_fit" class="method-detail ">
786
+
787
+ <div class="method-heading">
788
+ <span class="method-name">report_best_fit</span><span
789
+ class="method-args">()</span>
790
+
791
+ <span class="method-click-advice">click to toggle source</span>
792
+
793
+ </div>
794
+
795
+
796
+ <div class="method-description">
797
+
798
+ <p>Find the best fit critter</p>
799
+
800
+
801
+
802
+
803
+ <div class="method-source-code" id="report_best_fit-source">
804
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 217</span>
805
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">report_best_fit</span>
806
+ <span class="ruby-identifier">best_critter</span>.<span class="ruby-identifier">phenotype</span>.<span class="ruby-identifier">code</span>
807
+ <span class="ruby-keyword">end</span></pre>
808
+ </div>
809
+
810
+ </div>
811
+
812
+
813
+
814
+
815
+ </div>
816
+
817
+
818
+ <div id="method-i-report_fitness" class="method-detail ">
819
+
820
+ <div class="method-heading">
821
+ <span class="method-name">report_fitness</span><span
822
+ class="method-args">()</span>
823
+
824
+ <span class="method-click-advice">click to toggle source</span>
825
+
826
+ </div>
827
+
828
+
829
+ <div class="method-description">
830
+
831
+ <p>report on many fitness metrics</p>
832
+
833
+
834
+
835
+
836
+ <div class="method-source-code" id="report_fitness-source">
837
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 200</span>
838
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">report_fitness</span>
839
+ {
840
+ <span class="ruby-identifier">overall</span><span class="ruby-operator">:</span> <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">critter</span><span class="ruby-operator">|</span> <span class="ruby-identifier">critter</span>.<span class="ruby-identifier">fitness</span>}.<span class="ruby-identifier">reduce</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">m</span>, <span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">m</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">f</span>} <span class="ruby-operator">/</span> <span class="ruby-ivar">@critters</span>.<span class="ruby-identifier">size</span>,
841
+ <span class="ruby-identifier">best</span><span class="ruby-operator">:</span> <span class="ruby-identifier">best_critter</span>.<span class="ruby-identifier">fitness</span>,
842
+ <span class="ruby-identifier">worst</span><span class="ruby-operator">:</span> <span class="ruby-identifier">worst_critter</span>.<span class="ruby-identifier">fitness</span>,
843
+ }
844
+ <span class="ruby-keyword">end</span></pre>
845
+ </div>
846
+
847
+ </div>
848
+
849
+
850
+
851
+
852
+ </div>
853
+
854
+
855
+ <div id="method-i-report_fitness_species" class="method-detail ">
856
+
857
+ <div class="method-heading">
858
+ <span class="method-name">report_fitness_species</span><span
859
+ class="method-args">()</span>
860
+
861
+ <span class="method-click-advice">click to toggle source</span>
862
+
863
+ </div>
864
+
865
+
866
+ <div class="method-description">
867
+
868
+ <p>report on the best and worst species</p>
869
+
870
+
871
+
872
+
873
+ <div class="method-source-code" id="report_fitness_species-source">
874
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 209</span>
875
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">report_fitness_species</span>
876
+ {
877
+ <span class="ruby-identifier">best</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>,
878
+ <span class="ruby-identifier">worst</span><span class="ruby-operator">:</span> <span class="ruby-keyword">nil</span>,
879
+ }
880
+ <span class="ruby-keyword">end</span></pre>
881
+ </div>
882
+
883
+ </div>
884
+
885
+
886
+
887
+
888
+ </div>
889
+
890
+
891
+ <div id="method-i-report_worst_fit" class="method-detail ">
892
+
893
+ <div class="method-heading">
894
+ <span class="method-name">report_worst_fit</span><span
895
+ class="method-args">()</span>
896
+
897
+ <span class="method-click-advice">click to toggle source</span>
898
+
899
+ </div>
900
+
901
+
902
+ <div class="method-description">
903
+
904
+ <p>Find the worst fit critter</p>
905
+
906
+
907
+
908
+
909
+ <div class="method-source-code" id="report_worst_fit-source">
910
+ <pre><span class="ruby-comment"># File lib/rubyneat/population.rb, line 222</span>
911
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">report_worst_fit</span>
912
+ <span class="ruby-identifier">worst_critter</span>.<span class="ruby-identifier">phenotype</span>.<span class="ruby-identifier">code</span>
913
+ <span class="ruby-keyword">end</span></pre>
914
+ </div>
915
+
916
+ </div>
917
+
918
+
919
+
920
+
921
+ </div>
922
+
923
+
924
+ </section>
925
+
926
+ </section>
927
+ </main>
928
+
929
+
930
+ <footer id="validator-badges" role="contentinfo">
931
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
932
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.1.
933
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
934
+ </footer>
935
+