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