31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/evosynth/operators/recombinations/one_point_crossover.rb', line 31
def recombine(parent_one, parent_two)
child_one = parent_one.deep_clone
child_two = parent_two.deep_clone
shorter = EvoSynth::Recombinations.individual_with_shorter_genome(parent_one, parent_two)
crossover_point = EvoSynth.rand(shorter.genome.size)
first_range = 0..crossover_point
child_one.genome[first_range] = parent_one.genome[first_range]
child_two.genome[first_range] = parent_two.genome[first_range]
second_range = (crossover_point + 1)..(shorter.genome.size - 1)
child_one.genome[second_range] = parent_two.genome[second_range]
child_two.genome[second_range] = parent_one.genome[second_range]
[child_one, child_two]
end
|