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.
- checksums.yaml +7 -0
- data/.directory +4 -0
- data/.gitignore.orig +20 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/dictionaries/trader.xml +3 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/misc.xml +5 -0
- data/.idea/modules.xml +9 -0
- data/.idea/rubyneat.iml +197 -0
- data/.idea/runConfigurations/invpend_neat.xml +26 -0
- data/.idea/runConfigurations/sigdebug_neat.xml +24 -0
- data/.idea/runConfigurations/xor_neat.xml +26 -0
- data/.idea/runConfigurations/xordebug_neat.xml +24 -0
- data/.idea/runConfigurations/xorsin_neat.xml +24 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +7 -0
- data/.idea/workspace.xml +1124 -0
- data/.semver +5 -0
- data/.yardoc/checksums +11 -0
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/Gemfile +32 -0
- data/Gemfile.lock +135 -0
- data/Gemfile.lock.orig +147 -0
- data/Guardfile +8 -0
- data/Rakefile +61 -0
- data/bin/neat +83 -0
- data/config/application.rb +5 -0
- data/doc/ControllerPoint.html +125 -0
- data/doc/CuteA.html +286 -0
- data/doc/CuteB.html +297 -0
- data/doc/DSL.html +883 -0
- data/doc/NEAT/BasicNeuronTypes/BiasNeuron.html +518 -0
- data/doc/NEAT/BasicNeuronTypes/CosineNeuron.html +274 -0
- data/doc/NEAT/BasicNeuronTypes/InputNeuron.html +366 -0
- data/doc/NEAT/BasicNeuronTypes/SigmoidNeuron.html +275 -0
- data/doc/NEAT/BasicNeuronTypes/SineNeuron.html +274 -0
- data/doc/NEAT/BasicNeuronTypes/TanhNeuron.html +274 -0
- data/doc/NEAT/BasicNeuronTypes.html +136 -0
- data/doc/NEAT/Controller/NeatSettings.html +3985 -0
- data/doc/NEAT/Controller.html +2490 -0
- data/doc/NEAT/Critter/Genotype/Gene.html +979 -0
- data/doc/NEAT/Critter/Genotype.html +1601 -0
- data/doc/NEAT/Critter/Phenotype.html +603 -0
- data/doc/NEAT/Critter.html +1037 -0
- data/doc/NEAT/DSL.html +1255 -0
- data/doc/NEAT/Evaluator.html +420 -0
- data/doc/NEAT/Evolver/CritterOp.html +551 -0
- data/doc/NEAT/Evolver.html +602 -0
- data/doc/NEAT/Expressor.html +327 -0
- data/doc/NEAT/Graph/DependencyResolver.html +478 -0
- data/doc/NEAT/Graph/GraphException.html +123 -0
- data/doc/NEAT/Graph.html +402 -0
- data/doc/NEAT/NeatException.html +123 -0
- data/doc/NEAT/NeatOb.html +567 -0
- data/doc/NEAT/Neuron.html +1067 -0
- data/doc/NEAT/Operator.html +162 -0
- data/doc/NEAT/Population.html +1961 -0
- data/doc/NEAT/Trait.html +169 -0
- data/doc/NEAT.html +588 -0
- data/doc/_index.html +373 -0
- data/doc/class_list.html +54 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file_list.html +53 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +373 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +178 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +1415 -0
- data/doc/top-level-namespace.html +164 -0
- data/foo/foo_aquarium_example.rb +38 -0
- data/foo/foo_gosu.rb +99 -0
- data/foo/foo_rubygoo.rb +104 -0
- data/foo/foo_sdl.rb +34 -0
- data/foo/icon.png +0 -0
- data/lib/rubyneat/critter.rb +374 -0
- data/lib/rubyneat/default_neat.rb +10 -0
- data/lib/rubyneat/dsl.rb +130 -0
- data/lib/rubyneat/evaluator.rb +51 -0
- data/lib/rubyneat/evolver.rb +315 -0
- data/lib/rubyneat/expressor.rb +110 -0
- data/lib/rubyneat/graph.rb +95 -0
- data/lib/rubyneat/neuron.rb +152 -0
- data/lib/rubyneat/population.rb +227 -0
- data/lib/rubyneat/rubyneat.rb +429 -0
- data/lib/rubyneat.rb +8 -0
- data/neater/invpend_neat.rb +150 -0
- data/neater/rnlib/inverted_pendulum.rb +380 -0
- data/neater/rnlib/xor.rb +10 -0
- data/neater/sigdebug_neat.rb +136 -0
- data/neater/xor_neat.rb +137 -0
- data/neater/xoranalog_neat.rb +138 -0
- data/neater/xorsin_neat.rb +143 -0
- data/projectFilesBackup/.idea/rubyneat.iml +180 -0
- data/public/.directory +4 -0
- data/public/background.png +0 -0
- data/public/background.xcf +0 -0
- data/public/cart.png +0 -0
- data/public/cart.xcf +0 -0
- data/public/metalpoles_molton_ball_l.jpg +0 -0
- data/public/old_background.png +0 -0
- data/public/pointer.png +0 -0
- data/public/pointer.xcf +0 -0
- data/public/pole.kra +0 -0
- data/public/pole.png +0 -0
- data/public/pole.xcf +0 -0
- data/public/wheel-of-year-stone-DD-131-WOYS.jpg +0 -0
- data/public/wheel.png +0 -0
- data/public/wheel.xcf +0 -0
- data/public/wood-planks-texture.jpg +0 -0
- data/rdoc/ControllerPoint.html +116 -0
- data/rdoc/CuteA.html +177 -0
- data/rdoc/CuteB.html +178 -0
- data/rdoc/DSLSetup.html +177 -0
- data/rdoc/GameTestWindow.html +242 -0
- data/rdoc/GameWindow.html +292 -0
- data/rdoc/Gemfile.html +215 -0
- data/rdoc/Gemfile_lock.html +327 -0
- data/rdoc/GraphTest.html +210 -0
- data/rdoc/Guardfile.html +198 -0
- data/rdoc/InvertedPendulum/Cart.html +668 -0
- data/rdoc/InvertedPendulum/DSL.html +259 -0
- data/rdoc/InvertedPendulum/InvPendWindow.html +402 -0
- data/rdoc/InvertedPendulum.html +198 -0
- data/rdoc/Logger.html +98 -0
- data/rdoc/NEAT/BasicNeuronTypes/BiasNeuron.html +265 -0
- data/rdoc/NEAT/BasicNeuronTypes/CosineNeuron.html +162 -0
- data/rdoc/NEAT/BasicNeuronTypes/InputNeuron.html +206 -0
- data/rdoc/NEAT/BasicNeuronTypes/SigmoidNeuron.html +162 -0
- data/rdoc/NEAT/BasicNeuronTypes/SineNeuron.html +162 -0
- data/rdoc/NEAT/BasicNeuronTypes/TanhNeuron.html +161 -0
- data/rdoc/NEAT/BasicNeuronTypes.html +107 -0
- data/rdoc/NEAT/Controller/NeatSettings.html +880 -0
- data/rdoc/NEAT/Controller.html +729 -0
- data/rdoc/NEAT/Critter/Genotype/Gene.html +457 -0
- data/rdoc/NEAT/Critter/Genotype.html +735 -0
- data/rdoc/NEAT/Critter/Phenotype.html +330 -0
- data/rdoc/NEAT/Critter.html +489 -0
- data/rdoc/NEAT/DSL.html +729 -0
- data/rdoc/NEAT/Evaluator.html +256 -0
- data/rdoc/NEAT/Evolver/CritterOp.html +349 -0
- data/rdoc/NEAT/Evolver.html +891 -0
- data/rdoc/NEAT/Expressor.html +402 -0
- data/rdoc/NEAT/Graph/DependencyResolver.html +291 -0
- data/rdoc/NEAT/Graph/GraphException.html +105 -0
- data/rdoc/NEAT/Graph.html +263 -0
- data/rdoc/NEAT/NeatException.html +105 -0
- data/rdoc/NEAT/NeatOb.html +325 -0
- data/rdoc/NEAT/Neuron.html +481 -0
- data/rdoc/NEAT/Operator.html +109 -0
- data/rdoc/NEAT/Population.html +935 -0
- data/rdoc/NEAT/Trait.html +117 -0
- data/rdoc/NEAT.html +422 -0
- data/rdoc/Object.html +384 -0
- data/rdoc/Phi.html +98 -0
- data/rdoc/Player.html +383 -0
- data/rdoc/Rakefile.html +254 -0
- data/rdoc/RubyNEAT/Application.html +105 -0
- data/rdoc/RubyNEAT.html +98 -0
- data/rdoc/SDL/Event2.html +98 -0
- data/rdoc/SDL.html +98 -0
- data/rdoc/Vector.html +195 -0
- data/rdoc/created.rid +125 -0
- data/rdoc/doc/ControllerPoint_html.html +299 -0
- data/rdoc/doc/CuteA_html.html +438 -0
- data/rdoc/doc/CuteB_html.html +436 -0
- data/rdoc/doc/DSL_html.html +992 -0
- data/rdoc/doc/NEAT/BasicNeuronTypes/BiasNeuron_html.html +617 -0
- data/rdoc/doc/NEAT/BasicNeuronTypes/CosineNeuron_html.html +413 -0
- data/rdoc/doc/NEAT/BasicNeuronTypes/InputNeuron_html.html +498 -0
- data/rdoc/doc/NEAT/BasicNeuronTypes/SigmoidNeuron_html.html +413 -0
- data/rdoc/doc/NEAT/BasicNeuronTypes/SineNeuron_html.html +413 -0
- data/rdoc/doc/NEAT/BasicNeuronTypes/TanhNeuron_html.html +412 -0
- data/rdoc/doc/NEAT/BasicNeuronTypes_html.html +310 -0
- data/rdoc/doc/NEAT/Controller/NeatSettings_html.html +3324 -0
- data/rdoc/doc/NEAT/Controller_html.html +2212 -0
- data/rdoc/doc/NEAT/Critter/Genotype/Gene_html.html +997 -0
- data/rdoc/doc/NEAT/Critter/Genotype_html.html +1556 -0
- data/rdoc/doc/NEAT/Critter/Phenotype_html.html +687 -0
- data/rdoc/doc/NEAT/Critter_html.html +1037 -0
- data/rdoc/doc/NEAT/DSL_html.html +1349 -0
- data/rdoc/doc/NEAT/Evaluator_html.html +556 -0
- data/rdoc/doc/NEAT/Evolver/CritterOp_html.html +690 -0
- data/rdoc/doc/NEAT/Evolver_html.html +677 -0
- data/rdoc/doc/NEAT/Expressor_html.html +468 -0
- data/rdoc/doc/NEAT/Graph/DependencyResolver_html.html +598 -0
- data/rdoc/doc/NEAT/Graph/GraphException_html.html +299 -0
- data/rdoc/doc/NEAT/Graph_html.html +527 -0
- data/rdoc/doc/NEAT/NeatException_html.html +299 -0
- data/rdoc/doc/NEAT/NeatOb_html.html +671 -0
- data/rdoc/doc/NEAT/Neuron_html.html +1095 -0
- data/rdoc/doc/NEAT/Operator_html.html +337 -0
- data/rdoc/doc/NEAT/Population_html.html +1795 -0
- data/rdoc/doc/NEAT/Trait_html.html +344 -0
- data/rdoc/doc/NEAT_html.html +736 -0
- data/rdoc/doc/_index_html.html +559 -0
- data/rdoc/doc/class_list_html.html +369 -0
- data/rdoc/doc/css/common_css.html +188 -0
- data/rdoc/doc/css/full_list_css.html +243 -0
- data/rdoc/doc/css/style_css.html +530 -0
- data/rdoc/doc/file_list_html.html +240 -0
- data/rdoc/doc/frames_html.html +217 -0
- data/rdoc/doc/index_html.html +559 -0
- data/rdoc/doc/js/app_js.html +423 -0
- data/rdoc/doc/js/full_list_js.html +372 -0
- data/rdoc/doc/js/jquery_js.html +1536 -0
- data/rdoc/doc/method_list_html.html +1375 -0
- data/rdoc/doc/top-level-namespace_html.html +317 -0
- data/rdoc/fonts/Lato-Light.ttf +0 -0
- data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
- data/rdoc/fonts/Lato-Regular.ttf +0 -0
- data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
- data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/rdoc/fonts.css +167 -0
- data/rdoc/images/add.png +0 -0
- data/rdoc/images/arrow_up.png +0 -0
- data/rdoc/images/brick.png +0 -0
- data/rdoc/images/brick_link.png +0 -0
- data/rdoc/images/bug.png +0 -0
- data/rdoc/images/bullet_black.png +0 -0
- data/rdoc/images/bullet_toggle_minus.png +0 -0
- data/rdoc/images/bullet_toggle_plus.png +0 -0
- data/rdoc/images/date.png +0 -0
- data/rdoc/images/delete.png +0 -0
- data/rdoc/images/find.png +0 -0
- data/rdoc/images/loadingAnimation.gif +0 -0
- data/rdoc/images/macFFBgHack.png +0 -0
- data/rdoc/images/package.png +0 -0
- data/rdoc/images/page_green.png +0 -0
- data/rdoc/images/page_white_text.png +0 -0
- data/rdoc/images/page_white_width.png +0 -0
- data/rdoc/images/plugin.png +0 -0
- data/rdoc/images/ruby.png +0 -0
- data/rdoc/images/tag_blue.png +0 -0
- data/rdoc/images/tag_green.png +0 -0
- data/rdoc/images/transparent.png +0 -0
- data/rdoc/images/wrench.png +0 -0
- data/rdoc/images/wrench_orange.png +0 -0
- data/rdoc/images/zoom.png +0 -0
- data/rdoc/index.html +282 -0
- data/rdoc/js/darkfish.js +140 -0
- data/rdoc/js/jquery.js +18 -0
- data/rdoc/js/navigation.js +142 -0
- data/rdoc/js/search.js +109 -0
- data/rdoc/js/search_index.js +1 -0
- data/rdoc/js/searcher.js +228 -0
- data/rdoc/rdoc.css +580 -0
- data/rdoc/rubyneat_gemspec.html +387 -0
- data/rdoc/table_of_contents.html +2502 -0
- data/rdoc/xordebug_log.html +170598 -0
- data/rdoc/xorsin_log.html +22569 -0
- data/rubyneat.gemspec +347 -0
- data/rubyneat.gemspec.orig +375 -0
- data/spec/lib/rubyneat/rubyneat_spec.rb +132 -0
- 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.">¶</a> <a href="#documentation">↑</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">&</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"><=></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">"\npopulation:\n"</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">"\n"</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.">¶</a> <a href="#documentation">↑</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">>=</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 { "delta for #{crit} and #{ck} is #{delta}" }</span>
|
|
698
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">delta</span> <span class="ruby-operator"><</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"><<</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">">> Species #{k} has #{sp.size} members with a #{sp.fitness} fitness"</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"><=></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
|
+
|