| Module | GladiatorialSelection |
| In: |
lib/charlie/selection.rb
|
Co-evolution: Direct competition (gladiatorial) selection. Define a Genotype#fight function to use this
# File lib/charlie/selection.rb, line 172
172: def next_generation(population)
173: (population.size/2).times{
174: ix=[0,0,0,0]
175: ix=(0..3).map{population.rand_index} while ix.uniq.size < 4
176: ix[0],ix[1] = ix[1],ix[0] unless population[ix[0]].fight(population[ix[1]]) # 0 and 2 hold winners
177: ix[2],ix[3] = ix[3],ix[2] unless population[ix[2]].fight(population[ix[3]])
178: nw = [];
179: nw += yield(population[ix[0]],population[ix[2]]) while nw.size < 2
180: population[ix[1]],population[ix[3]] = *nw
181: }
182: population
183: end