evolvable 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/CHANGELOG.md +24 -0
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +44 -25
  6. data/README.md +498 -190
  7. data/README_YARD.md +85 -166
  8. data/bin/console +10 -19
  9. data/docs/Evolvable/ClassMethods.html +1233 -0
  10. data/docs/Evolvable/Community/ClassMethods.html +708 -0
  11. data/docs/Evolvable/Community.html +1342 -0
  12. data/docs/Evolvable/CountGene.html +886 -0
  13. data/docs/Evolvable/EqualizeGoal.html +347 -0
  14. data/docs/Evolvable/Error.html +134 -0
  15. data/docs/Evolvable/Evaluation.html +773 -0
  16. data/docs/Evolvable/Evolution.html +616 -0
  17. data/docs/Evolvable/Gene/ClassMethods.html +413 -0
  18. data/docs/Evolvable/Gene.html +522 -0
  19. data/docs/Evolvable/GeneCluster/ClassMethods.html +431 -0
  20. data/docs/Evolvable/GeneCluster.html +280 -0
  21. data/docs/Evolvable/GeneCombination.html +515 -0
  22. data/docs/Evolvable/GeneSpace.html +619 -0
  23. data/docs/Evolvable/Genome.html +1070 -0
  24. data/docs/Evolvable/Goal.html +500 -0
  25. data/docs/Evolvable/MaximizeGoal.html +348 -0
  26. data/docs/Evolvable/MinimizeGoal.html +348 -0
  27. data/docs/Evolvable/Mutation.html +729 -0
  28. data/docs/Evolvable/PointCrossover.html +444 -0
  29. data/docs/Evolvable/Population.html +2826 -0
  30. data/docs/Evolvable/RigidCountGene.html +501 -0
  31. data/docs/Evolvable/Selection.html +594 -0
  32. data/docs/Evolvable/Serializer.html +293 -0
  33. data/docs/Evolvable/UniformCrossover.html +286 -0
  34. data/docs/Evolvable.html +1619 -0
  35. data/docs/_index.html +341 -0
  36. data/docs/class_list.html +54 -0
  37. data/docs/css/common.css +1 -0
  38. data/docs/css/full_list.css +58 -0
  39. data/docs/css/style.css +503 -0
  40. data/docs/file.README.html +750 -0
  41. data/docs/file_list.html +59 -0
  42. data/docs/frames.html +22 -0
  43. data/docs/index.html +750 -0
  44. data/docs/js/app.js +344 -0
  45. data/docs/js/full_list.js +242 -0
  46. data/docs/js/jquery.js +4 -0
  47. data/docs/method_list.html +1302 -0
  48. data/docs/top-level-namespace.html +110 -0
  49. data/evolvable.gemspec +6 -6
  50. data/examples/ascii_art.rb +5 -9
  51. data/examples/stickman.rb +25 -33
  52. data/{examples/hello_world.rb → exe/hello_evolvable_world} +46 -30
  53. data/lib/evolvable/community.rb +190 -0
  54. data/lib/evolvable/count_gene.rb +65 -0
  55. data/lib/evolvable/equalize_goal.rb +2 -9
  56. data/lib/evolvable/evaluation.rb +113 -14
  57. data/lib/evolvable/evolution.rb +38 -15
  58. data/lib/evolvable/gene.rb +124 -25
  59. data/lib/evolvable/gene_cluster.rb +106 -0
  60. data/lib/evolvable/gene_combination.rb +57 -16
  61. data/lib/evolvable/gene_space.rb +111 -0
  62. data/lib/evolvable/genome.rb +32 -4
  63. data/lib/evolvable/goal.rb +19 -24
  64. data/lib/evolvable/maximize_goal.rb +2 -9
  65. data/lib/evolvable/minimize_goal.rb +3 -9
  66. data/lib/evolvable/mutation.rb +87 -41
  67. data/lib/evolvable/point_crossover.rb +24 -4
  68. data/lib/evolvable/population.rb +258 -84
  69. data/lib/evolvable/rigid_count_gene.rb +36 -0
  70. data/lib/evolvable/selection.rb +68 -14
  71. data/lib/evolvable/serializer.rb +46 -0
  72. data/lib/evolvable/uniform_crossover.rb +30 -6
  73. data/lib/evolvable/version.rb +2 -1
  74. data/lib/evolvable.rb +268 -107
  75. metadata +57 -36
  76. data/examples/images/diagram.png +0 -0
  77. data/exe/hello +0 -16
  78. data/lib/evolvable/error/undefined_method.rb +0 -7
  79. data/lib/evolvable/search_space.rb +0 -181
@@ -0,0 +1,280 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Module: Evolvable::GeneCluster
8
+
9
+ &mdash; Documentation by YARD 0.9.37
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "Evolvable::GeneCluster";
19
+ relpath = '../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../_index.html">Index (G)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../Evolvable.html" title="Evolvable (module)">Evolvable</a></span></span>
41
+ &raquo;
42
+ <span class="title">GeneCluster</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Module: Evolvable::GeneCluster
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ <dl>
80
+ <dt>Defined in:</dt>
81
+ <dd>lib/evolvable/gene_cluster.rb</dd>
82
+ </dl>
83
+
84
+ </div>
85
+
86
+ <h2>Overview</h2><div class="docstring">
87
+ <div class="discussion">
88
+ <p>Gene clusters group related genes into reusable components that can be applied
89
+ to multiple evolvable classes. This promotes clean organization, eliminates
90
+ naming conflicts, and simplifies gene access.</p>
91
+
92
+ <p><strong>Benefits:</strong></p>
93
+
94
+ <ul>
95
+ <li>Reuse gene groups across multiple evolvables</li>
96
+ <li>Prevent name collisions via automatic namespacing</li>
97
+ <li>Treat clusters as structured subcomponents of a genome</li>
98
+ <li>Access all genes in a cluster with a single method call</li>
99
+ </ul>
100
+
101
+ <p>The <code>ColorPaletteCluster</code> below defines a group of genes commonly used for styling themes:</p>
102
+
103
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>ColorPaletteCluster</span>
104
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="../Evolvable.html" title="Evolvable (module)">Evolvable</a></span></span><span class='op'>::</span><span class='const'>GeneCluster</span>
105
+
106
+ <span class='id identifier rubyid_gene'>gene</span> <span class='symbol'>:primary</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ColorGene</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>count:</span> <span class='int'>1</span>
107
+ <span class='id identifier rubyid_gene'>gene</span> <span class='symbol'>:secondary</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ColorGene</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>count:</span> <span class='int'>1</span>
108
+ <span class='id identifier rubyid_gene'>gene</span> <span class='symbol'>:accent</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ColorGene</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>count:</span> <span class='int'>1</span>
109
+ <span class='id identifier rubyid_gene'>gene</span> <span class='symbol'>:neutral</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ColorGene</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>count:</span> <span class='int'>1</span>
110
+ <span class='kw'>end</span>
111
+ </code></pre>
112
+
113
+ <p>Use the <code>cluster</code> macro to apply the cluster to your evolvable class:</p>
114
+
115
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>Theme</span>
116
+ <span class='id identifier rubyid_include'>include</span> <span class='const'><span class='object_link'><a href="../Evolvable.html" title="Evolvable (module)">Evolvable</a></span></span>
117
+
118
+ <span class='id identifier rubyid_cluster'>cluster</span> <span class='symbol'>:colors</span><span class='comma'>,</span> <span class='label'>type:</span> <span class='const'>ColorPaletteCluster</span>
119
+
120
+ <span class='kw'>def</span> <span class='id identifier rubyid_inspect_colors'>inspect_colors</span>
121
+ <span class='id identifier rubyid_colors'>colors</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>, </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
122
+ <span class='kw'>end</span>
123
+ <span class='kw'>end</span>
124
+ </code></pre>
125
+
126
+ <p>When a cluster is applied, its genes are automatically namespaced with the cluster name:</p>
127
+
128
+ <ul>
129
+ <li>Access the full group: <code>theme.colors</code> → returns all genes in the colors cluster</li>
130
+ <li>Access individual genes: <code>theme.find_gene(&quot;colors-primary&quot;)</code></li>
131
+ </ul>
132
+
133
+
134
+ </div>
135
+ </div>
136
+ <div class="tags">
137
+
138
+
139
+ <p class="tag_title">See Also:</p>
140
+ <ul class="see">
141
+
142
+ <li><span class='object_link'><a href="Gene.html" title="Evolvable::Gene (module)">Gene</a></span></li>
143
+
144
+ <li><span class='object_link'><a href="GeneSpace.html" title="Evolvable::GeneSpace (class)">GeneSpace</a></span></li>
145
+
146
+ </ul>
147
+
148
+ </div><h2>Defined Under Namespace</h2>
149
+ <p class="children">
150
+
151
+
152
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="GeneCluster/ClassMethods.html" title="Evolvable::GeneCluster::ClassMethods (module)">ClassMethods</a></span>
153
+
154
+
155
+
156
+
157
+ </p>
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+ <h2>
167
+ Class Method Summary
168
+ <small><a href="#" class="summary_toggle">collapse</a></small>
169
+ </h2>
170
+
171
+ <ul class="summary">
172
+
173
+ <li class="public ">
174
+ <span class="summary_signature">
175
+
176
+ <a href="#included-class_method" title="included (class method)">.<strong>included</strong>(base) &#x21d2; void </a>
177
+
178
+
179
+
180
+ </span>
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+ <span class="summary_desc"><div class='inline'><p>When included in a class, extends the class with ClassMethods and initializes the cluster configuration.</p>
191
+ </div></span>
192
+
193
+ </li>
194
+
195
+
196
+ </ul>
197
+
198
+
199
+
200
+
201
+ <div id="class_method_details" class="method_details_list">
202
+ <h2>Class Method Details</h2>
203
+
204
+
205
+ <div class="method_details first">
206
+ <h3 class="signature first" id="included-class_method">
207
+
208
+ .<strong>included</strong>(base) &#x21d2; <tt>void</tt>
209
+
210
+
211
+
212
+
213
+
214
+ </h3><div class="docstring">
215
+ <div class="discussion">
216
+ <p class="note returns_void">This method returns an undefined value.</p><p>When included in a class, extends the class with ClassMethods and initializes
217
+ the cluster configuration. This is called automatically when you include
218
+ the GeneCluster module in your class.</p>
219
+
220
+
221
+ </div>
222
+ </div>
223
+ <div class="tags">
224
+ <p class="tag_title">Parameters:</p>
225
+ <ul class="param">
226
+
227
+ <li>
228
+
229
+ <span class='name'>base</span>
230
+
231
+
232
+ <span class='type'>(<tt>Class</tt>)</span>
233
+
234
+
235
+
236
+ &mdash;
237
+ <div class='inline'><p>The class that includes the GeneCluster module</p>
238
+ </div>
239
+
240
+ </li>
241
+
242
+ </ul>
243
+
244
+
245
+ </div><table class="source_code">
246
+ <tr>
247
+ <td>
248
+ <pre class="lines">
249
+
250
+
251
+ 59
252
+ 60
253
+ 61
254
+ 62</pre>
255
+ </td>
256
+ <td>
257
+ <pre class="code"><span class="info file"># File 'lib/evolvable/gene_cluster.rb', line 59</span>
258
+
259
+ <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_included'>included</span><span class='lparen'>(</span><span class='id identifier rubyid_base'>base</span><span class='rparen'>)</span>
260
+ <span class='id identifier rubyid_base'>base</span><span class='period'>.</span><span class='id identifier rubyid_extend'>extend</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="GeneCluster/ClassMethods.html" title="Evolvable::GeneCluster::ClassMethods (module)">ClassMethods</a></span></span><span class='rparen'>)</span>
261
+ <span class='id identifier rubyid_base'>base</span><span class='period'>.</span><span class='id identifier rubyid_instance_variable_set'>instance_variable_set</span><span class='lparen'>(</span><span class='symbol'>:@cluster_config</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
262
+ <span class='kw'>end</span></pre>
263
+ </td>
264
+ </tr>
265
+ </table>
266
+ </div>
267
+
268
+ </div>
269
+
270
+ </div>
271
+
272
+ <div id="footer">
273
+ Generated on Sat May 10 18:39:22 2025 by
274
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
275
+ 0.9.37 (ruby-3.4.2).
276
+ </div>
277
+
278
+ </div>
279
+ </body>
280
+ </html>