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,10 +1,62 @@
1
- require '../lib/charlie'
1
+ begin
2
+ require '../lib/charlie'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'charlie'
6
+ end
7
+
8
+ if ARGV[0].nil?
9
+ puts "Several examples for Co-evolution."
10
+ puts "Usage: ruby coevolution.rb simple|sunburn"
11
+
12
+
13
+
14
+
15
+ elsif ARGV[0].downcase.gsub(/[^a-z]/,'') == 'simple'
16
+
17
+
18
+
19
+
20
+ puts "Running a simple co-evolutionary genetic algorithm. Drives the first gene towards +infinity, and the second towards -infinity."
21
+
22
+ class TestFighter < FloatListGenotype(2)
23
+ def fight(other) # fight(other) return true if self wins, false if self loses
24
+ if rand < 0.5
25
+ genes[0] >= other.genes[0]
26
+ else
27
+ genes[1] <= other.genes[1]
28
+ end
29
+ end
30
+
31
+ def to_s
32
+ genes.map{|f| '%02f' % f }.join(', ')
33
+ end
34
+ use GladiatorialSelection
35
+ use UniformCrossover
36
+ use ListMutator(:expected_n[1],:gaussian[0.25])
37
+ end
38
+
39
+ pop = Population.new(TestFighter,10).evolve_silent(500)
40
+ puts pop
41
+
42
+
43
+
44
+
2
45
 
3
- # The sunburn fighter genotype consists of 20 characters and an integer.
46
+ elsif ARGV[0].downcase.gsub(/[^a-z]/,'') == 'sunburn'
47
+
48
+
49
+ puts "Running a co-evolutionary genetic algorithm for strings that represent combatting space ships."
50
+ puts "M - Missile, most effective at long ranges."
51
+ puts "L - Laser , medium effectiveness at all ranges."
52
+ puts "G - Gun , most effective at short ranges."
53
+ puts "S - 3 Shields, soak up damage."
54
+ puts "D - Drive, can change distance to other ship, need to have at least one left to claim a win."
55
+
56
+ # The sunburn fighter genotype consists of 20 characters and an integer (its preferred starting range).
4
57
  # These represent spaceships, who fight and co-evolve
5
58
  # One of the ways to make such a mixed genotype is to do the mutation of one half yourself.
6
59
  # This is one of the harder things to do.
7
-
8
60
  class SunburnFighter < StringGenotype(20,"SGLMD")
9
61
 
10
62
  def initialize
@@ -20,6 +72,19 @@ class SunburnFighter < StringGenotype(20,"SGLMD")
20
72
  'S'=>proc{|r| 0.0 } # shields don't fire
21
73
  }
22
74
 
75
+ def genes
76
+ super + [@gene_range]
77
+ end
78
+
79
+ def genes=(g)
80
+ @gene_range = g.pop
81
+ super(g)
82
+ end
83
+
84
+ def weapons
85
+ genes[0..-2]
86
+ end
87
+
23
88
  def fight(other)
24
89
  pref_range = [self.gene_range, other.gene_range]
25
90
  cur_range = pref_range.sum / 2.0
@@ -27,7 +92,8 @@ class SunburnFighter < StringGenotype(20,"SGLMD")
27
92
  weap = [self.weapons,other.weapons]
28
93
  weap = weap.map{|w| s = w.count{|e|e=='S'}*3 ; w.delete 'S'; ['S']*s + w } # fix shields in front
29
94
  # fight
30
- 100.times{
95
+
96
+ 100.times{ # 100 turns at most
31
97
  dmg = [0,1].map{|t| weap[t].map{|w| rand < WEAPONS[w].call(cur_range) ? 1 : 0 }.sum } # calculate and sum up damage
32
98
  [0,1].each{|t| weap[t] = weap[t][dmg[1-t]..-1] || [] } # apply damage
33
99
  break if weap.any?(&:empty?) # is one of the ships destroyed?
@@ -50,31 +116,20 @@ class SunburnFighter < StringGenotype(20,"SGLMD")
50
116
  "#{@genes.join} #{'%.1f' % @gene_range}"
51
117
  end
52
118
 
53
- def genes
54
- super + [@gene_range]
55
- end
56
- def weapons
57
- genes[0..-2]
58
- end
59
-
60
- def genes=(g)
61
- @gene_range = g.pop
62
- super(g)
63
- end
64
-
65
119
  def mutate!
66
120
  @gene_range = PointMutators[:uniform].call(@gene_range,2.0)
67
121
  super
68
122
  end
69
123
 
70
- use GladiatorialSelection
71
- use UniformCrossover
124
+ use GladiatorialSelection, UniformCrossover
72
125
  end
73
126
 
74
- # The result of this is a population of ships with (many missiles & high pref. range) or (many guns & low pref. range), both cases they will have some shields and a drive near the end
127
+ puts '-'*75
128
+ puts "Running first test"
129
+
75
130
 
76
131
  pop = Population.new(SunburnFighter,20).evolve_silent(200)
77
- puts "Test 1",pop
132
+ puts "Results:",pop
78
133
 
79
134
  # other effectiveness curves, much slower/longer fights
80
135
  SunburnFighter::WEAPONS.replace( {'L'=>proc{|r| 0.6 / ((r-6)**2 + 1) },
@@ -83,7 +138,10 @@ SunburnFighter::WEAPONS.replace( {'L'=>proc{|r| 0.6 / ((r-6)**2 + 1) },
83
138
  'D'=>proc{|r| 0.0 },
84
139
  'S'=>proc{|r| 0.0 }
85
140
  })
86
-
141
+ puts "Second test. More local effectiveness ranges, fights take longer."
87
142
  pop = Population.new(SunburnFighter,20).evolve_silent(50)
88
- puts "Test 2",pop
143
+ puts "Results:",pop
144
+
145
+
89
146
 
147
+ end
@@ -0,0 +1,113 @@
1
+ begin
2
+ require '../lib/charlie'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'charlie'
6
+ end
7
+
8
+
9
+ if ARGV[0].nil?
10
+ puts "Usage: ruby function_optimization.rb hill|twopeak|sombero"
11
+
12
+
13
+ elsif ARGV[0].downcase.gsub(/[^a-z]/,'') == 'hill'
14
+
15
+
16
+
17
+ puts "Running a genetic algorithm for maximizing a simple hill function in ten dimensions."
18
+ puts
19
+
20
+ class Hill10 < FloatListGenotype(10,(-1..1)) # 10-dimensional simple hill function
21
+ def fitness
22
+ 1 / (1 + genes.inject(0){|s,x|s+x*x})
23
+ end
24
+ def to_s # don't need the precision of genes.inspect
25
+ '(' + genes.map{|x| '%.02f' % x }.join(',') + ')'
26
+ end
27
+ use TournamentSelection(3), UniformCrossover, ListMutator([:expected_n, 3],[:gaussian, 0.2])
28
+ end
29
+
30
+ pop = Population.new(Hill10)
31
+ pop.evolve_on_console
32
+ puts "---------- Setting different mutator ---------- "
33
+ Hill10.use ListMutator([:expected_n, 2],[:gaussian, 0.01])
34
+ pop_array = pop.evolve_on_console(50)
35
+
36
+ puts "Best solution: #{pop_array.max.genes.inspect}"
37
+
38
+
39
+ elsif ARGV[0].downcase.gsub(/[^a-z]/,'') == 'twopeak'
40
+
41
+
42
+
43
+ output_file = 'output/function_optimization_twopeak.html'
44
+ csv_output_file = 'output/function_optimization_twopeak.csv'
45
+
46
+
47
+ puts "Running benchmark for maximizing a function of one variable that has two peaks.\n The left peak is higher than the right peak, but all starting positions are within the right peak.\nThis takes about 90 seconds and produces output in #{output_file} and #{csv_output_file}."
48
+
49
+ class TwoPeakFunction < FloatListGenotype(1,(0..1))
50
+ def fitness
51
+ x = genes.first
52
+ x += 0.5 # all starting position right in the middle of the local maximum hill
53
+ 3.1 / (1 + (40*x-4)**2) + 2.0 / (1+(3*x-2.4)**4) # two peaks, the left one being higher but very thin.
54
+ end
55
+ use NullCrossover
56
+ end
57
+
58
+ GABenchmark.benchmark(TwoPeakFunction,output_file,csv_output_file) {
59
+ selection BestOnlySelection, TournamentSelection(3), TournamentSelection(4), Elitism(RouletteSelection,1), Elitism(ScaledRouletteSelection(),1), RouletteSelection, ScaledRouletteSelection
60
+
61
+ mt = [:probability[0.5],:probability[0.75],:probability[1.0]].map{|s|
62
+ [:uniform[0.1],:uniform[0.2],:uniform[0.4],:uniform[0.8],:uniform[1.6],:gaussian[0.1],:gaussian[0.2],:gaussian[0.4],:gaussian[0.8],:gaussian[1.6]].map{|p| ListMutator(s,p) } }.flatten
63
+
64
+ mutator *mt
65
+ generations 10
66
+ population_size 20
67
+ repeat 100
68
+ }
69
+
70
+
71
+
72
+
73
+ elsif ARGV[0].downcase.gsub(/[^a-z]/,'') == 'sombrero'
74
+
75
+
76
+
77
+
78
+
79
+ output_file = 'output/function_optimization_sombrero.html'
80
+
81
+ puts "Running benchmark for maximizing a function of two variables with several local maxima.\n The middle peak is the highest, but is surrounded by a chasm.\nThis takes about 50 seconds and produces output in #{output_file}."
82
+
83
+ class Sombero < FloatListGenotype(2,(-4*Math::PI..4*Math::PI))
84
+ def fitness
85
+ x,y=genes
86
+ 1 + ( Math.cos(Math.sqrt(x*x+y*y)) / (1+0.1*(x*x+y*y)) )
87
+ end
88
+ end
89
+
90
+ GABenchmark.benchmark(Sombero,output_file) {
91
+ selection BestOnlySelection, TournamentSelection(3), TournamentSelection(4), Elitism(RouletteSelection), Elitism(ScaledRouletteSelection)
92
+ crossover NullCrossover, SinglePointCrossover
93
+
94
+ mt = [:n_point[1],:n_point[2]].map{|s|
95
+ [:uniform[ 0.4],:uniform[ 0.8],:uniform[ 1.6],:uniform[ 3.2],:uniform[ 6.4],
96
+ :gaussian[0.4],:gaussian[0.8],:gaussian[1.6],:gaussian[3.2],:gaussian[6.4]].map{|p| ListMutator(s,p)
97
+ }
98
+ }.flatten
99
+
100
+ mutator *mt
101
+ generations 15
102
+ population_size 10
103
+ repeat 50
104
+ }
105
+
106
+
107
+ end
108
+
109
+
110
+
111
+
112
+
113
+
@@ -8,6 +8,7 @@
8
8
  table{
9
9
  background: #ccc;
10
10
  font-family: Verdana, Helvetica, sans-serif;
11
+ font-size: small;
11
12
  }
12
13
  th {
13
14
  background: #666;
@@ -18,7 +19,7 @@
18
19
  td {
19
20
  color: #333;
20
21
  background: #e2e2e2;
21
- padding: 2px;
22
+ padding: 2px 3px;
22
23
  text-align: center;
23
24
  }
24
25
  </style>
@@ -29,1047 +30,1213 @@
29
30
  </script>
30
31
  </head>
31
32
  <body>
32
- <h1>Information</h1>
33
+ <h1>Information</h1>
33
34
 
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>90</td></tr>
39
- <tr><td>Tests repeated </td><td>10 times</td></tr>
40
- <tr><td>Number of runs </td><td>900</td></tr>
41
- <tr><td>Total number of generations </td><td>45000</td></tr>
42
- <tr><td>Total time</td><td>845.77 seconds</td></tr>
43
- </table
35
+ <table>
36
+ <tr><th colspan=2>Version Info</th></tr>
37
+ <tr><td>Ruby Install Name</td><td>ruby1.9</td></tr>
38
+ <tr><td>Ruby Version</td><td>1.9.0</td></tr>
39
+ <tr><td>Charlie Version</td><td>0.7.0</td></tr>
40
+ <tr><th colspan=2>Benchmark Info</th></tr>
41
+ <tr><td>Genotype class</td><td>RoyalRoad</td></tr>
42
+ <tr><td>Population size</td><td>20</td></tr>
43
+ <tr><td>Number of generations per run</td><td>100</td></tr>
44
+ <tr><td>Number of tests </td><td>105</td></tr>
45
+ <tr><td>Tests repeated </td><td>10 times</td></tr>
46
+ <tr><td>Number of runs </td><td>1050</td></tr>
47
+ <tr><td>Total number of generations </td><td>105000</td></tr>
48
+ <tr><td>Total time</td><td>162.89 seconds</td></tr>
49
+ <tr><th colspan=2>Best Solution Info</th></tr>
50
+ <tr><td>Fitness</td><td>7</td></tr>
51
+ <tr><td>Solution</td><td><textarea rows=3 cols=40>1111111111111111111111110000010011111111111111111111111101010010</textarea></td></tr>
52
+ </table>
44
53
  <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>
54
+ <tr><th></th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>time</th></tr>
46
55
  <tr>
47
56
  <td>All</td>
48
- <td>0.00000</td>
57
+ <td>1.00000</td>
49
58
  <td>7.00000</td>
50
- <td>1.60000</td>
51
- <td>1.06040</td>
52
- <td>0.93972</td>
59
+ <td>2.78381</td>
60
+ <td>1.24362</td>
61
+ <td>0.15512</td>
53
62
  </tr>
54
63
  </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>Elitism(RouletteSelection,1)</td>
58
- <td>0.00000</td>
59
- <td>5.00000</td>
60
- <td>1.94445</td>
61
- <td>0.86745</td>
62
- <td>3.42010</td>
63
- </tr>
64
+ <tr><th>selection</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>time</th></tr>
64
65
  <tr>
65
66
  <td>TruncationSelection(0.3)</td>
66
- <td>0.00000</td>
67
- <td>4.00000</td>
68
- <td>1.91667</td>
69
- <td>1.02130</td>
70
- <td>0.25439</td>
67
+ <td>1.00000</td>
68
+ <td>7.00000</td>
69
+ <td>3.29524</td>
70
+ <td>1.18260</td>
71
+ <td>0.13343</td>
71
72
  </tr>
72
73
  <tr>
73
74
  <td>TruncationSelection(1)</td>
74
- <td>0.00000</td>
75
+ <td>1.00000</td>
75
76
  <td>7.00000</td>
76
- <td>1.85556</td>
77
- <td>1.09098</td>
78
- <td>0.25826</td>
77
+ <td>3.21905</td>
78
+ <td>1.22654</td>
79
+ <td>0.11895</td>
79
80
  </tr>
80
81
  <tr>
81
82
  <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
82
- <td>0.00000</td>
83
- <td>4.00000</td>
84
- <td>1.77778</td>
85
- <td>0.88541</td>
86
- <td>0.45831</td>
83
+ <td>1.00000</td>
84
+ <td>6.00000</td>
85
+ <td>3.04286</td>
86
+ <td>0.93761</td>
87
+ <td>0.17777</td>
87
88
  </tr>
88
89
  <tr>
89
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
90
- <td>0.00000</td>
91
- <td>2.00000</td>
92
- <td>0.50556</td>
93
- <td>0.58212</td>
94
- <td>0.30752</td>
90
+ <td>Elitism(RouletteSelection,1)</td>
91
+ <td>1.00000</td>
92
+ <td>6.00000</td>
93
+ <td>3.03333</td>
94
+ <td>0.97289</td>
95
+ <td>0.18500</td>
96
+ </tr>
97
+ <tr>
98
+ <td>RouletteSelection</td>
99
+ <td>1.00000</td>
100
+ <td>4.00000</td>
101
+ <td>1.32857</td>
102
+ <td>0.55347</td>
103
+ <td>0.16043</td>
95
104
  </tr>
96
105
  </table><h1>Stats for crossover</h1><table>
97
- <tr><th>crossover</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>avg-time</th></tr>
106
+ <tr><th>crossover</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>time</th></tr>
98
107
  <tr>
99
108
  <td>UniformCrossover</td>
100
- <td>0.00000</td>
109
+ <td>1.00000</td>
101
110
  <td>7.00000</td>
102
- <td>1.78000</td>
103
- <td>1.10375</td>
104
- <td>1.01873</td>
111
+ <td>2.90286</td>
112
+ <td>1.25891</td>
113
+ <td>0.17519</td>
105
114
  </tr>
106
115
  <tr>
107
116
  <td>SinglePointCrossover</td>
108
- <td>0.00000</td>
109
- <td>5.00000</td>
110
- <td>1.55000</td>
111
- <td>1.05238</td>
112
- <td>0.72877</td>
117
+ <td>1.00000</td>
118
+ <td>7.00000</td>
119
+ <td>2.83714</td>
120
+ <td>1.27808</td>
121
+ <td>0.14909</td>
113
122
  </tr>
114
123
  <tr>
115
124
  <td>NullCrossover</td>
116
- <td>0.00000</td>
117
- <td>5.00000</td>
118
- <td>1.47000</td>
119
- <td>0.99788</td>
120
- <td>1.07165</td>
125
+ <td>1.00000</td>
126
+ <td>6.00000</td>
127
+ <td>2.61143</td>
128
+ <td>1.17249</td>
129
+ <td>0.14107</td>
121
130
  </tr>
122
131
  </table><h1>Stats for mutation</h1><table>
123
- <tr><th>mutation</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>avg-time</th></tr>
132
+ <tr><th>mutation</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>time</th></tr>
124
133
  <tr>
125
- <td>ListMutator([:expected_n, 3],:flip)</td>
126
- <td>0.00000</td>
127
- <td>5.00000</td>
128
- <td>1.81333</td>
129
- <td>1.07323</td>
130
- <td>0.94616</td>
134
+ <td>ListMutator([:expected_n, 6],:flip)</td>
135
+ <td>1.00000</td>
136
+ <td>6.00000</td>
137
+ <td>3.18667</td>
138
+ <td>1.22413</td>
139
+ <td>0.16887</td>
131
140
  </tr>
132
141
  <tr>
133
- <td>ListMutator([:n_point, 3],:flip)</td>
134
- <td>0.00000</td>
135
- <td>4.00000</td>
136
- <td>1.77333</td>
137
- <td>1.06550</td>
138
- <td>0.91609</td>
142
+ <td>ListMutator([:expected_n, 4],:flip)</td>
143
+ <td>1.00000</td>
144
+ <td>7.00000</td>
145
+ <td>3.11333</td>
146
+ <td>1.25717</td>
147
+ <td>0.17088</td>
139
148
  </tr>
140
149
  <tr>
141
- <td>ListMutator([:n_point, 2],:flip)</td>
142
- <td>0.00000</td>
143
- <td>7.00000</td>
144
- <td>1.74000</td>
145
- <td>1.19683</td>
146
- <td>0.98259</td>
150
+ <td>ListMutator([:expected_n, 5],:flip)</td>
151
+ <td>1.00000</td>
152
+ <td>6.00000</td>
153
+ <td>3.08667</td>
154
+ <td>1.17721</td>
155
+ <td>0.17134</td>
147
156
  </tr>
148
157
  <tr>
149
- <td>ListMutator([:expected_n, 2],:flip)</td>
150
- <td>0.00000</td>
151
- <td>5.00000</td>
152
- <td>1.66000</td>
153
- <td>0.95100</td>
154
- <td>0.90221</td>
158
+ <td>ListMutator([:expected_n, 3],:flip)</td>
159
+ <td>1.00000</td>
160
+ <td>6.00000</td>
161
+ <td>3.05333</td>
162
+ <td>1.26905</td>
163
+ <td>0.17072</td>
155
164
  </tr>
156
165
  <tr>
157
- <td>ListMutator(:single_point,:flip)</td>
158
- <td>0.00000</td>
159
- <td>4.00000</td>
160
- <td>1.32667</td>
161
- <td>0.98317</td>
162
- <td>0.97113</td>
166
+ <td>ListMutator([:expected_n, 2],:flip)</td>
167
+ <td>1.00000</td>
168
+ <td>7.00000</td>
169
+ <td>2.92667</td>
170
+ <td>1.10813</td>
171
+ <td>0.16453</td>
163
172
  </tr>
164
173
  <tr>
165
174
  <td>ListMutator([:expected_n, 1],:flip)</td>
166
- <td>0.00000</td>
167
- <td>4.00000</td>
168
- <td>1.28667</td>
169
- <td>0.94047</td>
170
- <td>0.92011</td>
175
+ <td>1.00000</td>
176
+ <td>6.00000</td>
177
+ <td>2.50000</td>
178
+ <td>1.07548</td>
179
+ <td>0.16253</td>
180
+ </tr>
181
+ <tr>
182
+ <td>NullMutator</td>
183
+ <td>1.00000</td>
184
+ <td>3.00000</td>
185
+ <td>1.62000</td>
186
+ <td>0.68964</td>
187
+ <td>0.07695</td>
171
188
  </tr>
172
- </table><h1>Raw Stats</h1><table>
173
- <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>
189
+ </table><h1>Detailed Stats</h1><table>
190
+ <tr><th>selection</th><th>crossover</th><th>mutation</th><th>min</th><th>max</th><th>avg</th><th>stddev</th><th>time</th></tr>
174
191
  <tr>
175
192
  <td>TruncationSelection(1)</td>
176
193
  <td>UniformCrossover</td>
177
- <td>ListMutator([:n_point, 2],:flip)</td>
178
- <td>1.00000</td>
179
- <td>7.00000</td>
180
- <td>3.30000</td>
181
- <td>1.61555</td>
182
- <td>0.26452</td>
194
+ <td>ListMutator([:expected_n, 3],:flip)</td>
195
+ <td>3.00000</td>
196
+ <td>6.00000</td>
197
+ <td>4.70000</td>
198
+ <td>1.10000</td>
199
+ <td>0.14945</td>
183
200
  </tr>
184
201
  <tr>
185
202
  <td>TruncationSelection(0.3)</td>
186
- <td>UniformCrossover</td>
187
- <td>ListMutator([:n_point, 3],:flip)</td>
188
- <td>2.00000</td>
189
- <td>4.00000</td>
190
- <td>2.90000</td>
191
- <td>0.94340</td>
192
- <td>0.29237</td>
203
+ <td>SinglePointCrossover</td>
204
+ <td>ListMutator([:expected_n, 6],:flip)</td>
205
+ <td>3.00000</td>
206
+ <td>6.00000</td>
207
+ <td>4.40000</td>
208
+ <td>1.11355</td>
209
+ <td>0.16796</td>
193
210
  </tr>
194
211
  <tr>
195
- <td>Elitism(RouletteSelection,1)</td>
212
+ <td>TruncationSelection(0.3)</td>
196
213
  <td>UniformCrossover</td>
197
- <td>ListMutator([:n_point, 3],:flip)</td>
198
- <td>2.00000</td>
214
+ <td>ListMutator([:expected_n, 6],:flip)</td>
199
215
  <td>3.00000</td>
200
- <td>2.50000</td>
201
- <td>0.50000</td>
202
- <td>2.86502</td>
216
+ <td>5.00000</td>
217
+ <td>4.30000</td>
218
+ <td>0.64031</td>
219
+ <td>0.16763</td>
203
220
  </tr>
204
221
  <tr>
205
222
  <td>TruncationSelection(1)</td>
206
223
  <td>SinglePointCrossover</td>
207
- <td>ListMutator([:expected_n, 3],:flip)</td>
208
- <td>1.00000</td>
209
- <td>5.00000</td>
210
- <td>2.40000</td>
211
- <td>1.28062</td>
212
- <td>0.28307</td>
224
+ <td>ListMutator([:expected_n, 4],:flip)</td>
225
+ <td>3.00000</td>
226
+ <td>7.00000</td>
227
+ <td>4.30000</td>
228
+ <td>1.10000</td>
229
+ <td>0.12164</td>
213
230
  </tr>
214
231
  <tr>
215
232
  <td>TruncationSelection(1)</td>
233
+ <td>SinglePointCrossover</td>
234
+ <td>ListMutator([:expected_n, 6],:flip)</td>
235
+ <td>2.00000</td>
236
+ <td>6.00000</td>
237
+ <td>4.20000</td>
238
+ <td>0.97980</td>
239
+ <td>0.12235</td>
240
+ </tr>
241
+ <tr>
242
+ <td>TruncationSelection(0.3)</td>
216
243
  <td>UniformCrossover</td>
217
- <td>ListMutator([:n_point, 3],:flip)</td>
218
- <td>1.00000</td>
244
+ <td>ListMutator([:expected_n, 2],:flip)</td>
245
+ <td>3.00000</td>
246
+ <td>7.00000</td>
219
247
  <td>4.00000</td>
220
- <td>2.40000</td>
221
- <td>0.80000</td>
222
- <td>0.26522</td>
248
+ <td>1.26491</td>
249
+ <td>0.16573</td>
250
+ </tr>
251
+ <tr>
252
+ <td>TruncationSelection(1)</td>
253
+ <td>UniformCrossover</td>
254
+ <td>ListMutator([:expected_n, 4],:flip)</td>
255
+ <td>3.00000</td>
256
+ <td>6.00000</td>
257
+ <td>3.90000</td>
258
+ <td>0.83066</td>
259
+ <td>0.14857</td>
260
+ </tr>
261
+ <tr>
262
+ <td>TruncationSelection(1)</td>
263
+ <td>UniformCrossover</td>
264
+ <td>ListMutator([:expected_n, 6],:flip)</td>
265
+ <td>2.00000</td>
266
+ <td>6.00000</td>
267
+ <td>3.90000</td>
268
+ <td>1.22066</td>
269
+ <td>0.14743</td>
223
270
  </tr>
224
271
  <tr>
225
272
  <td>TruncationSelection(0.3)</td>
226
273
  <td>UniformCrossover</td>
227
- <td>ListMutator([:n_point, 2],:flip)</td>
228
- <td>1.00000</td>
229
- <td>4.00000</td>
230
- <td>2.40000</td>
231
- <td>1.11355</td>
232
- <td>0.26665</td>
274
+ <td>ListMutator([:expected_n, 5],:flip)</td>
275
+ <td>3.00000</td>
276
+ <td>5.00000</td>
277
+ <td>3.80000</td>
278
+ <td>0.74833</td>
279
+ <td>0.16125</td>
233
280
  </tr>
234
281
  <tr>
235
- <td>Elitism(RouletteSelection,1)</td>
282
+ <td>TruncationSelection(1)</td>
236
283
  <td>NullCrossover</td>
237
- <td>ListMutator([:expected_n, 3],:flip)</td>
284
+ <td>ListMutator([:expected_n, 4],:flip)</td>
238
285
  <td>2.00000</td>
286
+ <td>5.00000</td>
287
+ <td>3.80000</td>
288
+ <td>0.97980</td>
289
+ <td>0.11877</td>
290
+ </tr>
291
+ <tr>
292
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
293
+ <td>NullCrossover</td>
294
+ <td>ListMutator([:expected_n, 4],:flip)</td>
295
+ <td>3.00000</td>
239
296
  <td>4.00000</td>
240
- <td>2.40000</td>
241
- <td>0.66332</td>
242
- <td>3.00555</td>
297
+ <td>3.80000</td>
298
+ <td>0.40000</td>
299
+ <td>0.18918</td>
243
300
  </tr>
244
301
  <tr>
245
302
  <td>TruncationSelection(0.3)</td>
246
303
  <td>SinglePointCrossover</td>
247
- <td>ListMutator([:expected_n, 3],:flip)</td>
248
- <td>1.00000</td>
249
- <td>4.00000</td>
250
- <td>2.40000</td>
251
- <td>0.80000</td>
252
- <td>0.27633</td>
304
+ <td>ListMutator([:expected_n, 5],:flip)</td>
305
+ <td>2.00000</td>
306
+ <td>5.00000</td>
307
+ <td>3.70000</td>
308
+ <td>1.10000</td>
309
+ <td>0.12845</td>
253
310
  </tr>
254
311
  <tr>
255
- <td>Elitism(RouletteSelection,1)</td>
256
- <td>NullCrossover</td>
257
- <td>ListMutator([:n_point, 2],:flip)</td>
258
- <td>0.00000</td>
259
- <td>4.00000</td>
260
- <td>2.30000</td>
261
- <td>1.10000</td>
262
- <td>7.43597</td>
312
+ <td>TruncationSelection(0.3)</td>
313
+ <td>SinglePointCrossover</td>
314
+ <td>ListMutator([:expected_n, 4],:flip)</td>
315
+ <td>3.00000</td>
316
+ <td>5.00000</td>
317
+ <td>3.70000</td>
318
+ <td>0.78102</td>
319
+ <td>0.17437</td>
263
320
  </tr>
264
321
  <tr>
265
322
  <td>Elitism(RouletteSelection,1)</td>
266
- <td>UniformCrossover</td>
323
+ <td>SinglePointCrossover</td>
267
324
  <td>ListMutator([:expected_n, 3],:flip)</td>
268
- <td>1.00000</td>
269
- <td>3.00000</td>
270
- <td>2.30000</td>
271
- <td>0.64031</td>
272
- <td>4.46960</td>
325
+ <td>2.00000</td>
326
+ <td>5.00000</td>
327
+ <td>3.70000</td>
328
+ <td>0.90000</td>
329
+ <td>0.26157</td>
273
330
  </tr>
274
331
  <tr>
275
332
  <td>Elitism(RouletteSelection,1)</td>
276
- <td>UniformCrossover</td>
277
- <td>ListMutator([:n_point, 2],:flip)</td>
278
- <td>1.00000</td>
333
+ <td>SinglePointCrossover</td>
334
+ <td>ListMutator([:expected_n, 4],:flip)</td>
279
335
  <td>3.00000</td>
280
- <td>2.30000</td>
336
+ <td>5.00000</td>
337
+ <td>3.70000</td>
281
338
  <td>0.64031</td>
282
- <td>2.69331</td>
339
+ <td>0.23560</td>
283
340
  </tr>
284
341
  <tr>
285
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
342
+ <td>TruncationSelection(1)</td>
286
343
  <td>UniformCrossover</td>
287
- <td>ListMutator([:expected_n, 1],:flip)</td>
288
- <td>1.00000</td>
289
- <td>4.00000</td>
290
- <td>2.30000</td>
291
- <td>0.78102</td>
292
- <td>0.58076</td>
344
+ <td>ListMutator([:expected_n, 5],:flip)</td>
345
+ <td>2.00000</td>
346
+ <td>6.00000</td>
347
+ <td>3.70000</td>
348
+ <td>1.10000</td>
349
+ <td>0.14773</td>
293
350
  </tr>
294
351
  <tr>
295
352
  <td>TruncationSelection(0.3)</td>
296
353
  <td>NullCrossover</td>
297
- <td>ListMutator([:expected_n, 3],:flip)</td>
298
- <td>1.00000</td>
299
- <td>4.00000</td>
300
- <td>2.30000</td>
301
- <td>0.78102</td>
302
- <td>0.27398</td>
354
+ <td>ListMutator([:expected_n, 5],:flip)</td>
355
+ <td>2.00000</td>
356
+ <td>6.00000</td>
357
+ <td>3.70000</td>
358
+ <td>1.26886</td>
359
+ <td>0.12683</td>
303
360
  </tr>
304
361
  <tr>
305
- <td>TruncationSelection(1)</td>
306
- <td>NullCrossover</td>
362
+ <td>TruncationSelection(0.3)</td>
363
+ <td>UniformCrossover</td>
364
+ <td>ListMutator([:expected_n, 4],:flip)</td>
365
+ <td>2.00000</td>
366
+ <td>6.00000</td>
367
+ <td>3.70000</td>
368
+ <td>1.26886</td>
369
+ <td>0.15812</td>
370
+ </tr>
371
+ <tr>
372
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
373
+ <td>SinglePointCrossover</td>
307
374
  <td>ListMutator([:expected_n, 3],:flip)</td>
308
- <td>1.00000</td>
375
+ <td>3.00000</td>
309
376
  <td>4.00000</td>
310
- <td>2.30000</td>
311
- <td>1.00499</td>
312
- <td>0.31126</td>
377
+ <td>3.70000</td>
378
+ <td>0.45826</td>
379
+ <td>0.16805</td>
313
380
  </tr>
314
381
  <tr>
315
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
316
- <td>UniformCrossover</td>
317
- <td>ListMutator([:expected_n, 2],:flip)</td>
318
- <td>1.00000</td>
382
+ <td>Elitism(RouletteSelection,1)</td>
383
+ <td>SinglePointCrossover</td>
384
+ <td>ListMutator([:expected_n, 5],:flip)</td>
319
385
  <td>3.00000</td>
320
- <td>2.20000</td>
321
- <td>0.60000</td>
322
- <td>0.58340</td>
386
+ <td>4.00000</td>
387
+ <td>3.60000</td>
388
+ <td>0.48990</td>
389
+ <td>0.21581</td>
323
390
  </tr>
324
391
  <tr>
325
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
392
+ <td>TruncationSelection(0.3)</td>
326
393
  <td>SinglePointCrossover</td>
327
- <td>ListMutator([:n_point, 3],:flip)</td>
394
+ <td>ListMutator([:expected_n, 3],:flip)</td>
328
395
  <td>2.00000</td>
396
+ <td>6.00000</td>
397
+ <td>3.60000</td>
398
+ <td>1.01980</td>
399
+ <td>0.15523</td>
400
+ </tr>
401
+ <tr>
402
+ <td>Elitism(RouletteSelection,1)</td>
403
+ <td>SinglePointCrossover</td>
404
+ <td>ListMutator([:expected_n, 6],:flip)</td>
329
405
  <td>3.00000</td>
330
- <td>2.20000</td>
331
- <td>0.40000</td>
332
- <td>0.40019</td>
406
+ <td>5.00000</td>
407
+ <td>3.60000</td>
408
+ <td>0.66332</td>
409
+ <td>0.17138</td>
333
410
  </tr>
334
411
  <tr>
335
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
412
+ <td>Elitism(RouletteSelection,1)</td>
336
413
  <td>UniformCrossover</td>
337
- <td>ListMutator([:n_point, 3],:flip)</td>
338
- <td>1.00000</td>
414
+ <td>ListMutator([:expected_n, 2],:flip)</td>
339
415
  <td>3.00000</td>
340
- <td>2.20000</td>
341
- <td>0.74833</td>
342
- <td>0.45955</td>
416
+ <td>6.00000</td>
417
+ <td>3.60000</td>
418
+ <td>0.91652</td>
419
+ <td>0.21291</td>
420
+ </tr>
421
+ <tr>
422
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
423
+ <td>NullCrossover</td>
424
+ <td>ListMutator([:expected_n, 3],:flip)</td>
425
+ <td>3.00000</td>
426
+ <td>5.00000</td>
427
+ <td>3.60000</td>
428
+ <td>0.66332</td>
429
+ <td>0.18658</td>
430
+ </tr>
431
+ <tr>
432
+ <td>TruncationSelection(1)</td>
433
+ <td>NullCrossover</td>
434
+ <td>ListMutator([:expected_n, 5],:flip)</td>
435
+ <td>2.00000</td>
436
+ <td>6.00000</td>
437
+ <td>3.60000</td>
438
+ <td>1.01980</td>
439
+ <td>0.11830</td>
343
440
  </tr>
344
441
  <tr>
345
442
  <td>TruncationSelection(0.3)</td>
346
443
  <td>UniformCrossover</td>
347
444
  <td>ListMutator([:expected_n, 3],:flip)</td>
348
- <td>1.00000</td>
349
- <td>4.00000</td>
350
- <td>2.10000</td>
351
- <td>1.04403</td>
352
- <td>0.33329</td>
445
+ <td>2.00000</td>
446
+ <td>5.00000</td>
447
+ <td>3.50000</td>
448
+ <td>1.20416</td>
449
+ <td>0.16445</td>
353
450
  </tr>
354
451
  <tr>
355
452
  <td>Elitism(RouletteSelection,1)</td>
356
453
  <td>UniformCrossover</td>
357
- <td>ListMutator(:single_point,:flip)</td>
358
- <td>1.00000</td>
359
- <td>4.00000</td>
360
- <td>2.10000</td>
361
- <td>1.04403</td>
362
- <td>4.52804</td>
454
+ <td>ListMutator([:expected_n, 3],:flip)</td>
455
+ <td>2.00000</td>
456
+ <td>5.00000</td>
457
+ <td>3.50000</td>
458
+ <td>0.92195</td>
459
+ <td>0.21140</td>
363
460
  </tr>
364
461
  <tr>
365
462
  <td>TruncationSelection(1)</td>
366
463
  <td>SinglePointCrossover</td>
367
- <td>ListMutator([:n_point, 3],:flip)</td>
368
- <td>0.00000</td>
369
- <td>4.00000</td>
370
- <td>2.10000</td>
371
- <td>1.13578</td>
372
- <td>0.19958</td>
464
+ <td>ListMutator([:expected_n, 2],:flip)</td>
465
+ <td>2.00000</td>
466
+ <td>5.00000</td>
467
+ <td>3.50000</td>
468
+ <td>1.02470</td>
469
+ <td>0.12046</td>
373
470
  </tr>
374
471
  <tr>
375
- <td>TruncationSelection(1)</td>
472
+ <td>Elitism(RouletteSelection,1)</td>
376
473
  <td>NullCrossover</td>
377
- <td>ListMutator([:n_point, 3],:flip)</td>
378
- <td>1.00000</td>
379
- <td>3.00000</td>
380
- <td>2.10000</td>
381
- <td>0.83066</td>
382
- <td>0.19097</td>
474
+ <td>ListMutator([:expected_n, 6],:flip)</td>
475
+ <td>2.00000</td>
476
+ <td>5.00000</td>
477
+ <td>3.50000</td>
478
+ <td>0.80623</td>
479
+ <td>0.19056</td>
383
480
  </tr>
384
481
  <tr>
385
- <td>Elitism(RouletteSelection,1)</td>
386
- <td>SinglePointCrossover</td>
387
- <td>ListMutator([:n_point, 3],:flip)</td>
388
- <td>1.00000</td>
389
- <td>3.00000</td>
390
- <td>2.10000</td>
391
- <td>0.70000</td>
392
- <td>3.60895</td>
482
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
483
+ <td>UniformCrossover</td>
484
+ <td>ListMutator([:expected_n, 3],:flip)</td>
485
+ <td>2.00000</td>
486
+ <td>4.00000</td>
487
+ <td>3.50000</td>
488
+ <td>0.67082</td>
489
+ <td>0.20764</td>
393
490
  </tr>
394
491
  <tr>
395
492
  <td>TruncationSelection(0.3)</td>
396
- <td>UniformCrossover</td>
397
- <td>ListMutator(:single_point,:flip)</td>
398
- <td>1.00000</td>
399
- <td>4.00000</td>
400
- <td>2.10000</td>
401
- <td>0.94340</td>
402
- <td>0.24258</td>
493
+ <td>NullCrossover</td>
494
+ <td>ListMutator([:expected_n, 6],:flip)</td>
495
+ <td>2.00000</td>
496
+ <td>5.00000</td>
497
+ <td>3.50000</td>
498
+ <td>0.92195</td>
499
+ <td>0.12181</td>
403
500
  </tr>
404
501
  <tr>
405
- <td>TruncationSelection(1)</td>
406
- <td>UniformCrossover</td>
407
- <td>ListMutator([:expected_n, 2],:flip)</td>
408
- <td>1.00000</td>
502
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
503
+ <td>SinglePointCrossover</td>
504
+ <td>ListMutator([:expected_n, 6],:flip)</td>
409
505
  <td>3.00000</td>
410
- <td>2.10000</td>
411
- <td>0.70000</td>
412
- <td>0.33934</td>
506
+ <td>4.00000</td>
507
+ <td>3.50000</td>
508
+ <td>0.50000</td>
509
+ <td>0.16884</td>
413
510
  </tr>
414
511
  <tr>
415
- <td>TruncationSelection(0.3)</td>
512
+ <td>TruncationSelection(1)</td>
416
513
  <td>SinglePointCrossover</td>
417
- <td>ListMutator([:expected_n, 2],:flip)</td>
418
- <td>0.00000</td>
419
- <td>4.00000</td>
420
- <td>2.10000</td>
421
- <td>1.04403</td>
422
- <td>0.27452</td>
514
+ <td>ListMutator([:expected_n, 5],:flip)</td>
515
+ <td>2.00000</td>
516
+ <td>6.00000</td>
517
+ <td>3.50000</td>
518
+ <td>1.36015</td>
519
+ <td>0.12147</td>
423
520
  </tr>
424
521
  <tr>
425
522
  <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
426
523
  <td>SinglePointCrossover</td>
427
- <td>ListMutator([:n_point, 2],:flip)</td>
524
+ <td>ListMutator([:expected_n, 4],:flip)</td>
428
525
  <td>1.00000</td>
429
- <td>4.00000</td>
430
- <td>2.10000</td>
431
- <td>0.83066</td>
432
- <td>0.36711</td>
526
+ <td>5.00000</td>
527
+ <td>3.40000</td>
528
+ <td>1.01980</td>
529
+ <td>0.16911</td>
433
530
  </tr>
434
531
  <tr>
435
532
  <td>Elitism(RouletteSelection,1)</td>
436
533
  <td>NullCrossover</td>
437
534
  <td>ListMutator([:expected_n, 2],:flip)</td>
438
- <td>1.00000</td>
535
+ <td>2.00000</td>
439
536
  <td>5.00000</td>
537
+ <td>3.40000</td>
538
+ <td>0.80000</td>
539
+ <td>0.17114</td>
540
+ </tr>
541
+ <tr>
542
+ <td>TruncationSelection(0.3)</td>
543
+ <td>UniformCrossover</td>
544
+ <td>ListMutator([:expected_n, 1],:flip)</td>
440
545
  <td>2.00000</td>
441
- <td>1.26491</td>
442
- <td>2.52238</td>
546
+ <td>5.00000</td>
547
+ <td>3.40000</td>
548
+ <td>1.01980</td>
549
+ <td>0.15500</td>
550
+ </tr>
551
+ <tr>
552
+ <td>Elitism(RouletteSelection,1)</td>
553
+ <td>UniformCrossover</td>
554
+ <td>ListMutator([:expected_n, 5],:flip)</td>
555
+ <td>3.00000</td>
556
+ <td>4.00000</td>
557
+ <td>3.40000</td>
558
+ <td>0.48990</td>
559
+ <td>0.21225</td>
443
560
  </tr>
444
561
  <tr>
445
562
  <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
446
563
  <td>NullCrossover</td>
447
- <td>ListMutator([:expected_n, 3],:flip)</td>
448
- <td>1.00000</td>
564
+ <td>ListMutator([:expected_n, 5],:flip)</td>
449
565
  <td>3.00000</td>
450
- <td>2.00000</td>
451
- <td>0.63246</td>
452
- <td>0.48395</td>
566
+ <td>5.00000</td>
567
+ <td>3.30000</td>
568
+ <td>0.64031</td>
569
+ <td>0.26465</td>
453
570
  </tr>
454
571
  <tr>
455
- <td>Elitism(RouletteSelection,1)</td>
572
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
456
573
  <td>SinglePointCrossover</td>
457
574
  <td>ListMutator([:expected_n, 2],:flip)</td>
458
- <td>1.00000</td>
459
- <td>3.00000</td>
460
575
  <td>2.00000</td>
461
- <td>0.77460</td>
462
- <td>3.19718</td>
576
+ <td>6.00000</td>
577
+ <td>3.30000</td>
578
+ <td>1.10000</td>
579
+ <td>0.16743</td>
463
580
  </tr>
464
581
  <tr>
465
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
466
- <td>SinglePointCrossover</td>
467
- <td>ListMutator([:expected_n, 3],:flip)</td>
468
- <td>1.00000</td>
469
- <td>4.00000</td>
582
+ <td>TruncationSelection(0.3)</td>
583
+ <td>NullCrossover</td>
584
+ <td>ListMutator([:expected_n, 4],:flip)</td>
470
585
  <td>2.00000</td>
471
- <td>0.89443</td>
472
- <td>0.50116</td>
586
+ <td>5.00000</td>
587
+ <td>3.30000</td>
588
+ <td>1.18743</td>
589
+ <td>0.13641</td>
473
590
  </tr>
474
591
  <tr>
475
- <td>Elitism(RouletteSelection,1)</td>
592
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
476
593
  <td>SinglePointCrossover</td>
477
- <td>ListMutator([:expected_n, 3],:flip)</td>
478
- <td>1.00000</td>
594
+ <td>ListMutator([:expected_n, 5],:flip)</td>
479
595
  <td>3.00000</td>
596
+ <td>5.00000</td>
597
+ <td>3.30000</td>
598
+ <td>0.64031</td>
599
+ <td>0.17163</td>
600
+ </tr>
601
+ <tr>
602
+ <td>TruncationSelection(1)</td>
603
+ <td>UniformCrossover</td>
604
+ <td>ListMutator([:expected_n, 2],:flip)</td>
480
605
  <td>2.00000</td>
481
- <td>0.44721</td>
482
- <td>2.12250</td>
606
+ <td>5.00000</td>
607
+ <td>3.20000</td>
608
+ <td>0.97980</td>
609
+ <td>0.14730</td>
483
610
  </tr>
484
611
  <tr>
485
612
  <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
486
613
  <td>UniformCrossover</td>
487
- <td>ListMutator([:expected_n, 3],:flip)</td>
488
- <td>1.00000</td>
489
- <td>4.00000</td>
614
+ <td>ListMutator([:expected_n, 5],:flip)</td>
490
615
  <td>2.00000</td>
491
- <td>0.89443</td>
492
- <td>0.57569</td>
616
+ <td>4.00000</td>
617
+ <td>3.20000</td>
618
+ <td>0.60000</td>
619
+ <td>0.21137</td>
493
620
  </tr>
494
621
  <tr>
495
622
  <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
496
623
  <td>NullCrossover</td>
497
624
  <td>ListMutator([:expected_n, 2],:flip)</td>
498
- <td>1.00000</td>
499
- <td>3.00000</td>
500
- <td>1.90000</td>
501
- <td>0.70000</td>
502
- <td>0.51430</td>
625
+ <td>2.00000</td>
626
+ <td>5.00000</td>
627
+ <td>3.20000</td>
628
+ <td>0.74833</td>
629
+ <td>0.16180</td>
503
630
  </tr>
504
631
  <tr>
505
- <td>TruncationSelection(0.3)</td>
632
+ <td>Elitism(RouletteSelection,1)</td>
506
633
  <td>NullCrossover</td>
507
- <td>ListMutator([:expected_n, 2],:flip)</td>
508
- <td>1.00000</td>
634
+ <td>ListMutator([:expected_n, 3],:flip)</td>
635
+ <td>2.00000</td>
636
+ <td>4.00000</td>
637
+ <td>3.20000</td>
638
+ <td>0.74833</td>
639
+ <td>0.17320</td>
640
+ </tr>
641
+ <tr>
642
+ <td>TruncationSelection(1)</td>
643
+ <td>NullCrossover</td>
644
+ <td>ListMutator([:expected_n, 6],:flip)</td>
509
645
  <td>3.00000</td>
510
- <td>1.90000</td>
511
- <td>0.70000</td>
512
- <td>0.27055</td>
646
+ <td>4.00000</td>
647
+ <td>3.20000</td>
648
+ <td>0.40000</td>
649
+ <td>0.11812</td>
513
650
  </tr>
514
651
  <tr>
515
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
516
- <td>SinglePointCrossover</td>
517
- <td>ListMutator([:expected_n, 2],:flip)</td>
518
- <td>1.00000</td>
652
+ <td>Elitism(RouletteSelection,1)</td>
653
+ <td>NullCrossover</td>
654
+ <td>ListMutator([:expected_n, 5],:flip)</td>
519
655
  <td>3.00000</td>
520
- <td>1.90000</td>
521
- <td>0.53852</td>
522
- <td>0.49588</td>
656
+ <td>4.00000</td>
657
+ <td>3.20000</td>
658
+ <td>0.40000</td>
659
+ <td>0.16630</td>
523
660
  </tr>
524
661
  <tr>
525
662
  <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
526
663
  <td>UniformCrossover</td>
527
- <td>ListMutator([:n_point, 2],:flip)</td>
528
- <td>0.00000</td>
664
+ <td>ListMutator([:expected_n, 2],:flip)</td>
665
+ <td>2.00000</td>
529
666
  <td>4.00000</td>
530
- <td>1.90000</td>
531
- <td>1.04403</td>
532
- <td>0.45393</td>
667
+ <td>3.20000</td>
668
+ <td>0.60000</td>
669
+ <td>0.20850</td>
533
670
  </tr>
534
671
  <tr>
535
- <td>TruncationSelection(1)</td>
672
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
536
673
  <td>UniformCrossover</td>
537
- <td>ListMutator(:single_point,:flip)</td>
538
- <td>1.00000</td>
674
+ <td>ListMutator([:expected_n, 6],:flip)</td>
539
675
  <td>3.00000</td>
540
- <td>1.90000</td>
541
- <td>0.83066</td>
542
- <td>0.24328</td>
676
+ <td>4.00000</td>
677
+ <td>3.20000</td>
678
+ <td>0.40000</td>
679
+ <td>0.22099</td>
543
680
  </tr>
544
681
  <tr>
545
- <td>TruncationSelection(1)</td>
546
- <td>SinglePointCrossover</td>
682
+ <td>TruncationSelection(0.3)</td>
683
+ <td>NullCrossover</td>
547
684
  <td>ListMutator([:expected_n, 2],:flip)</td>
548
- <td>1.00000</td>
685
+ <td>2.00000</td>
549
686
  <td>4.00000</td>
550
- <td>1.90000</td>
551
- <td>0.94340</td>
552
- <td>0.27901</td>
687
+ <td>3.10000</td>
688
+ <td>0.70000</td>
689
+ <td>0.12295</td>
553
690
  </tr>
554
691
  <tr>
555
692
  <td>Elitism(RouletteSelection,1)</td>
556
- <td>NullCrossover</td>
557
- <td>ListMutator([:n_point, 3],:flip)</td>
558
- <td>1.00000</td>
559
- <td>3.00000</td>
560
- <td>1.90000</td>
693
+ <td>SinglePointCrossover</td>
694
+ <td>ListMutator([:expected_n, 2],:flip)</td>
695
+ <td>2.00000</td>
696
+ <td>4.00000</td>
697
+ <td>3.10000</td>
561
698
  <td>0.53852</td>
562
- <td>3.99234</td>
699
+ <td>0.20749</td>
563
700
  </tr>
564
701
  <tr>
565
- <td>Elitism(RouletteSelection,1)</td>
702
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
566
703
  <td>UniformCrossover</td>
567
- <td>ListMutator([:expected_n, 2],:flip)</td>
568
- <td>1.00000</td>
569
- <td>3.00000</td>
570
- <td>1.80000</td>
571
- <td>0.60000</td>
572
- <td>3.31335</td>
704
+ <td>ListMutator([:expected_n, 4],:flip)</td>
705
+ <td>2.00000</td>
706
+ <td>4.00000</td>
707
+ <td>3.10000</td>
708
+ <td>0.53852</td>
709
+ <td>0.21308</td>
573
710
  </tr>
574
711
  <tr>
575
- <td>TruncationSelection(0.3)</td>
712
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
576
713
  <td>NullCrossover</td>
577
- <td>ListMutator([:n_point, 2],:flip)</td>
578
- <td>1.00000</td>
714
+ <td>ListMutator([:expected_n, 6],:flip)</td>
715
+ <td>2.00000</td>
579
716
  <td>4.00000</td>
580
- <td>1.80000</td>
581
- <td>1.16619</td>
582
- <td>0.19091</td>
717
+ <td>3.10000</td>
718
+ <td>0.83066</td>
719
+ <td>0.19888</td>
583
720
  </tr>
584
721
  <tr>
585
- <td>TruncationSelection(1)</td>
722
+ <td>Elitism(RouletteSelection,1)</td>
586
723
  <td>UniformCrossover</td>
587
- <td>ListMutator([:expected_n, 3],:flip)</td>
588
- <td>1.00000</td>
589
- <td>3.00000</td>
590
- <td>1.80000</td>
591
- <td>0.74833</td>
592
- <td>0.34128</td>
724
+ <td>ListMutator([:expected_n, 6],:flip)</td>
725
+ <td>2.00000</td>
726
+ <td>4.00000</td>
727
+ <td>3.10000</td>
728
+ <td>0.70000</td>
729
+ <td>0.21192</td>
593
730
  </tr>
594
731
  <tr>
595
- <td>TruncationSelection(0.3)</td>
596
- <td>UniformCrossover</td>
597
- <td>ListMutator([:expected_n, 2],:flip)</td>
598
- <td>1.00000</td>
732
+ <td>Elitism(RouletteSelection,1)</td>
733
+ <td>NullCrossover</td>
734
+ <td>ListMutator([:expected_n, 4],:flip)</td>
735
+ <td>2.00000</td>
736
+ <td>4.00000</td>
599
737
  <td>3.00000</td>
600
- <td>1.80000</td>
601
- <td>0.74833</td>
602
- <td>0.34664</td>
738
+ <td>0.44721</td>
739
+ <td>0.16542</td>
603
740
  </tr>
604
741
  <tr>
605
- <td>Elitism(RouletteSelection,1)</td>
742
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
606
743
  <td>SinglePointCrossover</td>
607
- <td>ListMutator([:n_point, 2],:flip)</td>
608
- <td>1.00000</td>
744
+ <td>ListMutator([:expected_n, 1],:flip)</td>
745
+ <td>2.00000</td>
746
+ <td>4.00000</td>
609
747
  <td>3.00000</td>
610
- <td>1.80000</td>
611
- <td>0.87178</td>
612
- <td>1.40615</td>
748
+ <td>0.77460</td>
749
+ <td>0.17584</td>
613
750
  </tr>
614
751
  <tr>
615
- <td>TruncationSelection(0.3)</td>
616
- <td>SinglePointCrossover</td>
617
- <td>ListMutator(:single_point,:flip)</td>
618
- <td>0.00000</td>
619
- <td>4.00000</td>
620
- <td>1.80000</td>
621
- <td>1.07703</td>
622
- <td>0.18322</td>
752
+ <td>Elitism(RouletteSelection,1)</td>
753
+ <td>UniformCrossover</td>
754
+ <td>ListMutator([:expected_n, 1],:flip)</td>
755
+ <td>2.00000</td>
756
+ <td>5.00000</td>
757
+ <td>3.00000</td>
758
+ <td>0.89443</td>
759
+ <td>0.23451</td>
623
760
  </tr>
624
761
  <tr>
625
- <td>TruncationSelection(0.3)</td>
762
+ <td>TruncationSelection(1)</td>
626
763
  <td>SinglePointCrossover</td>
627
- <td>ListMutator([:n_point, 3],:flip)</td>
628
- <td>0.00000</td>
764
+ <td>ListMutator([:expected_n, 3],:flip)</td>
765
+ <td>2.00000</td>
766
+ <td>5.00000</td>
629
767
  <td>3.00000</td>
630
- <td>1.70000</td>
631
- <td>0.90000</td>
632
- <td>0.19376</td>
768
+ <td>0.89443</td>
769
+ <td>0.12093</td>
633
770
  </tr>
634
771
  <tr>
635
- <td>TruncationSelection(0.3)</td>
636
- <td>SinglePointCrossover</td>
772
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
773
+ <td>NullCrossover</td>
637
774
  <td>ListMutator([:expected_n, 1],:flip)</td>
638
- <td>0.00000</td>
775
+ <td>2.00000</td>
639
776
  <td>4.00000</td>
640
- <td>1.70000</td>
641
- <td>1.18743</td>
642
- <td>0.26405</td>
777
+ <td>3.00000</td>
778
+ <td>0.63246</td>
779
+ <td>0.16071</td>
643
780
  </tr>
644
781
  <tr>
645
- <td>TruncationSelection(0.3)</td>
646
- <td>NullCrossover</td>
647
- <td>ListMutator([:n_point, 3],:flip)</td>
648
- <td>1.00000</td>
782
+ <td>Elitism(RouletteSelection,1)</td>
783
+ <td>UniformCrossover</td>
784
+ <td>ListMutator([:expected_n, 4],:flip)</td>
785
+ <td>2.00000</td>
649
786
  <td>4.00000</td>
650
- <td>1.70000</td>
651
- <td>1.00499</td>
652
- <td>0.19166</td>
787
+ <td>3.00000</td>
788
+ <td>0.63246</td>
789
+ <td>0.21074</td>
653
790
  </tr>
654
791
  <tr>
655
- <td>TruncationSelection(1)</td>
656
- <td>SinglePointCrossover</td>
657
- <td>ListMutator([:n_point, 2],:flip)</td>
658
- <td>0.00000</td>
792
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
793
+ <td>UniformCrossover</td>
794
+ <td>ListMutator([:expected_n, 1],:flip)</td>
795
+ <td>2.00000</td>
659
796
  <td>4.00000</td>
660
- <td>1.70000</td>
661
- <td>1.10000</td>
662
- <td>0.19446</td>
797
+ <td>3.00000</td>
798
+ <td>0.63246</td>
799
+ <td>0.20797</td>
663
800
  </tr>
664
801
  <tr>
665
- <td>TruncationSelection(0.3)</td>
802
+ <td>TruncationSelection(1)</td>
666
803
  <td>UniformCrossover</td>
667
804
  <td>ListMutator([:expected_n, 1],:flip)</td>
668
- <td>1.00000</td>
805
+ <td>2.00000</td>
806
+ <td>5.00000</td>
669
807
  <td>3.00000</td>
670
- <td>1.70000</td>
671
- <td>0.78102</td>
672
- <td>0.33448</td>
808
+ <td>0.89443</td>
809
+ <td>0.14673</td>
673
810
  </tr>
674
811
  <tr>
675
- <td>Elitism(RouletteSelection,1)</td>
676
- <td>SinglePointCrossover</td>
677
- <td>ListMutator(:single_point,:flip)</td>
678
- <td>0.00000</td>
679
- <td>3.00000</td>
680
- <td>1.60000</td>
681
- <td>0.80000</td>
682
- <td>2.62739</td>
812
+ <td>TruncationSelection(0.3)</td>
813
+ <td>NullCrossover</td>
814
+ <td>ListMutator([:expected_n, 3],:flip)</td>
815
+ <td>2.00000</td>
816
+ <td>4.00000</td>
817
+ <td>2.90000</td>
818
+ <td>0.70000</td>
819
+ <td>0.12379</td>
683
820
  </tr>
684
821
  <tr>
685
822
  <td>TruncationSelection(0.3)</td>
686
823
  <td>SinglePointCrossover</td>
687
- <td>ListMutator([:n_point, 2],:flip)</td>
688
- <td>0.00000</td>
689
- <td>3.00000</td>
690
- <td>1.60000</td>
691
- <td>0.91652</td>
692
- <td>0.18945</td>
824
+ <td>ListMutator([:expected_n, 2],:flip)</td>
825
+ <td>2.00000</td>
826
+ <td>4.00000</td>
827
+ <td>2.90000</td>
828
+ <td>0.53852</td>
829
+ <td>0.14681</td>
693
830
  </tr>
694
831
  <tr>
695
832
  <td>TruncationSelection(1)</td>
696
833
  <td>NullCrossover</td>
697
- <td>ListMutator([:expected_n, 2],:flip)</td>
698
- <td>0.00000</td>
699
- <td>3.00000</td>
700
- <td>1.60000</td>
701
- <td>0.80000</td>
702
- <td>0.27370</td>
834
+ <td>ListMutator([:expected_n, 3],:flip)</td>
835
+ <td>1.00000</td>
836
+ <td>4.00000</td>
837
+ <td>2.90000</td>
838
+ <td>0.83066</td>
839
+ <td>0.11787</td>
703
840
  </tr>
704
841
  <tr>
705
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
842
+ <td>TruncationSelection(0.3)</td>
706
843
  <td>NullCrossover</td>
707
- <td>ListMutator([:n_point, 3],:flip)</td>
844
+ <td>ListMutator([:expected_n, 1],:flip)</td>
708
845
  <td>1.00000</td>
709
- <td>3.00000</td>
710
- <td>1.60000</td>
711
- <td>0.66332</td>
712
- <td>0.35829</td>
846
+ <td>6.00000</td>
847
+ <td>2.80000</td>
848
+ <td>1.40000</td>
849
+ <td>0.11828</td>
713
850
  </tr>
714
851
  <tr>
715
852
  <td>Elitism(RouletteSelection,1)</td>
716
853
  <td>SinglePointCrossover</td>
717
854
  <td>ListMutator([:expected_n, 1],:flip)</td>
718
- <td>0.00000</td>
719
- <td>3.00000</td>
720
- <td>1.60000</td>
721
- <td>0.91652</td>
722
- <td>1.67058</td>
723
- </tr>
724
- <tr>
725
- <td>Elitism(RouletteSelection,1)</td>
726
- <td>UniformCrossover</td>
727
- <td>ListMutator([:expected_n, 1],:flip)</td>
728
- <td>0.00000</td>
729
- <td>3.00000</td>
730
- <td>1.60000</td>
731
- <td>0.80000</td>
732
- <td>3.95188</td>
855
+ <td>1.00000</td>
856
+ <td>4.00000</td>
857
+ <td>2.80000</td>
858
+ <td>0.97980</td>
859
+ <td>0.18127</td>
733
860
  </tr>
734
861
  <tr>
735
- <td>TruncationSelection(0.3)</td>
862
+ <td>TruncationSelection(1)</td>
736
863
  <td>NullCrossover</td>
737
- <td>ListMutator([:expected_n, 1],:flip)</td>
738
- <td>1.00000</td>
739
- <td>3.00000</td>
740
- <td>1.50000</td>
741
- <td>0.67082</td>
742
- <td>0.26505</td>
864
+ <td>ListMutator([:expected_n, 2],:flip)</td>
865
+ <td>2.00000</td>
866
+ <td>4.00000</td>
867
+ <td>2.80000</td>
868
+ <td>0.60000</td>
869
+ <td>0.11678</td>
743
870
  </tr>
744
871
  <tr>
745
872
  <td>TruncationSelection(1)</td>
746
873
  <td>SinglePointCrossover</td>
747
- <td>ListMutator(:single_point,:flip)</td>
748
- <td>1.00000</td>
749
- <td>3.00000</td>
750
- <td>1.50000</td>
751
- <td>0.67082</td>
752
- <td>0.18690</td>
874
+ <td>ListMutator([:expected_n, 1],:flip)</td>
875
+ <td>2.00000</td>
876
+ <td>5.00000</td>
877
+ <td>2.70000</td>
878
+ <td>1.00499</td>
879
+ <td>0.11921</td>
753
880
  </tr>
754
881
  <tr>
755
- <td>TruncationSelection(1)</td>
756
- <td>NullCrossover</td>
757
- <td>ListMutator([:n_point, 2],:flip)</td>
758
- <td>0.00000</td>
759
- <td>4.00000</td>
760
- <td>1.40000</td>
761
- <td>1.20000</td>
762
- <td>0.18745</td>
882
+ <td>TruncationSelection(0.3)</td>
883
+ <td>UniformCrossover</td>
884
+ <td>NullMutator</td>
885
+ <td>2.00000</td>
886
+ <td>3.00000</td>
887
+ <td>2.70000</td>
888
+ <td>0.45826</td>
889
+ <td>0.07969</td>
763
890
  </tr>
764
891
  <tr>
765
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
766
- <td>NullCrossover</td>
767
- <td>ListMutator([:n_point, 2],:flip)</td>
892
+ <td>TruncationSelection(0.3)</td>
893
+ <td>SinglePointCrossover</td>
894
+ <td>ListMutator([:expected_n, 1],:flip)</td>
768
895
  <td>1.00000</td>
769
- <td>3.00000</td>
770
- <td>1.40000</td>
771
- <td>0.66332</td>
772
- <td>0.35425</td>
896
+ <td>4.00000</td>
897
+ <td>2.60000</td>
898
+ <td>0.80000</td>
899
+ <td>0.12678</td>
773
900
  </tr>
774
901
  <tr>
775
902
  <td>TruncationSelection(1)</td>
776
- <td>SinglePointCrossover</td>
777
- <td>ListMutator([:expected_n, 1],:flip)</td>
778
- <td>0.00000</td>
903
+ <td>UniformCrossover</td>
904
+ <td>NullMutator</td>
779
905
  <td>2.00000</td>
780
- <td>1.40000</td>
781
- <td>0.66332</td>
782
- <td>0.27107</td>
906
+ <td>3.00000</td>
907
+ <td>2.50000</td>
908
+ <td>0.50000</td>
909
+ <td>0.07923</td>
783
910
  </tr>
784
911
  <tr>
785
912
  <td>Elitism(RouletteSelection,1)</td>
786
913
  <td>NullCrossover</td>
787
914
  <td>ListMutator([:expected_n, 1],:flip)</td>
788
- <td>0.00000</td>
789
- <td>3.00000</td>
790
- <td>1.40000</td>
915
+ <td>1.00000</td>
916
+ <td>4.00000</td>
917
+ <td>2.40000</td>
791
918
  <td>0.80000</td>
792
- <td>3.79101</td>
919
+ <td>0.17773</td>
793
920
  </tr>
794
921
  <tr>
795
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
796
- <td>NullCrossover</td>
797
- <td>ListMutator(:single_point,:flip)</td>
798
- <td>0.00000</td>
799
- <td>4.00000</td>
800
- <td>1.40000</td>
801
- <td>1.11355</td>
802
- <td>0.34705</td>
922
+ <td>Elitism(RouletteSelection,1)</td>
923
+ <td>UniformCrossover</td>
924
+ <td>NullMutator</td>
925
+ <td>1.00000</td>
926
+ <td>3.00000</td>
927
+ <td>2.10000</td>
928
+ <td>0.53852</td>
929
+ <td>0.11882</td>
803
930
  </tr>
804
931
  <tr>
805
- <td>TruncationSelection(1)</td>
806
- <td>UniformCrossover</td>
807
- <td>ListMutator([:expected_n, 1],:flip)</td>
932
+ <td>TruncationSelection(0.3)</td>
933
+ <td>SinglePointCrossover</td>
934
+ <td>NullMutator</td>
808
935
  <td>1.00000</td>
809
936
  <td>3.00000</td>
810
- <td>1.40000</td>
811
- <td>0.66332</td>
812
- <td>0.37315</td>
937
+ <td>2.10000</td>
938
+ <td>0.70000</td>
939
+ <td>0.05281</td>
813
940
  </tr>
814
941
  <tr>
815
- <td>Elitism(RouletteSelection,1)</td>
942
+ <td>TruncationSelection(1)</td>
816
943
  <td>NullCrossover</td>
817
- <td>ListMutator(:single_point,:flip)</td>
818
- <td>0.00000</td>
944
+ <td>ListMutator([:expected_n, 1],:flip)</td>
945
+ <td>1.00000</td>
819
946
  <td>3.00000</td>
820
- <td>1.30000</td>
821
- <td>0.78102</td>
822
- <td>4.36068</td>
947
+ <td>2.10000</td>
948
+ <td>0.53852</td>
949
+ <td>0.11591</td>
823
950
  </tr>
824
951
  <tr>
825
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
952
+ <td>RouletteSelection</td>
826
953
  <td>NullCrossover</td>
827
- <td>ListMutator([:expected_n, 1],:flip)</td>
828
- <td>0.00000</td>
954
+ <td>ListMutator([:expected_n, 2],:flip)</td>
955
+ <td>1.00000</td>
829
956
  <td>3.00000</td>
830
- <td>1.30000</td>
831
- <td>0.78102</td>
832
- <td>0.48162</td>
957
+ <td>2.10000</td>
958
+ <td>0.70000</td>
959
+ <td>0.15668</td>
833
960
  </tr>
834
961
  <tr>
835
962
  <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
963
+ <td>UniformCrossover</td>
964
+ <td>NullMutator</td>
965
+ <td>1.00000</td>
966
+ <td>2.00000</td>
967
+ <td>1.80000</td>
968
+ <td>0.40000</td>
969
+ <td>0.11629</td>
970
+ </tr>
971
+ <tr>
972
+ <td>RouletteSelection</td>
836
973
  <td>SinglePointCrossover</td>
837
- <td>ListMutator(:single_point,:flip)</td>
838
- <td>0.00000</td>
839
- <td>3.00000</td>
840
- <td>1.30000</td>
974
+ <td>ListMutator([:expected_n, 3],:flip)</td>
975
+ <td>1.00000</td>
976
+ <td>4.00000</td>
977
+ <td>1.70000</td>
841
978
  <td>0.90000</td>
842
- <td>0.37307</td>
979
+ <td>0.16223</td>
843
980
  </tr>
844
981
  <tr>
845
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
982
+ <td>RouletteSelection</td>
846
983
  <td>SinglePointCrossover</td>
847
- <td>ListMutator([:expected_n, 1],:flip)</td>
848
- <td>0.00000</td>
984
+ <td>ListMutator([:expected_n, 4],:flip)</td>
985
+ <td>1.00000</td>
849
986
  <td>3.00000</td>
850
- <td>1.20000</td>
851
- <td>0.97980</td>
852
- <td>0.48638</td>
987
+ <td>1.60000</td>
988
+ <td>0.80000</td>
989
+ <td>0.16322</td>
853
990
  </tr>
854
991
  <tr>
855
- <td>TruncationSelection(1)</td>
856
- <td>NullCrossover</td>
857
- <td>ListMutator([:expected_n, 1],:flip)</td>
858
- <td>0.00000</td>
992
+ <td>RouletteSelection</td>
993
+ <td>UniformCrossover</td>
994
+ <td>ListMutator([:expected_n, 6],:flip)</td>
995
+ <td>1.00000</td>
859
996
  <td>2.00000</td>
860
- <td>1.10000</td>
861
- <td>0.53852</td>
862
- <td>0.26592</td>
997
+ <td>1.60000</td>
998
+ <td>0.48990</td>
999
+ <td>0.20260</td>
863
1000
  </tr>
864
1001
  <tr>
865
- <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
866
- <td>UniformCrossover</td>
867
- <td>ListMutator(:single_point,:flip)</td>
868
- <td>0.00000</td>
869
- <td>3.00000</td>
870
- <td>1.10000</td>
871
- <td>0.83066</td>
872
- <td>0.43292</td>
1002
+ <td>TruncationSelection(1)</td>
1003
+ <td>NullCrossover</td>
1004
+ <td>NullMutator</td>
1005
+ <td>1.00000</td>
1006
+ <td>2.00000</td>
1007
+ <td>1.60000</td>
1008
+ <td>0.48990</td>
1009
+ <td>0.04788</td>
873
1010
  </tr>
874
1011
  <tr>
875
1012
  <td>TruncationSelection(0.3)</td>
876
1013
  <td>NullCrossover</td>
877
- <td>ListMutator(:single_point,:flip)</td>
878
- <td>0.00000</td>
879
- <td>3.00000</td>
1014
+ <td>NullMutator</td>
880
1015
  <td>1.00000</td>
881
- <td>0.77460</td>
882
- <td>0.18952</td>
1016
+ <td>2.00000</td>
1017
+ <td>1.50000</td>
1018
+ <td>0.50000</td>
1019
+ <td>0.04777</td>
883
1020
  </tr>
884
1021
  <tr>
885
- <td>TruncationSelection(1)</td>
886
- <td>NullCrossover</td>
887
- <td>ListMutator(:single_point,:flip)</td>
888
- <td>0.00000</td>
889
- <td>3.00000</td>
1022
+ <td>RouletteSelection</td>
1023
+ <td>SinglePointCrossover</td>
1024
+ <td>ListMutator([:expected_n, 5],:flip)</td>
890
1025
  <td>1.00000</td>
891
- <td>0.89443</td>
892
- <td>0.17843</td>
1026
+ <td>2.00000</td>
1027
+ <td>1.50000</td>
1028
+ <td>0.50000</td>
1029
+ <td>0.16378</td>
893
1030
  </tr>
894
1031
  <tr>
895
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
896
- <td>NullCrossover</td>
897
- <td>ListMutator(:single_point,:flip)</td>
898
- <td>0.00000</td>
1032
+ <td>TruncationSelection(1)</td>
1033
+ <td>SinglePointCrossover</td>
1034
+ <td>NullMutator</td>
899
1035
  <td>1.00000</td>
900
- <td>0.80000</td>
901
- <td>0.40000</td>
902
- <td>0.18013</td>
1036
+ <td>2.00000</td>
1037
+ <td>1.50000</td>
1038
+ <td>0.50000</td>
1039
+ <td>0.05186</td>
903
1040
  </tr>
904
1041
  <tr>
905
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1042
+ <td>RouletteSelection</td>
906
1043
  <td>NullCrossover</td>
907
- <td>ListMutator([:n_point, 2],:flip)</td>
908
- <td>0.00000</td>
1044
+ <td>ListMutator([:expected_n, 5],:flip)</td>
1045
+ <td>1.00000</td>
909
1046
  <td>2.00000</td>
910
- <td>0.80000</td>
911
- <td>0.60000</td>
912
- <td>0.18945</td>
1047
+ <td>1.50000</td>
1048
+ <td>0.50000</td>
1049
+ <td>0.15856</td>
913
1050
  </tr>
914
1051
  <tr>
915
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
916
- <td>UniformCrossover</td>
917
- <td>ListMutator([:n_point, 2],:flip)</td>
918
- <td>0.00000</td>
1052
+ <td>RouletteSelection</td>
1053
+ <td>SinglePointCrossover</td>
1054
+ <td>ListMutator([:expected_n, 6],:flip)</td>
919
1055
  <td>1.00000</td>
920
- <td>0.70000</td>
921
- <td>0.45826</td>
922
- <td>0.27000</td>
1056
+ <td>2.00000</td>
1057
+ <td>1.50000</td>
1058
+ <td>0.50000</td>
1059
+ <td>0.16359</td>
923
1060
  </tr>
924
1061
  <tr>
925
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
926
- <td>UniformCrossover</td>
927
- <td>ListMutator([:expected_n, 2],:flip)</td>
928
- <td>0.00000</td>
929
- <td>2.00000</td>
930
- <td>0.60000</td>
931
- <td>0.66332</td>
932
- <td>0.40388</td>
1062
+ <td>Elitism(RouletteSelection,1)</td>
1063
+ <td>SinglePointCrossover</td>
1064
+ <td>NullMutator</td>
1065
+ <td>1.00000</td>
1066
+ <td>3.00000</td>
1067
+ <td>1.50000</td>
1068
+ <td>0.67082</td>
1069
+ <td>0.07520</td>
933
1070
  </tr>
934
1071
  <tr>
935
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1072
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
936
1073
  <td>SinglePointCrossover</td>
937
- <td>ListMutator([:expected_n, 2],:flip)</td>
938
- <td>0.00000</td>
1074
+ <td>NullMutator</td>
939
1075
  <td>1.00000</td>
940
- <td>0.60000</td>
1076
+ <td>2.00000</td>
1077
+ <td>1.40000</td>
941
1078
  <td>0.48990</td>
942
- <td>0.35787</td>
1079
+ <td>0.07365</td>
943
1080
  </tr>
944
1081
  <tr>
945
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
946
- <td>NullCrossover</td>
947
- <td>ListMutator([:expected_n, 3],:flip)</td>
948
- <td>0.00000</td>
1082
+ <td>RouletteSelection</td>
1083
+ <td>SinglePointCrossover</td>
1084
+ <td>ListMutator([:expected_n, 2],:flip)</td>
949
1085
  <td>1.00000</td>
950
- <td>0.60000</td>
1086
+ <td>2.00000</td>
1087
+ <td>1.40000</td>
951
1088
  <td>0.48990</td>
952
- <td>0.48341</td>
1089
+ <td>0.16180</td>
953
1090
  </tr>
954
1091
  <tr>
955
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1092
+ <td>RouletteSelection</td>
956
1093
  <td>UniformCrossover</td>
957
1094
  <td>ListMutator([:expected_n, 1],:flip)</td>
958
- <td>0.00000</td>
1095
+ <td>1.00000</td>
959
1096
  <td>2.00000</td>
960
- <td>0.60000</td>
961
- <td>0.66332</td>
962
- <td>0.39641</td>
1097
+ <td>1.30000</td>
1098
+ <td>0.45826</td>
1099
+ <td>0.20023</td>
963
1100
  </tr>
964
1101
  <tr>
965
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
966
- <td>SinglePointCrossover</td>
967
- <td>ListMutator([:n_point, 2],:flip)</td>
968
- <td>0.00000</td>
1102
+ <td>Elitism(RouletteSelection,1)</td>
1103
+ <td>NullCrossover</td>
1104
+ <td>NullMutator</td>
1105
+ <td>1.00000</td>
969
1106
  <td>2.00000</td>
970
- <td>0.60000</td>
971
- <td>0.66332</td>
972
- <td>0.27524</td>
1107
+ <td>1.30000</td>
1108
+ <td>0.45826</td>
1109
+ <td>0.07972</td>
973
1110
  </tr>
974
1111
  <tr>
975
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1112
+ <td>RouletteSelection</td>
976
1113
  <td>UniformCrossover</td>
977
- <td>ListMutator(:single_point,:flip)</td>
978
- <td>0.00000</td>
1114
+ <td>ListMutator([:expected_n, 5],:flip)</td>
1115
+ <td>1.00000</td>
979
1116
  <td>2.00000</td>
980
- <td>0.60000</td>
981
- <td>0.66332</td>
982
- <td>0.26184</td>
1117
+ <td>1.30000</td>
1118
+ <td>0.45826</td>
1119
+ <td>0.20172</td>
983
1120
  </tr>
984
1121
  <tr>
985
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1122
+ <td>Elitism(ScaledRouletteSelection[1,2,3,4,...],1)</td>
986
1123
  <td>NullCrossover</td>
987
- <td>ListMutator([:n_point, 3],:flip)</td>
988
- <td>0.00000</td>
1124
+ <td>NullMutator</td>
1125
+ <td>1.00000</td>
989
1126
  <td>2.00000</td>
990
- <td>0.50000</td>
991
- <td>0.67082</td>
992
- <td>0.19385</td>
1127
+ <td>1.30000</td>
1128
+ <td>0.45826</td>
1129
+ <td>0.09093</td>
993
1130
  </tr>
994
1131
  <tr>
995
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
996
- <td>NullCrossover</td>
997
- <td>ListMutator([:expected_n, 2],:flip)</td>
998
- <td>0.00000</td>
1132
+ <td>RouletteSelection</td>
1133
+ <td>SinglePointCrossover</td>
1134
+ <td>ListMutator([:expected_n, 1],:flip)</td>
999
1135
  <td>1.00000</td>
1000
- <td>0.50000</td>
1001
- <td>0.50000</td>
1002
- <td>0.36109</td>
1136
+ <td>2.00000</td>
1137
+ <td>1.30000</td>
1138
+ <td>0.45826</td>
1139
+ <td>0.16140</td>
1003
1140
  </tr>
1004
1141
  <tr>
1005
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1142
+ <td>RouletteSelection</td>
1006
1143
  <td>UniformCrossover</td>
1007
- <td>ListMutator([:n_point, 3],:flip)</td>
1008
- <td>0.00000</td>
1144
+ <td>ListMutator([:expected_n, 4],:flip)</td>
1009
1145
  <td>1.00000</td>
1146
+ <td>2.00000</td>
1147
+ <td>1.20000</td>
1010
1148
  <td>0.40000</td>
1011
- <td>0.48990</td>
1012
- <td>0.27431</td>
1149
+ <td>0.20098</td>
1013
1150
  </tr>
1014
1151
  <tr>
1015
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1016
- <td>SinglePointCrossover</td>
1017
- <td>ListMutator(:single_point,:flip)</td>
1018
- <td>0.00000</td>
1152
+ <td>RouletteSelection</td>
1153
+ <td>NullCrossover</td>
1154
+ <td>ListMutator([:expected_n, 6],:flip)</td>
1155
+ <td>1.00000</td>
1019
1156
  <td>2.00000</td>
1157
+ <td>1.20000</td>
1020
1158
  <td>0.40000</td>
1021
- <td>0.66332</td>
1022
- <td>0.23196</td>
1159
+ <td>0.15897</td>
1023
1160
  </tr>
1024
1161
  <tr>
1025
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1026
- <td>SinglePointCrossover</td>
1027
- <td>ListMutator([:n_point, 3],:flip)</td>
1028
- <td>0.00000</td>
1162
+ <td>RouletteSelection</td>
1163
+ <td>NullCrossover</td>
1164
+ <td>ListMutator([:expected_n, 3],:flip)</td>
1029
1165
  <td>1.00000</td>
1030
- <td>0.30000</td>
1031
- <td>0.45826</td>
1032
- <td>0.25527</td>
1166
+ <td>3.00000</td>
1167
+ <td>1.20000</td>
1168
+ <td>0.60000</td>
1169
+ <td>0.15733</td>
1170
+ </tr>
1171
+ <tr>
1172
+ <td>RouletteSelection</td>
1173
+ <td>NullCrossover</td>
1174
+ <td>ListMutator([:expected_n, 4],:flip)</td>
1175
+ <td>1.00000</td>
1176
+ <td>2.00000</td>
1177
+ <td>1.20000</td>
1178
+ <td>0.40000</td>
1179
+ <td>0.15800</td>
1033
1180
  </tr>
1034
1181
  <tr>
1035
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1182
+ <td>RouletteSelection</td>
1036
1183
  <td>UniformCrossover</td>
1037
- <td>ListMutator([:expected_n, 3],:flip)</td>
1038
- <td>0.00000</td>
1184
+ <td>ListMutator([:expected_n, 2],:flip)</td>
1039
1185
  <td>1.00000</td>
1186
+ <td>2.00000</td>
1187
+ <td>1.10000</td>
1040
1188
  <td>0.30000</td>
1041
- <td>0.45826</td>
1042
- <td>0.40511</td>
1189
+ <td>0.20010</td>
1043
1190
  </tr>
1044
1191
  <tr>
1045
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1046
- <td>SinglePointCrossover</td>
1192
+ <td>RouletteSelection</td>
1193
+ <td>NullCrossover</td>
1194
+ <td>ListMutator([:expected_n, 1],:flip)</td>
1195
+ <td>1.00000</td>
1196
+ <td>2.00000</td>
1197
+ <td>1.10000</td>
1198
+ <td>0.30000</td>
1199
+ <td>0.15645</td>
1200
+ </tr>
1201
+ <tr>
1202
+ <td>RouletteSelection</td>
1203
+ <td>UniformCrossover</td>
1047
1204
  <td>ListMutator([:expected_n, 3],:flip)</td>
1048
- <td>0.00000</td>
1049
1205
  <td>1.00000</td>
1206
+ <td>2.00000</td>
1207
+ <td>1.10000</td>
1050
1208
  <td>0.30000</td>
1051
- <td>0.45826</td>
1052
- <td>0.32626</td>
1209
+ <td>0.20107</td>
1053
1210
  </tr>
1054
1211
  <tr>
1055
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1212
+ <td>RouletteSelection</td>
1056
1213
  <td>NullCrossover</td>
1057
- <td>ListMutator([:expected_n, 1],:flip)</td>
1214
+ <td>NullMutator</td>
1215
+ <td>1.00000</td>
1216
+ <td>1.00000</td>
1217
+ <td>1.00000</td>
1058
1218
  <td>0.00000</td>
1059
- <td>2.00000</td>
1060
- <td>0.30000</td>
1061
- <td>0.64031</td>
1062
- <td>0.30490</td>
1219
+ <td>0.06323</td>
1063
1220
  </tr>
1064
1221
  <tr>
1065
- <td>ScaledRouletteSelection[1,2,3,4,...]</td>
1222
+ <td>RouletteSelection</td>
1066
1223
  <td>SinglePointCrossover</td>
1067
- <td>ListMutator([:expected_n, 1],:flip)</td>
1224
+ <td>NullMutator</td>
1225
+ <td>1.00000</td>
1226
+ <td>1.00000</td>
1227
+ <td>1.00000</td>
1068
1228
  <td>0.00000</td>
1229
+ <td>0.06886</td>
1230
+ </tr>
1231
+ <tr>
1232
+ <td>RouletteSelection</td>
1233
+ <td>UniformCrossover</td>
1234
+ <td>NullMutator</td>
1069
1235
  <td>1.00000</td>
1070
- <td>0.20000</td>
1071
- <td>0.40000</td>
1072
- <td>0.36440</td>
1236
+ <td>1.00000</td>
1237
+ <td>1.00000</td>
1238
+ <td>0.00000</td>
1239
+ <td>0.10828</td>
1073
1240
  </tr>
1074
1241
  </table>
1075
1242
  </body>