Class: EvoSynth::Recombinations::KPointCrossover
- Inherits:
-
Object
- Object
- EvoSynth::Recombinations::KPointCrossover
- 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
-
#k ⇒ Object
Returns the value of attribute k.
Instance Method Summary collapse
-
#initialize(k = DEFAULT_K) ⇒ KPointCrossover
constructor
A new instance of KPointCrossover.
- #recombine(individual_one, individual_two) ⇒ Object
- #to_s ⇒ Object
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
#k ⇒ Object
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_s ⇒ Object
63 64 65 |
# File 'lib/evosynth/operators/recombinations/k_point_crossover.rb', line 63 def to_s "k-point crossover (k=#{@k})" end |