Class: EvoSynth::Mutations::BinaryMutation
- Inherits:
-
Object
- Object
- EvoSynth::Mutations::BinaryMutation
- Defined in:
- lib/evosynth/operators/mutations/binary_mutation.rb
Overview
This mutations flips each gene in the genome of a given individual using the given flip function (a lambda) with a given probability and returns a mutated individual. To use this mutation the flip_function has to return the negation/inverse of a given gene. This mutations is based on BINAERE-MUTATION (Weicker 2007, page 59).
Constant Summary collapse
- DEFAULT_PROBABILITY =
the default mutation probability
0.1
Instance Attribute Summary collapse
-
#flip_function ⇒ Object
This function (lambda) is used to flip each gene.
-
#probability ⇒ Object
Each gene is flipped with this probability (should be between 0 and 1).
Instance Method Summary collapse
-
#initialize(flip_function, probability = DEFAULT_PROBABILITY) ⇒ BinaryMutation
constructor
:call-seq: BinaryMutation.new(Lambda) -> BinaryMutation BinaryMutation.new(Lambda, Float) -> BinaryMutation (overrides default probability).
-
#mutate(individual) ⇒ Object
:call-seq: mutate(Individual) -> Individual.
-
#to_s ⇒ Object
:call-seq: to_s -> string.
Constructor Details
#initialize(flip_function, probability = DEFAULT_PROBABILITY) ⇒ BinaryMutation
:call-seq: BinaryMutation.new(Lambda) -> BinaryMutation BinaryMutation.new(Lambda, Float) -> BinaryMutation (overrides default probability)
Returns a new BinaryMutation. In the first form, the default mutation probability BinaryMutation::DEFAULT_PROBABILITY (0.1) is used. In the second it creates a BinaryMutation with the given probability.
custom_flip_function = lambda { |gene| EvoSynth.rand(42 * gene) }
BinaryMutation.new(custom_flip_function)
BinaryMutation.new(EvoSynth::Mutations::Functions::FLIP_BOOLEAN, 0.01)
57 58 59 60 |
# File 'lib/evosynth/operators/mutations/binary_mutation.rb', line 57 def initialize(flip_function, probability = DEFAULT_PROBABILITY) @flip_function = flip_function @probability = probability end |
Instance Attribute Details
#flip_function ⇒ Object
This function (lambda) is used to flip each gene
40 41 42 |
# File 'lib/evosynth/operators/mutations/binary_mutation.rb', line 40 def flip_function @flip_function end |
#probability ⇒ Object
Each gene is flipped with this probability (should be between 0 and 1)
36 37 38 |
# File 'lib/evosynth/operators/mutations/binary_mutation.rb', line 36 def probability @probability end |
Instance Method Details
#mutate(individual) ⇒ Object
:call-seq: mutate(Individual) -> Individual
Returns the mutation (with the given flip function) of a given individual.
m = BinaryMutation.new
m.mutate(a_individual) #=> a_new_individual
70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/evosynth/operators/mutations/binary_mutation.rb', line 70 def mutate(individual) mutated = individual.deep_clone genome = mutated.genome genome.size.times do |index| if @flip_function.arity == 1 genome[index] = @flip_function.call(genome[index]) if EvoSynth.rand <= @probability else genome[index] = @flip_function.call if EvoSynth.rand <= @probability end end mutated end |
#to_s ⇒ Object
:call-seq: to_s -> string
Returns description of this mutation
m = BinaryMutation.new(0.01)
m.to_s #=> "binary mutation <probability: 0.01>"
93 94 95 |
# File 'lib/evosynth/operators/mutations/binary_mutation.rb', line 93 def to_s "binary mutation <probability: #{@probability}>" end |