Class: EvoSynth::Recombinations::KPointCrossover

Inherits:
Object
  • Object
show all
Defined in:
lib/evosynth/operators/recombinations/k_point_crossover.rb

Overview

K-PUNKT-CROSSOVER (Weicker Page 130)

Constant Summary collapse

DEFAULT_K =
2

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(k = DEFAULT_K) ⇒ KPointCrossover

Returns a new instance of KPointCrossover.



36
37
38
# File 'lib/evosynth/operators/recombinations/k_point_crossover.rb', line 36

def initialize(k = DEFAULT_K)
	@k = k
end

Instance Attribute Details

#kObject

Returns the value of attribute k.



32
33
34
# File 'lib/evosynth/operators/recombinations/k_point_crossover.rb', line 32

def k
  @k
end

Instance Method Details

#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

#to_sObject



63
64
65
# File 'lib/evosynth/operators/recombinations/k_point_crossover.rb', line 63

def to_s
	"k-point crossover (k=#{@k})"
end