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,735 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
|
|
7
|
+
<title>class NEAT::Critter::Genotype - 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
|
+
<div class="nav-section">
|
|
58
|
+
<h3>Table of Contents</h3>
|
|
59
|
+
|
|
60
|
+
<ul class="link-list" role="directory">
|
|
61
|
+
<li><a href="#class-NEAT::Critter::Genotype-label-Genotype+part+of+the+Critter">Genotype part of the Critter</a>
|
|
62
|
+
<li><a href="#class-NEAT::Critter::Genotype-label-Notes">Notes</a>
|
|
63
|
+
</ul>
|
|
64
|
+
</div>
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
<div id="class-metadata">
|
|
68
|
+
|
|
69
|
+
<div id="parent-class-section" class="nav-section">
|
|
70
|
+
<h3>Parent</h3>
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
<p class="link">NeatOb
|
|
74
|
+
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
<!-- Method Quickref -->
|
|
80
|
+
<div id="method-list-section" class="nav-section">
|
|
81
|
+
<h3>Methods</h3>
|
|
82
|
+
|
|
83
|
+
<ul class="link-list" role="directory">
|
|
84
|
+
|
|
85
|
+
<li class="calls-super" ><a href="#method-c-new">::new</a>
|
|
86
|
+
|
|
87
|
+
<li ><a href="#method-i-add_genes">#add_genes</a>
|
|
88
|
+
|
|
89
|
+
<li ><a href="#method-i-add_neurons">#add_neurons</a>
|
|
90
|
+
|
|
91
|
+
<li ><a href="#method-i-dump_s">#dump_s</a>
|
|
92
|
+
|
|
93
|
+
<li ><a href="#method-i-fitness_cost">#fitness_cost</a>
|
|
94
|
+
|
|
95
|
+
<li ><a href="#method-i-forget-21">#forget!</a>
|
|
96
|
+
|
|
97
|
+
<li ><a href="#method-i-innervate-21">#innervate!</a>
|
|
98
|
+
|
|
99
|
+
<li ><a href="#method-i-neucleate">#neucleate</a>
|
|
100
|
+
|
|
101
|
+
<li ><a href="#method-i-nuke_redundancies-21">#nuke_redundancies!</a>
|
|
102
|
+
|
|
103
|
+
<li ><a href="#method-i-prune-21">#prune!</a>
|
|
104
|
+
|
|
105
|
+
<li ><a href="#method-i-wire-21">#wire!</a>
|
|
106
|
+
|
|
107
|
+
</ul>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
</div>
|
|
111
|
+
</nav>
|
|
112
|
+
|
|
113
|
+
<main role="main" aria-labelledby="class-NEAT::Critter::Genotype">
|
|
114
|
+
<h1 id="class-NEAT::Critter::Genotype" class="class">
|
|
115
|
+
class NEAT::Critter::Genotype
|
|
116
|
+
</h1>
|
|
117
|
+
|
|
118
|
+
<section class="description">
|
|
119
|
+
|
|
120
|
+
<h1 id="class-NEAT::Critter::Genotype-label-Genotype+part+of+the+Critter"><a href="Genotype.html">Genotype</a> part of the <a href="../Critter.html">Critter</a><span><a href="#class-NEAT::Critter::Genotype-label-Genotype+part+of+the+Critter">¶</a> <a href="#documentation">↑</a></span></h1>
|
|
121
|
+
|
|
122
|
+
<pre>List of connections, basically.
|
|
123
|
+
|
|
124
|
+
Also, basic phentypic expression (which may be overriden by
|
|
125
|
+
the expressor)</pre>
|
|
126
|
+
|
|
127
|
+
<h1 id="class-NEAT::Critter::Genotype-label-Notes">Notes<span><a href="#class-NEAT::Critter::Genotype-label-Notes">¶</a> <a href="#documentation">↑</a></span></h1>
|
|
128
|
+
|
|
129
|
+
<pre>Currently, all lists of neurons and genes are Hashes. The
|
|
130
|
+
neurons are indexed by their own names, and the genes
|
|
131
|
+
are indexed by their innovation numbers.</pre>
|
|
132
|
+
|
|
133
|
+
</section>
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
<section id="5Buntitled-5D" class="documentation-section">
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
<section class="attribute-method-details" class="method-section">
|
|
147
|
+
<header>
|
|
148
|
+
<h3>Attributes</h3>
|
|
149
|
+
</header>
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
<div id="attribute-i-critter" class="method-detail">
|
|
153
|
+
<div class="method-heading attribute-method-heading">
|
|
154
|
+
<span class="method-name">critter</span><span
|
|
155
|
+
class="attribute-access-type">[RW]</span>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
<div class="method-description">
|
|
159
|
+
|
|
160
|
+
<p><a href="../Critter.html">Critter</a> to which we belong</p>
|
|
161
|
+
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<div id="attribute-i-dangling_neurons" class="method-detail">
|
|
166
|
+
<div class="method-heading attribute-method-heading">
|
|
167
|
+
<span class="method-name">dangling_neurons</span><span
|
|
168
|
+
class="attribute-access-type">[RW]</span>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
<div class="method-description">
|
|
172
|
+
|
|
173
|
+
<p>This will be set to true if there are dangling neurons.</p>
|
|
174
|
+
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
|
|
178
|
+
<div id="attribute-i-dangling_neurons-3F" class="method-detail">
|
|
179
|
+
<div class="method-heading attribute-method-heading">
|
|
180
|
+
<span class="method-name">dangling_neurons?</span><span
|
|
181
|
+
class="attribute-access-type">[RW]</span>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div class="method-description">
|
|
185
|
+
|
|
186
|
+
<p>This will be set to true if there are dangling neurons.</p>
|
|
187
|
+
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
|
|
191
|
+
<div id="attribute-i-genes" class="method-detail">
|
|
192
|
+
<div class="method-heading attribute-method-heading">
|
|
193
|
+
<span class="method-name">genes</span><span
|
|
194
|
+
class="attribute-access-type">[RW]</span>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<div class="method-description">
|
|
198
|
+
|
|
199
|
+
<p>Genes keyed by innovation numbers</p>
|
|
200
|
+
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<div id="attribute-i-neural_gene_map" class="method-detail">
|
|
205
|
+
<div class="method-heading attribute-method-heading">
|
|
206
|
+
<span class="method-name">neural_gene_map</span><span
|
|
207
|
+
class="attribute-access-type">[R]</span>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
<div class="method-description">
|
|
211
|
+
|
|
212
|
+
<p>Map neurons to the genes that marks them as output { oneu_name => [
|
|
213
|
+
gene_1, gene_2,… gene_n], …} Just take the in_neuron name and the weight to
|
|
214
|
+
do the call to that neuron function with the appropriate weights</p>
|
|
215
|
+
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<div id="attribute-i-neural_inputs" class="method-detail">
|
|
220
|
+
<div class="method-heading attribute-method-heading">
|
|
221
|
+
<span class="method-name">neural_inputs</span><span
|
|
222
|
+
class="attribute-access-type">[R]</span>
|
|
223
|
+
</div>
|
|
224
|
+
|
|
225
|
+
<div class="method-description">
|
|
226
|
+
|
|
227
|
+
<p>Instantiations of neural inputs and outputs</p>
|
|
228
|
+
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div id="attribute-i-neural_outputs" class="method-detail">
|
|
233
|
+
<div class="method-heading attribute-method-heading">
|
|
234
|
+
<span class="method-name">neural_outputs</span><span
|
|
235
|
+
class="attribute-access-type">[R]</span>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
<div class="method-description">
|
|
239
|
+
|
|
240
|
+
<p>Instantiations of neural inputs and outputs</p>
|
|
241
|
+
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
|
|
245
|
+
<div id="attribute-i-neurons" class="method-detail">
|
|
246
|
+
<div class="method-heading attribute-method-heading">
|
|
247
|
+
<span class="method-name">neurons</span><span
|
|
248
|
+
class="attribute-access-type">[RW]</span>
|
|
249
|
+
</div>
|
|
250
|
+
|
|
251
|
+
<div class="method-description">
|
|
252
|
+
|
|
253
|
+
<p>List of neurons hashed by name</p>
|
|
254
|
+
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
</section>
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
|
|
263
|
+
<header>
|
|
264
|
+
<h3>Public Class Methods</h3>
|
|
265
|
+
</header>
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
<div id="method-c-new" class="method-detail ">
|
|
269
|
+
|
|
270
|
+
<div class="method-heading">
|
|
271
|
+
<span class="method-name">new</span><span
|
|
272
|
+
class="method-args">(critter, mating = false, &block)</span>
|
|
273
|
+
|
|
274
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
275
|
+
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
<div class="method-description">
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
<div class="method-calls-super">
|
|
285
|
+
Calls superclass method
|
|
286
|
+
|
|
287
|
+
</div>
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
<div class="method-source-code" id="new-source">
|
|
292
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 88</span>
|
|
293
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">critter</span>, <span class="ruby-identifier">mating</span> = <span class="ruby-keyword">false</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
|
294
|
+
<span class="ruby-keyword">super</span> <span class="ruby-identifier">critter</span>.<span class="ruby-identifier">controller</span>
|
|
295
|
+
<span class="ruby-ivar">@critter</span> = <span class="ruby-identifier">critter</span>
|
|
296
|
+
|
|
297
|
+
<span class="ruby-comment"># Initialize basic structures</span>
|
|
298
|
+
<span class="ruby-ivar">@genes</span> = <span class="ruby-keyword">nil</span>
|
|
299
|
+
<span class="ruby-ivar">@neural_inputs</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-ivar">@critter</span>.<span class="ruby-identifier">population</span>.<span class="ruby-identifier">input_neurons</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">sym</span>, <span class="ruby-identifier">ineu</span><span class="ruby-operator">|</span>
|
|
300
|
+
[<span class="ruby-identifier">sym</span>, <span class="ruby-identifier">ineu</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@controller</span>, <span class="ruby-identifier">sym</span>)]
|
|
301
|
+
}]
|
|
302
|
+
|
|
303
|
+
<span class="ruby-ivar">@neural_outputs</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-ivar">@critter</span>.<span class="ruby-identifier">population</span>.<span class="ruby-identifier">output_neurons</span>.<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">sym</span>, <span class="ruby-identifier">ineu</span><span class="ruby-operator">|</span>
|
|
304
|
+
[<span class="ruby-identifier">sym</span>, <span class="ruby-identifier">ineu</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@controller</span>, <span class="ruby-identifier">sym</span>)]
|
|
305
|
+
}]
|
|
306
|
+
<span class="ruby-ivar">@neurons</span> = <span class="ruby-ivar">@neural_inputs</span>.<span class="ruby-identifier">clone</span> <span class="ruby-comment"># this must be a shallow clone!</span>
|
|
307
|
+
<span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">merge!</span> <span class="ruby-ivar">@neural_outputs</span>
|
|
308
|
+
|
|
309
|
+
<span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">evolver</span>.<span class="ruby-identifier">gen_initial_genes!</span>(<span class="ruby-keyword">self</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">mating</span>
|
|
310
|
+
<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>
|
|
311
|
+
<span class="ruby-keyword">end</span></pre>
|
|
312
|
+
</div>
|
|
313
|
+
|
|
314
|
+
</div>
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
</div>
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
</section>
|
|
323
|
+
|
|
324
|
+
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
|
|
325
|
+
<header>
|
|
326
|
+
<h3>Public Instance Methods</h3>
|
|
327
|
+
</header>
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
<div id="method-i-add_genes" class="method-detail ">
|
|
331
|
+
|
|
332
|
+
<div class="method-heading">
|
|
333
|
+
<span class="method-name">add_genes</span><span
|
|
334
|
+
class="method-args">(*genes)</span>
|
|
335
|
+
|
|
336
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
337
|
+
|
|
338
|
+
</div>
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
<div class="method-description">
|
|
342
|
+
|
|
343
|
+
<p>Genes added here MUST correspond to pre-existing neurons. Be sure to do <a
|
|
344
|
+
href="Genotype.html#method-i-add_neurons">#add_neurons</a> first!!!!</p>
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
<div class="method-source-code" id="add_genes-source">
|
|
350
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 163</span>
|
|
351
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_genes</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">genes</span>)
|
|
352
|
+
<span class="ruby-identifier">genes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">gene</span><span class="ruby-operator">|</span>
|
|
353
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">NeatException</span>.<span class="ruby-identifier">new</span> <span class="ruby-node">"Neuron #{gene.in_neuron} missing"</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">member?</span> <span class="ruby-identifier">gene</span>.<span class="ruby-identifier">in_neuron</span>
|
|
354
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">NeatException</span>.<span class="ruby-identifier">new</span> <span class="ruby-node">"Neuron #{gene.out_neuron} missing"</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">member?</span> <span class="ruby-identifier">gene</span>.<span class="ruby-identifier">out_neuron</span>
|
|
355
|
+
<span class="ruby-ivar">@genes</span>[<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">innovation</span>] = <span class="ruby-identifier">gene</span>
|
|
356
|
+
<span class="ruby-keyword">end</span>
|
|
357
|
+
<span class="ruby-keyword">end</span></pre>
|
|
358
|
+
</div>
|
|
359
|
+
|
|
360
|
+
</div>
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
</div>
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
<div id="method-i-add_neurons" class="method-detail ">
|
|
369
|
+
|
|
370
|
+
<div class="method-heading">
|
|
371
|
+
<span class="method-name">add_neurons</span><span
|
|
372
|
+
class="method-args">(*neus)</span>
|
|
373
|
+
|
|
374
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
375
|
+
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
<div class="method-description">
|
|
380
|
+
|
|
381
|
+
<p>Add new neurons to the fold</p>
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
<div class="method-source-code" id="add_neurons-source">
|
|
387
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 155</span>
|
|
388
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_neurons</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">neus</span>)
|
|
389
|
+
<span class="ruby-identifier">neus</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">neu</span><span class="ruby-operator">|</span>
|
|
390
|
+
<span class="ruby-ivar">@neurons</span>[<span class="ruby-identifier">neu</span>.<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">neu</span>
|
|
391
|
+
<span class="ruby-keyword">end</span>
|
|
392
|
+
<span class="ruby-keyword">end</span></pre>
|
|
393
|
+
</div>
|
|
394
|
+
|
|
395
|
+
</div>
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
</div>
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
<div id="method-i-dump_s" class="method-detail ">
|
|
404
|
+
|
|
405
|
+
<div class="method-heading">
|
|
406
|
+
<span class="method-name">dump_s</span><span
|
|
407
|
+
class="method-args">()</span>
|
|
408
|
+
|
|
409
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
410
|
+
|
|
411
|
+
</div>
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
<div class="method-description">
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
<div class="method-source-code" id="dump_s-source">
|
|
422
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 218</span>
|
|
423
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">dump_s</span>
|
|
424
|
+
<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-string">"\ngenes:\n"</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">gene</span><span class="ruby-operator">|</span>
|
|
425
|
+
<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">to_s</span>}.<span class="ruby-identifier">join</span>(<span class="ruby-string">"\n"</span>) <span class="ruby-operator">+</span> <span class="ruby-string">"\nneurons:\n"</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">neu</span><span class="ruby-operator">|</span>
|
|
426
|
+
<span class="ruby-identifier">neu</span>.<span class="ruby-identifier">to_s</span>}.<span class="ruby-identifier">join</span>(<span class="ruby-string">"\n"</span>)
|
|
427
|
+
<span class="ruby-keyword">end</span></pre>
|
|
428
|
+
</div>
|
|
429
|
+
|
|
430
|
+
</div>
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
|
|
435
|
+
</div>
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
<div id="method-i-fitness_cost" class="method-detail ">
|
|
439
|
+
|
|
440
|
+
<div class="method-heading">
|
|
441
|
+
<span class="method-name">fitness_cost</span><span
|
|
442
|
+
class="method-args">()</span>
|
|
443
|
+
|
|
444
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
445
|
+
|
|
446
|
+
</div>
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
<div class="method-description">
|
|
450
|
+
|
|
451
|
+
<p>Calculate the cost of this genotype.</p>
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
<div class="method-source-code" id="fitness_cost-source">
|
|
457
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 213</span>
|
|
458
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">fitness_cost</span>
|
|
459
|
+
<span class="ruby-identifier">p</span> = <span class="ruby-ivar">@controller</span>.<span class="ruby-identifier">parms</span>
|
|
460
|
+
<span class="ruby-identifier">p</span>.<span class="ruby-identifier">fitness_cost_per_neuron</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">fitness_cost_per_gene</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">size</span>
|
|
461
|
+
<span class="ruby-keyword">end</span></pre>
|
|
462
|
+
</div>
|
|
463
|
+
|
|
464
|
+
</div>
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
</div>
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
<div id="method-i-forget-21" class="method-detail ">
|
|
473
|
+
|
|
474
|
+
<div class="method-heading">
|
|
475
|
+
<span class="method-name">forget!</span><span
|
|
476
|
+
class="method-args">()</span>
|
|
477
|
+
|
|
478
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
479
|
+
|
|
480
|
+
</div>
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
<div class="method-description">
|
|
484
|
+
|
|
485
|
+
<p>Make the neurons forget their wiring.</p>
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
<div class="method-source-code" id="forget-21-source">
|
|
491
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 134</span>
|
|
492
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">forget!</span>
|
|
493
|
+
<span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>, <span class="ruby-identifier">neu</span><span class="ruby-operator">|</span> <span class="ruby-identifier">neu</span>.<span class="ruby-identifier">clear_graph</span> }
|
|
494
|
+
<span class="ruby-ivar">@neural_gene_map</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">h</span>, <span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-identifier">h</span>[<span class="ruby-identifier">k</span>] = [] }
|
|
495
|
+
<span class="ruby-keyword">end</span></pre>
|
|
496
|
+
</div>
|
|
497
|
+
|
|
498
|
+
</div>
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
</div>
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
<div id="method-i-innervate-21" class="method-detail ">
|
|
507
|
+
|
|
508
|
+
<div class="method-heading">
|
|
509
|
+
<span class="method-name">innervate!</span><span
|
|
510
|
+
class="method-args">(*hneus)</span>
|
|
511
|
+
|
|
512
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
513
|
+
|
|
514
|
+
</div>
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
<div class="method-description">
|
|
518
|
+
|
|
519
|
+
<p>We take the neural hashes (presumably from other neurons), and innervate
|
|
520
|
+
them. We do this in distinctions based on the neuron's names. FIXME We
|
|
521
|
+
need to randomly select a neuron in the case of clashes. @param [Hash]
|
|
522
|
+
hneus – hashes of neurons to innervate</p>
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
<div class="method-source-code" id="innervate-21-source">
|
|
528
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 175</span>
|
|
529
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">innervate!</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">hneus</span>)
|
|
530
|
+
<span class="ruby-identifier">hneus</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">neus</span><span class="ruby-operator">|</span>
|
|
531
|
+
<span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">merge!</span> <span class="ruby-identifier">neus</span>.<span class="ruby-identifier">dclone</span>
|
|
532
|
+
<span class="ruby-keyword">end</span>
|
|
533
|
+
<span class="ruby-keyword">end</span></pre>
|
|
534
|
+
</div>
|
|
535
|
+
|
|
536
|
+
</div>
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
</div>
|
|
542
|
+
|
|
543
|
+
|
|
544
|
+
<div id="method-i-neucleate" class="method-detail ">
|
|
545
|
+
|
|
546
|
+
<div class="method-heading">
|
|
547
|
+
<span class="method-name">neucleate</span><span
|
|
548
|
+
class="method-args">(clean: true, &block)</span>
|
|
549
|
+
|
|
550
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
551
|
+
|
|
552
|
+
</div>
|
|
553
|
+
|
|
554
|
+
|
|
555
|
+
<div class="method-description">
|
|
556
|
+
|
|
557
|
+
<p>We add genes given here to the genome. An array of genes is returned from
|
|
558
|
+
the block and we simply add them in. @param [boolean] clean @param [Proc]
|
|
559
|
+
block</p>
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
|
|
564
|
+
<div class="method-source-code" id="neucleate-source">
|
|
565
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 113</span>
|
|
566
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">neucleate</span>(<span class="ruby-identifier">clean</span><span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
|
567
|
+
<span class="ruby-identifier">genes</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-identifier">block</span>.(<span class="ruby-keyword">self</span>).<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">g</span><span class="ruby-operator">|</span>
|
|
568
|
+
<span class="ruby-identifier">g</span>.<span class="ruby-identifier">genotype</span> = <span class="ruby-keyword">self</span>
|
|
569
|
+
[<span class="ruby-identifier">g</span>.<span class="ruby-identifier">innovation</span>, <span class="ruby-identifier">g</span>] }]
|
|
570
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">clean</span>
|
|
571
|
+
<span class="ruby-ivar">@genes</span> = <span class="ruby-identifier">genes</span>
|
|
572
|
+
<span class="ruby-keyword">else</span>
|
|
573
|
+
<span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">merge!</span> <span class="ruby-identifier">genes</span>
|
|
574
|
+
<span class="ruby-keyword">end</span>
|
|
575
|
+
<span class="ruby-identifier">nuke_redundancies!</span>
|
|
576
|
+
<span class="ruby-keyword">end</span></pre>
|
|
577
|
+
</div>
|
|
578
|
+
|
|
579
|
+
</div>
|
|
580
|
+
|
|
581
|
+
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
</div>
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
<div id="method-i-nuke_redundancies-21" class="method-detail ">
|
|
588
|
+
|
|
589
|
+
<div class="method-heading">
|
|
590
|
+
<span class="method-name">nuke_redundancies!</span><span
|
|
591
|
+
class="method-args">()</span>
|
|
592
|
+
|
|
593
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
594
|
+
|
|
595
|
+
</div>
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
<div class="method-description">
|
|
599
|
+
|
|
600
|
+
<p>Remove any redundancies in the genome, any genes refering to the same two
|
|
601
|
+
neurons. Simply choose one and delete the rest. TODO: implement
|
|
602
|
+
nuke_redundancies!</p>
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
<div class="method-source-code" id="nuke_redundancies-21-source">
|
|
608
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 129</span>
|
|
609
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">nuke_redundancies!</span>
|
|
610
|
+
<span class="ruby-identifier">log</span>.<span class="ruby-identifier">warn</span> <span class="ruby-string">'nuke_redundancies! NIY'</span>
|
|
611
|
+
<span class="ruby-keyword">end</span></pre>
|
|
612
|
+
</div>
|
|
613
|
+
|
|
614
|
+
</div>
|
|
615
|
+
|
|
616
|
+
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
</div>
|
|
620
|
+
|
|
621
|
+
|
|
622
|
+
<div id="method-i-prune-21" class="method-detail ">
|
|
623
|
+
|
|
624
|
+
<div class="method-heading">
|
|
625
|
+
<span class="method-name">prune!</span><span
|
|
626
|
+
class="method-args">()</span>
|
|
627
|
+
|
|
628
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
629
|
+
|
|
630
|
+
</div>
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
<div class="method-description">
|
|
634
|
+
|
|
635
|
+
<p>Go through the list of neurons and drop any neurons not referenced by the
|
|
636
|
+
genes.</p>
|
|
637
|
+
|
|
638
|
+
<p>Then go through the genes and drop any that are dangling (i.e. no matching
|
|
639
|
+
neurons)</p>
|
|
640
|
+
|
|
641
|
+
<p>Then make sure that @neural_inputs and @neural_outputs reference the actual
|
|
642
|
+
instance neurons in @neurons</p>
|
|
643
|
+
|
|
644
|
+
<p>TODO add this circularity check to prune!</p>
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
<div class="method-source-code" id="prune-21-source">
|
|
650
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 191</span>
|
|
651
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">prune!</span>
|
|
652
|
+
<span class="ruby-comment"># Take care of dangling neurons</span>
|
|
653
|
+
<span class="ruby-identifier">neunames</span> = <span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">g</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">g</span>.<span class="ruby-identifier">in_neuron</span>, <span class="ruby-identifier">g</span>.<span class="ruby-identifier">out_neuron</span>]}.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">to_set</span>
|
|
654
|
+
<span class="ruby-ivar">@neurons</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">reject</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span>
|
|
655
|
+
<span class="ruby-keyword">not</span> <span class="ruby-identifier">neunames</span>.<span class="ruby-identifier">member?</span> <span class="ruby-identifier">n</span>.<span class="ruby-identifier">name</span>
|
|
656
|
+
<span class="ruby-keyword">end</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span>
|
|
657
|
+
[<span class="ruby-identifier">n</span>.<span class="ruby-identifier">name</span>, <span class="ruby-identifier">n</span>]
|
|
658
|
+
<span class="ruby-keyword">end</span>]
|
|
659
|
+
|
|
660
|
+
<span class="ruby-comment"># Take care of dangling genes</span>
|
|
661
|
+
<span class="ruby-ivar">@genes</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">reject</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">gene</span><span class="ruby-operator">|</span>
|
|
662
|
+
<span class="ruby-keyword">not</span> (<span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">member?</span>(<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">in_neuron</span>) <span class="ruby-keyword">and</span> <span class="ruby-ivar">@neurons</span>.<span class="ruby-identifier">member?</span>(<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">out_neuron</span>))
|
|
663
|
+
<span class="ruby-keyword">end</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">gene</span><span class="ruby-operator">|</span>
|
|
664
|
+
[<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">name</span>, <span class="ruby-identifier">gene</span>]
|
|
665
|
+
<span class="ruby-keyword">end</span>]
|
|
666
|
+
|
|
667
|
+
<span class="ruby-comment"># Make sure @neural_inputs and @neural_outputs are consistent</span>
|
|
668
|
+
<span class="ruby-ivar">@neural_inputs</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-ivar">@neural_inputs</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">n</span>.<span class="ruby-identifier">name</span>, <span class="ruby-ivar">@neurons</span>[<span class="ruby-identifier">n</span>.<span class="ruby-identifier">name</span>]]}]
|
|
669
|
+
<span class="ruby-ivar">@neural_outputs</span> = <span class="ruby-constant">Hash</span>[<span class="ruby-ivar">@neural_outputs</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">n</span><span class="ruby-operator">|</span> [<span class="ruby-identifier">n</span>.<span class="ruby-identifier">name</span>, <span class="ruby-ivar">@neurons</span>[<span class="ruby-identifier">n</span>.<span class="ruby-identifier">name</span>]]}]
|
|
670
|
+
<span class="ruby-keyword">end</span></pre>
|
|
671
|
+
</div>
|
|
672
|
+
|
|
673
|
+
</div>
|
|
674
|
+
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
</div>
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
<div id="method-i-wire-21" class="method-detail ">
|
|
682
|
+
|
|
683
|
+
<div class="method-heading">
|
|
684
|
+
<span class="method-name">wire!</span><span
|
|
685
|
+
class="method-args">()</span>
|
|
686
|
+
|
|
687
|
+
<span class="method-click-advice">click to toggle source</span>
|
|
688
|
+
|
|
689
|
+
</div>
|
|
690
|
+
|
|
691
|
+
|
|
692
|
+
<div class="method-description">
|
|
693
|
+
|
|
694
|
+
<p>Wire up the neurons based on the genes.</p>
|
|
695
|
+
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
|
|
699
|
+
<div class="method-source-code" id="wire-21-source">
|
|
700
|
+
<pre><span class="ruby-comment"># File lib/rubyneat/critter.rb, line 140</span>
|
|
701
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">wire!</span>
|
|
702
|
+
<span class="ruby-identifier">forget!</span>
|
|
703
|
+
<span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">innov</span>, <span class="ruby-identifier">gene</span><span class="ruby-operator">|</span>
|
|
704
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">gene</span>.<span class="ruby-identifier">enabled?</span>
|
|
705
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">NeatException</span>.<span class="ruby-identifier">new</span> <span class="ruby-node">"Can't find #{gene.out_neuron}"</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@neurons</span>[<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">out_neuron</span>].<span class="ruby-identifier">nil?</span>
|
|
706
|
+
<span class="ruby-ivar">@neurons</span>[<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">out_neuron</span>] <span class="ruby-operator"><<</span> <span class="ruby-ivar">@neurons</span>[<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">in_neuron</span>]
|
|
707
|
+
<span class="ruby-ivar">@neural_gene_map</span>[<span class="ruby-identifier">gene</span>.<span class="ruby-identifier">out_neuron</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">gene</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">gene</span>.<span class="ruby-identifier">in_neuron</span>.<span class="ruby-identifier">nil?</span>
|
|
708
|
+
<span class="ruby-keyword">end</span>
|
|
709
|
+
<span class="ruby-keyword">end</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">nil?</span>
|
|
710
|
+
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@genes</span>.<span class="ruby-identifier">nil?</span>
|
|
711
|
+
<span class="ruby-identifier">$log</span>.<span class="ruby-identifier">error</span> <span class="ruby-string">'Genes Not Present'</span>
|
|
712
|
+
<span class="ruby-keyword">end</span>
|
|
713
|
+
<span class="ruby-keyword">end</span></pre>
|
|
714
|
+
</div>
|
|
715
|
+
|
|
716
|
+
</div>
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
</div>
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
</section>
|
|
725
|
+
|
|
726
|
+
</section>
|
|
727
|
+
</main>
|
|
728
|
+
|
|
729
|
+
|
|
730
|
+
<footer id="validator-badges" role="contentinfo">
|
|
731
|
+
<p><a href="http://validator.w3.org/check/referer">Validate</a>
|
|
732
|
+
<p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.1.
|
|
733
|
+
<p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
|
734
|
+
</footer>
|
|
735
|
+
|