charlie 0.6.0 → 0.7.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 (66) hide show
  1. data/History.txt +14 -0
  2. data/Manifest.txt +13 -22
  3. data/README.txt +3 -3
  4. data/Rakefile +1 -1
  5. data/TODO.txt +11 -21
  6. data/data/BENCHMARK +25 -23
  7. data/data/CROSSOVER +5 -1
  8. data/data/GENOTYPE +6 -6
  9. data/data/MUTATION +19 -7
  10. data/data/SELECTION +2 -1
  11. data/data/template.html +2 -1
  12. data/examples/EXAMPLES_README.txt +70 -0
  13. data/examples/bitstring.rb +72 -0
  14. data/examples/{gladiatorial_sunburn.rb → coevolution.rb} +80 -22
  15. data/examples/function_optimization.rb +113 -0
  16. data/examples/output/{royalroad1_report.html → bitstring_royalroad.html} +822 -655
  17. data/examples/output/function_optimization_sombrero.html +2289 -0
  18. data/examples/output/function_optimization_twopeak.csv +210 -0
  19. data/examples/output/function_optimization_twopeak.html +2477 -0
  20. data/examples/output/string_weasel.html +513 -0
  21. data/examples/output/tsp.html +633 -882
  22. data/examples/{money.rb → permutation.rb} +20 -8
  23. data/examples/string.rb +98 -0
  24. data/examples/tree.rb +37 -12
  25. data/examples/tsp.rb +34 -22
  26. data/lib/charlie.rb +5 -1
  27. data/lib/charlie/1.9fixes.rb +46 -0
  28. data/lib/charlie/crossover.rb +31 -14
  29. data/lib/charlie/etc/minireport.rb +5 -4
  30. data/lib/charlie/etc/monkey.rb +11 -8
  31. data/lib/charlie/gabenchmark.rb +230 -0
  32. data/lib/charlie/genotype.rb +4 -0
  33. data/lib/charlie/list/list_crossover.rb +25 -5
  34. data/lib/charlie/mutate.rb +34 -7
  35. data/lib/charlie/permutation/permutation.rb +34 -6
  36. data/lib/charlie/population.rb +12 -122
  37. data/lib/charlie/selection.rb +1 -0
  38. data/lib/charlie/tree/tree.rb +179 -17
  39. data/test/t_common.rb +1 -1
  40. data/test/test_benchmark.rb +19 -5
  41. data/test/test_cross.rb +23 -1
  42. data/test/test_evolve.rb +14 -1
  43. data/test/test_mutator.rb +28 -2
  44. data/test/test_permutation.rb +23 -1
  45. data/test/test_sel.rb +3 -1
  46. data/test/test_tree.rb +63 -1
  47. metadata +17 -25
  48. data/examples/bit.rb +0 -10
  49. data/examples/function_opt_2peak.rb +0 -24
  50. data/examples/function_opt_sombero.rb +0 -38
  51. data/examples/gladiatorial_simple.rb +0 -17
  52. data/examples/gridwalk.rb +0 -29
  53. data/examples/output/flattened_sombero.html +0 -6400
  54. data/examples/output/flattened_sombero2_.html +0 -3576
  55. data/examples/output/fopt1_dblopt.html +0 -2160
  56. data/examples/output/hill10.html +0 -5816
  57. data/examples/output/hill2.csv +0 -24
  58. data/examples/output/hill2.html +0 -384
  59. data/examples/output/royalroad2_report.html +0 -1076
  60. data/examples/output/royalroadquick_report.html +0 -504
  61. data/examples/output/weasel1_report.html +0 -1076
  62. data/examples/output/weasel2_report.html +0 -240
  63. data/examples/royalroad.rb +0 -26
  64. data/examples/royalroad2.rb +0 -18
  65. data/examples/simple_climb_hill2.rb +0 -47
  66. data/examples/weasel.rb +0 -36
@@ -1,504 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
-
3
- <html xmlns="http://www.w3.org/1999/xhtml">
4
- <head>
5
- <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
6
- <title>GA Benchmark Report</title>
7
- <style type='text/css'>
8
- table{
9
- background: #ccc;
10
- font-family: Verdana, Helvetica, sans-serif;
11
- }
12
- th {
13
- background: #666;
14
- color: white;
15
- padding: 3px;
16
- font-weight: bold;
17
- }
18
- td {
19
- color: #333;
20
- background: #e2e2e2;
21
- padding: 2px;
22
- text-align: center;
23
- }
24
- </style>
25
-
26
- </script>
27
- <script type="text/javascript">
28
-
29
- </script>
30
- </head>
31
- <body>
32
- <h1>Information</h1>
33
-
34
- <table>
35
- <tr><td>Genotype class</td><td>RoyalRoad</td></tr>
36
- <tr><td>Population size</td><td>20</td></tr>
37
- <tr><td># of generations per run</td><td>50</td></tr>
38
- <tr><td>Number of tests </td><td>36</td></tr>
39
- <tr><td>Tests repeated </td><td>50 times</td></tr>
40
- <tr><td>Number of runs </td><td>1800</td></tr>
41
- <tr><td>Total number of generations </td><td>90000</td></tr>
42
- <tr><td>Total time</td><td>931.08 seconds</td></tr>
43
- </table
44
- <h1>Stats for all</h1><table>
45
- <tr><th>.</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>avg-time</th></tr>
46
- <tr>
47
- <td>All</td>
48
- <td>0.00000</td>
49
- <td>6.00000</td>
50
- <td>2.34500</td>
51
- <td>1.14619</td>
52
- <td>0.51726</td>
53
- </tr>
54
- </table><h1>Stats for selection</h1><table>
55
- <tr><th>selection</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>avg-time</th></tr>
56
- <tr>
57
- <td>TournamentSelection(4,nil)</td>
58
- <td>0.00000</td>
59
- <td>6.00000</td>
60
- <td>3.15167</td>
61
- <td>1.13813</td>
62
- <td>0.61085</td>
63
- </tr>
64
- <tr>
65
- <td>TruncationSelection(0.3)</td>
66
- <td>0.00000</td>
67
- <td>5.00000</td>
68
- <td>2.02500</td>
69
- <td>0.94395</td>
70
- <td>0.36612</td>
71
- </tr>
72
- <tr>
73
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
74
- <td>0.00000</td>
75
- <td>5.00000</td>
76
- <td>1.85833</td>
77
- <td>0.87460</td>
78
- <td>0.57482</td>
79
- </tr>
80
- </table><h1>Stats for crossover</h1><table>
81
- <tr><th>crossover</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>avg-time</th></tr>
82
- <tr>
83
- <td>SingleChild(UniformCrossover)</td>
84
- <td>0.00000</td>
85
- <td>6.00000</td>
86
- <td>2.40222</td>
87
- <td>1.08341</td>
88
- <td>0.63032</td>
89
- </tr>
90
- <tr>
91
- <td>UniformCrossover</td>
92
- <td>0.00000</td>
93
- <td>6.00000</td>
94
- <td>2.39778</td>
95
- <td>1.12526</td>
96
- <td>0.49756</td>
97
- </tr>
98
- <tr>
99
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
100
- <td>0.00000</td>
101
- <td>6.00000</td>
102
- <td>2.31111</td>
103
- <td>1.16089</td>
104
- <td>0.51045</td>
105
- </tr>
106
- <tr>
107
- <td>SinglePointCrossover</td>
108
- <td>0.00000</td>
109
- <td>5.00000</td>
110
- <td>2.26889</td>
111
- <td>1.20597</td>
112
- <td>0.43073</td>
113
- </tr>
114
- </table><h1>Stats for mutation</h1><table>
115
- <tr><th>mutation</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>avg-time</th></tr>
116
- <tr>
117
- <td>ListMutator([:expected_n, 3],:flip)</td>
118
- <td>0.00000</td>
119
- <td>6.00000</td>
120
- <td>2.66833</td>
121
- <td>1.13358</td>
122
- <td>0.53286</td>
123
- </tr>
124
- <tr>
125
- <td>ListMutator([:expected_n, 2],:flip)</td>
126
- <td>0.00000</td>
127
- <td>6.00000</td>
128
- <td>2.44000</td>
129
- <td>1.12386</td>
130
- <td>0.50558</td>
131
- </tr>
132
- <tr>
133
- <td>ListMutator([:expected_n, 1],:flip)</td>
134
- <td>0.00000</td>
135
- <td>5.00000</td>
136
- <td>1.92667</td>
137
- <td>1.05101</td>
138
- <td>0.51334</td>
139
- </tr>
140
- </table><h1>Raw Stats</h1><table>
141
- <tr><th>selection</th><th>crossover</th><th>mutation</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>avg-time</th></tr>
142
- <tr>
143
- <td>TournamentSelection(4,nil)</td>
144
- <td>UniformCrossover</td>
145
- <td>ListMutator([:expected_n, 3],:flip)</td>
146
- <td>2.00000</td>
147
- <td>6.00000</td>
148
- <td>3.86000</td>
149
- <td>0.95937</td>
150
- <td>0.59199</td>
151
- </tr>
152
- <tr>
153
- <td>TournamentSelection(4,nil)</td>
154
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
155
- <td>ListMutator([:expected_n, 3],:flip)</td>
156
- <td>2.00000</td>
157
- <td>5.00000</td>
158
- <td>3.60000</td>
159
- <td>0.87178</td>
160
- <td>0.66756</td>
161
- </tr>
162
- <tr>
163
- <td>TournamentSelection(4,nil)</td>
164
- <td>SingleChild(UniformCrossover)</td>
165
- <td>ListMutator([:expected_n, 3],:flip)</td>
166
- <td>2.00000</td>
167
- <td>6.00000</td>
168
- <td>3.56000</td>
169
- <td>0.96250</td>
170
- <td>0.73166</td>
171
- </tr>
172
- <tr>
173
- <td>TournamentSelection(4,nil)</td>
174
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
175
- <td>ListMutator([:expected_n, 2],:flip)</td>
176
- <td>0.00000</td>
177
- <td>6.00000</td>
178
- <td>3.52000</td>
179
- <td>1.06283</td>
180
- <td>0.58398</td>
181
- </tr>
182
- <tr>
183
- <td>TournamentSelection(4,nil)</td>
184
- <td>SinglePointCrossover</td>
185
- <td>ListMutator([:expected_n, 3],:flip)</td>
186
- <td>1.00000</td>
187
- <td>5.00000</td>
188
- <td>3.50000</td>
189
- <td>0.92195</td>
190
- <td>0.53462</td>
191
- </tr>
192
- <tr>
193
- <td>TournamentSelection(4,nil)</td>
194
- <td>UniformCrossover</td>
195
- <td>ListMutator([:expected_n, 2],:flip)</td>
196
- <td>1.00000</td>
197
- <td>5.00000</td>
198
- <td>3.34000</td>
199
- <td>1.01213</td>
200
- <td>0.58607</td>
201
- </tr>
202
- <tr>
203
- <td>TournamentSelection(4,nil)</td>
204
- <td>SingleChild(UniformCrossover)</td>
205
- <td>ListMutator([:expected_n, 2],:flip)</td>
206
- <td>1.00000</td>
207
- <td>6.00000</td>
208
- <td>3.20000</td>
209
- <td>1.00000</td>
210
- <td>0.73642</td>
211
- </tr>
212
- <tr>
213
- <td>TournamentSelection(4,nil)</td>
214
- <td>SinglePointCrossover</td>
215
- <td>ListMutator([:expected_n, 2],:flip)</td>
216
- <td>1.00000</td>
217
- <td>5.00000</td>
218
- <td>3.08000</td>
219
- <td>1.14612</td>
220
- <td>0.52194</td>
221
- </tr>
222
- <tr>
223
- <td>TournamentSelection(4,nil)</td>
224
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
225
- <td>ListMutator([:expected_n, 1],:flip)</td>
226
- <td>1.00000</td>
227
- <td>5.00000</td>
228
- <td>2.68000</td>
229
- <td>1.12143</td>
230
- <td>0.55624</td>
231
- </tr>
232
- <tr>
233
- <td>TournamentSelection(4,nil)</td>
234
- <td>UniformCrossover</td>
235
- <td>ListMutator([:expected_n, 1],:flip)</td>
236
- <td>1.00000</td>
237
- <td>4.00000</td>
238
- <td>2.64000</td>
239
- <td>1.01509</td>
240
- <td>0.59561</td>
241
- </tr>
242
- <tr>
243
- <td>TruncationSelection(0.3)</td>
244
- <td>SingleChild(UniformCrossover)</td>
245
- <td>ListMutator([:expected_n, 3],:flip)</td>
246
- <td>1.00000</td>
247
- <td>5.00000</td>
248
- <td>2.56000</td>
249
- <td>0.92000</td>
250
- <td>0.44021</td>
251
- </tr>
252
- <tr>
253
- <td>TournamentSelection(4,nil)</td>
254
- <td>SingleChild(UniformCrossover)</td>
255
- <td>ListMutator([:expected_n, 1],:flip)</td>
256
- <td>0.00000</td>
257
- <td>5.00000</td>
258
- <td>2.52000</td>
259
- <td>1.13561</td>
260
- <td>0.71444</td>
261
- </tr>
262
- <tr>
263
- <td>TournamentSelection(4,nil)</td>
264
- <td>SinglePointCrossover</td>
265
- <td>ListMutator([:expected_n, 1],:flip)</td>
266
- <td>0.00000</td>
267
- <td>5.00000</td>
268
- <td>2.32000</td>
269
- <td>1.13912</td>
270
- <td>0.50967</td>
271
- </tr>
272
- <tr>
273
- <td>TruncationSelection(0.3)</td>
274
- <td>SingleChild(UniformCrossover)</td>
275
- <td>ListMutator([:expected_n, 2],:flip)</td>
276
- <td>1.00000</td>
277
- <td>4.00000</td>
278
- <td>2.26000</td>
279
- <td>0.82000</td>
280
- <td>0.43886</td>
281
- </tr>
282
- <tr>
283
- <td>TruncationSelection(0.3)</td>
284
- <td>SinglePointCrossover</td>
285
- <td>ListMutator([:expected_n, 3],:flip)</td>
286
- <td>1.00000</td>
287
- <td>5.00000</td>
288
- <td>2.26000</td>
289
- <td>1.05470</td>
290
- <td>0.27101</td>
291
- </tr>
292
- <tr>
293
- <td>TruncationSelection(0.3)</td>
294
- <td>UniformCrossover</td>
295
- <td>ListMutator([:expected_n, 3],:flip)</td>
296
- <td>1.00000</td>
297
- <td>5.00000</td>
298
- <td>2.26000</td>
299
- <td>0.82000</td>
300
- <td>0.33182</td>
301
- </tr>
302
- <tr>
303
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
304
- <td>SinglePointCrossover</td>
305
- <td>ListMutator([:expected_n, 3],:flip)</td>
306
- <td>1.00000</td>
307
- <td>5.00000</td>
308
- <td>2.24000</td>
309
- <td>0.73648</td>
310
- <td>0.49146</td>
311
- </tr>
312
- <tr>
313
- <td>TruncationSelection(0.3)</td>
314
- <td>UniformCrossover</td>
315
- <td>ListMutator([:expected_n, 2],:flip)</td>
316
- <td>1.00000</td>
317
- <td>4.00000</td>
318
- <td>2.22000</td>
319
- <td>0.96519</td>
320
- <td>0.33027</td>
321
- </tr>
322
- <tr>
323
- <td>TruncationSelection(0.3)</td>
324
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
325
- <td>ListMutator([:expected_n, 3],:flip)</td>
326
- <td>1.00000</td>
327
- <td>5.00000</td>
328
- <td>2.16000</td>
329
- <td>0.94573</td>
330
- <td>0.51834</td>
331
- </tr>
332
- <tr>
333
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
334
- <td>SinglePointCrossover</td>
335
- <td>ListMutator([:expected_n, 2],:flip)</td>
336
- <td>0.00000</td>
337
- <td>4.00000</td>
338
- <td>2.08000</td>
339
- <td>0.97652</td>
340
- <td>0.49665</td>
341
- </tr>
342
- <tr>
343
- <td>TruncationSelection(0.3)</td>
344
- <td>SinglePointCrossover</td>
345
- <td>ListMutator([:expected_n, 2],:flip)</td>
346
- <td>0.00000</td>
347
- <td>5.00000</td>
348
- <td>2.06000</td>
349
- <td>1.04709</td>
350
- <td>0.26914</td>
351
- </tr>
352
- <tr>
353
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
354
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
355
- <td>ListMutator([:expected_n, 3],:flip)</td>
356
- <td>0.00000</td>
357
- <td>5.00000</td>
358
- <td>2.04000</td>
359
- <td>0.95833</td>
360
- <td>0.57446</td>
361
- </tr>
362
- <tr>
363
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
364
- <td>UniformCrossover</td>
365
- <td>ListMutator([:expected_n, 3],:flip)</td>
366
- <td>1.00000</td>
367
- <td>3.00000</td>
368
- <td>2.00000</td>
369
- <td>0.69282</td>
370
- <td>0.55872</td>
371
- </tr>
372
- <tr>
373
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
374
- <td>SingleChild(UniformCrossover)</td>
375
- <td>ListMutator([:expected_n, 2],:flip)</td>
376
- <td>1.00000</td>
377
- <td>4.00000</td>
378
- <td>2.00000</td>
379
- <td>0.91652</td>
380
- <td>0.67921</td>
381
- </tr>
382
- <tr>
383
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
384
- <td>SingleChild(UniformCrossover)</td>
385
- <td>ListMutator([:expected_n, 3],:flip)</td>
386
- <td>1.00000</td>
387
- <td>4.00000</td>
388
- <td>1.98000</td>
389
- <td>0.78715</td>
390
- <td>0.68251</td>
391
- </tr>
392
- <tr>
393
- <td>TruncationSelection(0.3)</td>
394
- <td>UniformCrossover</td>
395
- <td>ListMutator([:expected_n, 1],:flip)</td>
396
- <td>1.00000</td>
397
- <td>3.00000</td>
398
- <td>1.90000</td>
399
- <td>0.64031</td>
400
- <td>0.32565</td>
401
- </tr>
402
- <tr>
403
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
404
- <td>UniformCrossover</td>
405
- <td>ListMutator([:expected_n, 2],:flip)</td>
406
- <td>0.00000</td>
407
- <td>3.00000</td>
408
- <td>1.90000</td>
409
- <td>0.70000</td>
410
- <td>0.57766</td>
411
- </tr>
412
- <tr>
413
- <td>TruncationSelection(0.3)</td>
414
- <td>SingleChild(UniformCrossover)</td>
415
- <td>ListMutator([:expected_n, 1],:flip)</td>
416
- <td>1.00000</td>
417
- <td>4.00000</td>
418
- <td>1.86000</td>
419
- <td>0.77485</td>
420
- <td>0.56931</td>
421
- </tr>
422
- <tr>
423
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
424
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
425
- <td>ListMutator([:expected_n, 2],:flip)</td>
426
- <td>1.00000</td>
427
- <td>4.00000</td>
428
- <td>1.86000</td>
429
- <td>0.66363</td>
430
- <td>0.53720</td>
431
- </tr>
432
- <tr>
433
- <td>TruncationSelection(0.3)</td>
434
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
435
- <td>ListMutator([:expected_n, 2],:flip)</td>
436
- <td>1.00000</td>
437
- <td>4.00000</td>
438
- <td>1.76000</td>
439
- <td>0.81388</td>
440
- <td>0.30953</td>
441
- </tr>
442
- <tr>
443
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
444
- <td>SingleChild(UniformCrossover)</td>
445
- <td>ListMutator([:expected_n, 1],:flip)</td>
446
- <td>0.00000</td>
447
- <td>4.00000</td>
448
- <td>1.68000</td>
449
- <td>0.76000</td>
450
- <td>0.68023</td>
451
- </tr>
452
- <tr>
453
- <td>TruncationSelection(0.3)</td>
454
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
455
- <td>ListMutator([:expected_n, 1],:flip)</td>
456
- <td>1.00000</td>
457
- <td>3.00000</td>
458
- <td>1.64000</td>
459
- <td>0.62482</td>
460
- <td>0.30953</td>
461
- </tr>
462
- <tr>
463
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
464
- <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
465
- <td>ListMutator([:expected_n, 1],:flip)</td>
466
- <td>0.00000</td>
467
- <td>4.00000</td>
468
- <td>1.54000</td>
469
- <td>0.87658</td>
470
- <td>0.53718</td>
471
- </tr>
472
- <tr>
473
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
474
- <td>SinglePointCrossover</td>
475
- <td>ListMutator([:expected_n, 1],:flip)</td>
476
- <td>0.00000</td>
477
- <td>4.00000</td>
478
- <td>1.52000</td>
479
- <td>1.04384</td>
480
- <td>0.50232</td>
481
- </tr>
482
- <tr>
483
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
484
- <td>UniformCrossover</td>
485
- <td>ListMutator([:expected_n, 1],:flip)</td>
486
- <td>0.00000</td>
487
- <td>3.00000</td>
488
- <td>1.46000</td>
489
- <td>0.87658</td>
490
- <td>0.58022</td>
491
- </tr>
492
- <tr>
493
- <td>TruncationSelection(0.3)</td>
494
- <td>SinglePointCrossover</td>
495
- <td>ListMutator([:expected_n, 1],:flip)</td>
496
- <td>0.00000</td>
497
- <td>4.00000</td>
498
- <td>1.36000</td>
499
- <td>1.09105</td>
500
- <td>0.27974</td>
501
- </tr>
502
- </table>
503
- </body>
504
- </html>