charlie 0.5.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 (54) hide show
  1. data/History.txt +3 -0
  2. data/Manifest.txt +53 -0
  3. data/README.txt +90 -0
  4. data/Rakefile +43 -0
  5. data/TODO.txt +28 -0
  6. data/data/BENCHMARK +53 -0
  7. data/data/CROSSOVER +49 -0
  8. data/data/GENOTYPE +49 -0
  9. data/data/MUTATION +43 -0
  10. data/data/SELECTION +48 -0
  11. data/data/template.html +34 -0
  12. data/examples/bit.rb +10 -0
  13. data/examples/function_opt_2peak.rb +24 -0
  14. data/examples/function_opt_sombero.rb +38 -0
  15. data/examples/gladiatorial_simple.rb +17 -0
  16. data/examples/gladiatorial_sunburn.rb +89 -0
  17. data/examples/gridwalk.rb +29 -0
  18. data/examples/output/flattened_sombero.html +6400 -0
  19. data/examples/output/flattened_sombero2_.html +3576 -0
  20. data/examples/output/fopt1_dblopt.html +2160 -0
  21. data/examples/output/hill10.html +5816 -0
  22. data/examples/output/hill2.csv +24 -0
  23. data/examples/output/hill2.html +384 -0
  24. data/examples/output/royalroad1_report.html +1076 -0
  25. data/examples/output/royalroad2_report.html +1076 -0
  26. data/examples/output/royalroadquick_report.html +504 -0
  27. data/examples/output/tsp.html +632 -0
  28. data/examples/output/weasel1_report.html +1076 -0
  29. data/examples/output/weasel2_report.html +240 -0
  30. data/examples/royalroad.rb +26 -0
  31. data/examples/royalroad2.rb +18 -0
  32. data/examples/simple_climb_hill2.rb +47 -0
  33. data/examples/tsp.rb +35 -0
  34. data/examples/weasel.rb +36 -0
  35. data/lib/charlie.rb +35 -0
  36. data/lib/charlie/crossover.rb +49 -0
  37. data/lib/charlie/etc/minireport.rb +45 -0
  38. data/lib/charlie/etc/monkey.rb +136 -0
  39. data/lib/charlie/genotype.rb +45 -0
  40. data/lib/charlie/list/list_crossover.rb +30 -0
  41. data/lib/charlie/list/list_genotype.rb +53 -0
  42. data/lib/charlie/list/list_mutate.rb +75 -0
  43. data/lib/charlie/mutate.rb +25 -0
  44. data/lib/charlie/permutation/permutation.rb +47 -0
  45. data/lib/charlie/population.rb +156 -0
  46. data/lib/charlie/selection.rb +162 -0
  47. data/test/t_common.rb +32 -0
  48. data/test/test_basic.rb +32 -0
  49. data/test/test_benchmark.rb +56 -0
  50. data/test/test_cross.rb +28 -0
  51. data/test/test_mutator.rb +44 -0
  52. data/test/test_permutation.rb +23 -0
  53. data/test/test_sel.rb +39 -0
  54. metadata +115 -0
@@ -0,0 +1,504 @@
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>100</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>180000</td></tr>
42
+ <tr><td>Total time</td><td>3276.91 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>7.00000</td>
50
+ <td>2.96111</td>
51
+ <td>1.35468</td>
52
+ <td>1.82050</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>7.00000</td>
60
+ <td>4.21167</td>
61
+ <td>1.16485</td>
62
+ <td>1.54524</td>
63
+ </tr>
64
+ <tr>
65
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
66
+ <td>0.00000</td>
67
+ <td>5.00000</td>
68
+ <td>2.40500</td>
69
+ <td>0.88184</td>
70
+ <td>1.79987</td>
71
+ </tr>
72
+ <tr>
73
+ <td>TruncationSelection(0.3)</td>
74
+ <td>0.00000</td>
75
+ <td>6.00000</td>
76
+ <td>2.26667</td>
77
+ <td>1.00775</td>
78
+ <td>2.11639</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>UniformCrossover</td>
84
+ <td>0.00000</td>
85
+ <td>7.00000</td>
86
+ <td>3.08000</td>
87
+ <td>1.37042</td>
88
+ <td>1.93908</td>
89
+ </tr>
90
+ <tr>
91
+ <td>SingleChild(UniformCrossover)</td>
92
+ <td>0.00000</td>
93
+ <td>6.00000</td>
94
+ <td>3.05556</td>
95
+ <td>1.32465</td>
96
+ <td>1.91963</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.90889</td>
103
+ <td>1.34599</td>
104
+ <td>1.64149</td>
105
+ </tr>
106
+ <tr>
107
+ <td>SinglePointCrossover</td>
108
+ <td>0.00000</td>
109
+ <td>7.00000</td>
110
+ <td>2.80000</td>
111
+ <td>1.35810</td>
112
+ <td>1.78179</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>7.00000</td>
120
+ <td>3.24500</td>
121
+ <td>1.30447</td>
122
+ <td>1.78685</td>
123
+ </tr>
124
+ <tr>
125
+ <td>ListMutator([:expected_n, 2],:flip)</td>
126
+ <td>1.00000</td>
127
+ <td>7.00000</td>
128
+ <td>3.13167</td>
129
+ <td>1.38480</td>
130
+ <td>1.86117</td>
131
+ </tr>
132
+ <tr>
133
+ <td>ListMutator([:expected_n, 1],:flip)</td>
134
+ <td>0.00000</td>
135
+ <td>7.00000</td>
136
+ <td>2.50667</td>
137
+ <td>1.25298</td>
138
+ <td>1.81348</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>3.00000</td>
147
+ <td>7.00000</td>
148
+ <td>4.90000</td>
149
+ <td>0.80623</td>
150
+ <td>1.51403</td>
151
+ </tr>
152
+ <tr>
153
+ <td>TournamentSelection(4,nil)</td>
154
+ <td>SingleChild(UniformCrossover)</td>
155
+ <td>ListMutator([:expected_n, 2],:flip)</td>
156
+ <td>3.00000</td>
157
+ <td>6.00000</td>
158
+ <td>4.68000</td>
159
+ <td>0.85884</td>
160
+ <td>1.81968</td>
161
+ </tr>
162
+ <tr>
163
+ <td>TournamentSelection(4,nil)</td>
164
+ <td>UniformCrossover</td>
165
+ <td>ListMutator([:expected_n, 2],:flip)</td>
166
+ <td>3.00000</td>
167
+ <td>7.00000</td>
168
+ <td>4.60000</td>
169
+ <td>1.11355</td>
170
+ <td>1.56651</td>
171
+ </tr>
172
+ <tr>
173
+ <td>TournamentSelection(4,nil)</td>
174
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
175
+ <td>ListMutator([:expected_n, 3],:flip)</td>
176
+ <td>3.00000</td>
177
+ <td>6.00000</td>
178
+ <td>4.60000</td>
179
+ <td>0.87178</td>
180
+ <td>1.37833</td>
181
+ </tr>
182
+ <tr>
183
+ <td>TournamentSelection(4,nil)</td>
184
+ <td>SingleChild(UniformCrossover)</td>
185
+ <td>ListMutator([:expected_n, 3],:flip)</td>
186
+ <td>3.00000</td>
187
+ <td>6.00000</td>
188
+ <td>4.60000</td>
189
+ <td>0.77460</td>
190
+ <td>1.94023</td>
191
+ </tr>
192
+ <tr>
193
+ <td>TournamentSelection(4,nil)</td>
194
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
195
+ <td>ListMutator([:expected_n, 2],:flip)</td>
196
+ <td>2.00000</td>
197
+ <td>6.00000</td>
198
+ <td>4.58000</td>
199
+ <td>0.89644</td>
200
+ <td>1.59108</td>
201
+ </tr>
202
+ <tr>
203
+ <td>TournamentSelection(4,nil)</td>
204
+ <td>SinglePointCrossover</td>
205
+ <td>ListMutator([:expected_n, 3],:flip)</td>
206
+ <td>2.00000</td>
207
+ <td>7.00000</td>
208
+ <td>4.44000</td>
209
+ <td>1.06132</td>
210
+ <td>1.32623</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>7.00000</td>
218
+ <td>4.02000</td>
219
+ <td>1.19147</td>
220
+ <td>1.47279</td>
221
+ </tr>
222
+ <tr>
223
+ <td>TournamentSelection(4,nil)</td>
224
+ <td>UniformCrossover</td>
225
+ <td>ListMutator([:expected_n, 1],:flip)</td>
226
+ <td>1.00000</td>
227
+ <td>6.00000</td>
228
+ <td>3.74000</td>
229
+ <td>1.11014</td>
230
+ <td>1.43963</td>
231
+ </tr>
232
+ <tr>
233
+ <td>TournamentSelection(4,nil)</td>
234
+ <td>SingleChild(UniformCrossover)</td>
235
+ <td>ListMutator([:expected_n, 1],:flip)</td>
236
+ <td>0.00000</td>
237
+ <td>6.00000</td>
238
+ <td>3.62000</td>
239
+ <td>1.21474</td>
240
+ <td>1.76231</td>
241
+ </tr>
242
+ <tr>
243
+ <td>TournamentSelection(4,nil)</td>
244
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
245
+ <td>ListMutator([:expected_n, 1],:flip)</td>
246
+ <td>1.00000</td>
247
+ <td>6.00000</td>
248
+ <td>3.48000</td>
249
+ <td>1.06283</td>
250
+ <td>1.36237</td>
251
+ </tr>
252
+ <tr>
253
+ <td>TournamentSelection(4,nil)</td>
254
+ <td>SinglePointCrossover</td>
255
+ <td>ListMutator([:expected_n, 1],:flip)</td>
256
+ <td>1.00000</td>
257
+ <td>7.00000</td>
258
+ <td>3.28000</td>
259
+ <td>1.32725</td>
260
+ <td>1.36968</td>
261
+ </tr>
262
+ <tr>
263
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
264
+ <td>SinglePointCrossover</td>
265
+ <td>ListMutator([:expected_n, 2],:flip)</td>
266
+ <td>1.00000</td>
267
+ <td>5.00000</td>
268
+ <td>2.88000</td>
269
+ <td>0.93038</td>
270
+ <td>2.00299</td>
271
+ </tr>
272
+ <tr>
273
+ <td>TruncationSelection(0.3)</td>
274
+ <td>SingleChild(UniformCrossover)</td>
275
+ <td>ListMutator([:expected_n, 3],:flip)</td>
276
+ <td>1.00000</td>
277
+ <td>5.00000</td>
278
+ <td>2.78000</td>
279
+ <td>0.90089</td>
280
+ <td>2.03387</td>
281
+ </tr>
282
+ <tr>
283
+ <td>TruncationSelection(0.3)</td>
284
+ <td>UniformCrossover</td>
285
+ <td>ListMutator([:expected_n, 3],:flip)</td>
286
+ <td>1.00000</td>
287
+ <td>6.00000</td>
288
+ <td>2.72000</td>
289
+ <td>1.02059</td>
290
+ <td>2.39684</td>
291
+ </tr>
292
+ <tr>
293
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
294
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
295
+ <td>ListMutator([:expected_n, 3],:flip)</td>
296
+ <td>1.00000</td>
297
+ <td>4.00000</td>
298
+ <td>2.64000</td>
299
+ <td>0.71442</td>
300
+ <td>1.46189</td>
301
+ </tr>
302
+ <tr>
303
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
304
+ <td>UniformCrossover</td>
305
+ <td>ListMutator([:expected_n, 2],:flip)</td>
306
+ <td>1.00000</td>
307
+ <td>4.00000</td>
308
+ <td>2.56000</td>
309
+ <td>0.92000</td>
310
+ <td>1.91380</td>
311
+ </tr>
312
+ <tr>
313
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
314
+ <td>SinglePointCrossover</td>
315
+ <td>ListMutator([:expected_n, 3],:flip)</td>
316
+ <td>1.00000</td>
317
+ <td>4.00000</td>
318
+ <td>2.54000</td>
319
+ <td>0.63906</td>
320
+ <td>2.28756</td>
321
+ </tr>
322
+ <tr>
323
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
324
+ <td>SingleChild(UniformCrossover)</td>
325
+ <td>ListMutator([:expected_n, 3],:flip)</td>
326
+ <td>1.00000</td>
327
+ <td>4.00000</td>
328
+ <td>2.54000</td>
329
+ <td>0.63906</td>
330
+ <td>1.86339</td>
331
+ </tr>
332
+ <tr>
333
+ <td>TruncationSelection(0.3)</td>
334
+ <td>UniformCrossover</td>
335
+ <td>ListMutator([:expected_n, 2],:flip)</td>
336
+ <td>1.00000</td>
337
+ <td>4.00000</td>
338
+ <td>2.54000</td>
339
+ <td>0.82970</td>
340
+ <td>2.37022</td>
341
+ </tr>
342
+ <tr>
343
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
344
+ <td>UniformCrossover</td>
345
+ <td>ListMutator([:expected_n, 3],:flip)</td>
346
+ <td>1.00000</td>
347
+ <td>4.00000</td>
348
+ <td>2.50000</td>
349
+ <td>0.72801</td>
350
+ <td>1.53284</td>
351
+ </tr>
352
+ <tr>
353
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
354
+ <td>SingleChild(UniformCrossover)</td>
355
+ <td>ListMutator([:expected_n, 2],:flip)</td>
356
+ <td>1.00000</td>
357
+ <td>5.00000</td>
358
+ <td>2.48000</td>
359
+ <td>0.85417</td>
360
+ <td>1.86124</td>
361
+ </tr>
362
+ <tr>
363
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
364
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
365
+ <td>ListMutator([:expected_n, 2],:flip)</td>
366
+ <td>1.00000</td>
367
+ <td>4.00000</td>
368
+ <td>2.44000</td>
369
+ <td>0.77872</td>
370
+ <td>1.40028</td>
371
+ </tr>
372
+ <tr>
373
+ <td>TruncationSelection(0.3)</td>
374
+ <td>SingleChild(UniformCrossover)</td>
375
+ <td>ListMutator([:expected_n, 2],:flip)</td>
376
+ <td>1.00000</td>
377
+ <td>5.00000</td>
378
+ <td>2.44000</td>
379
+ <td>1.09836</td>
380
+ <td>2.11516</td>
381
+ </tr>
382
+ <tr>
383
+ <td>TruncationSelection(0.3)</td>
384
+ <td>SinglePointCrossover</td>
385
+ <td>ListMutator([:expected_n, 3],:flip)</td>
386
+ <td>0.00000</td>
387
+ <td>5.00000</td>
388
+ <td>2.40000</td>
389
+ <td>0.91652</td>
390
+ <td>2.02960</td>
391
+ </tr>
392
+ <tr>
393
+ <td>TruncationSelection(0.3)</td>
394
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
395
+ <td>ListMutator([:expected_n, 3],:flip)</td>
396
+ <td>1.00000</td>
397
+ <td>4.00000</td>
398
+ <td>2.28000</td>
399
+ <td>0.91739</td>
400
+ <td>1.67735</td>
401
+ </tr>
402
+ <tr>
403
+ <td>TruncationSelection(0.3)</td>
404
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
405
+ <td>ListMutator([:expected_n, 2],:flip)</td>
406
+ <td>1.00000</td>
407
+ <td>5.00000</td>
408
+ <td>2.24000</td>
409
+ <td>1.08738</td>
410
+ <td>2.26213</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>2.20000</td>
419
+ <td>0.82462</td>
420
+ <td>2.05069</td>
421
+ </tr>
422
+ <tr>
423
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
424
+ <td>UniformCrossover</td>
425
+ <td>ListMutator([:expected_n, 1],:flip)</td>
426
+ <td>0.00000</td>
427
+ <td>4.00000</td>
428
+ <td>2.16000</td>
429
+ <td>0.80895</td>
430
+ <td>2.36203</td>
431
+ </tr>
432
+ <tr>
433
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
434
+ <td>SingleChild(UniformCrossover)</td>
435
+ <td>ListMutator([:expected_n, 1],:flip)</td>
436
+ <td>0.00000</td>
437
+ <td>5.00000</td>
438
+ <td>2.16000</td>
439
+ <td>1.10200</td>
440
+ <td>1.83014</td>
441
+ </tr>
442
+ <tr>
443
+ <td>TruncationSelection(0.3)</td>
444
+ <td>SinglePointCrossover</td>
445
+ <td>ListMutator([:expected_n, 2],:flip)</td>
446
+ <td>1.00000</td>
447
+ <td>5.00000</td>
448
+ <td>2.12000</td>
449
+ <td>1.14263</td>
450
+ <td>1.95818</td>
451
+ </tr>
452
+ <tr>
453
+ <td>TruncationSelection(0.3)</td>
454
+ <td>UniformCrossover</td>
455
+ <td>ListMutator([:expected_n, 1],:flip)</td>
456
+ <td>1.00000</td>
457
+ <td>5.00000</td>
458
+ <td>2.00000</td>
459
+ <td>0.95917</td>
460
+ <td>2.35582</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>2.00000</td>
469
+ <td>0.95917</td>
470
+ <td>1.37467</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.96000</td>
479
+ <td>0.89353</td>
480
+ <td>1.70761</td>
481
+ </tr>
482
+ <tr>
483
+ <td>TruncationSelection(0.3)</td>
484
+ <td>PCross(0.75,UniformCrossover,NullCrossover)</td>
485
+ <td>ListMutator([:expected_n, 1],:flip)</td>
486
+ <td>1.00000</td>
487
+ <td>4.00000</td>
488
+ <td>1.92000</td>
489
+ <td>0.79599</td>
490
+ <td>2.26532</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>3.00000</td>
498
+ <td>1.56000</td>
499
+ <td>0.85229</td>
500
+ <td>1.88150</td>
501
+ </tr>
502
+ </table>
503
+ </body>
504
+ </html>