40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/evosynth/operators/recombinations/k_point_crossover.rb', line 40
def recombine(individual_one, individual_two)
child_one = individual_one.deep_clone
child_two = individual_two.deep_clone
shorter = EvoSynth::Recombinations.individual_with_shorter_genome(individual_one, individual_two)
crossover_points = random_crossover_points(shorter.genome.size)
@k.times do |m|
begin
range = (crossover_points[m] + 1)..crossover_points[m + 1]
rescue ArgumentError
next
end
if m % 2 == 1
child_one.genome[range] = individual_two.genome[range]
child_two.genome[range] = individual_one.genome[range]
end
end
[child_one, child_two]
end
|