Method: EvoSynth::Recombinations::KPointCrossover#recombine

Defined in:
lib/evosynth/operators/recombinations/k_point_crossover.rb

#recombine(individual_one, individual_two) ⇒ Object



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