Class: GA::Operators::Mutation::Positional

Inherits:
Basic show all
Defined in:
lib/operators.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Positional

Returns a new instance of Positional.



241
242
243
244
245
246
247
248
# File 'lib/operators.rb', line 241

def initialize(options = {})
    @probability = options[:probability] || 0.01
    @radius      = options[:radius]      || 1
    @epsilon     = options[:epsilon]     || 1
    
    GA.contract("Probability must be in the range [0, 1]") { @probability.between?(0, 1) }
    GA.contract("Epsilon must be greater than 0") { @epsilon > 0 }
end

Instance Method Details

#apply(population) ⇒ Object



250
251
252
253
254
255
256
257
258
259
260
261
262
263
# File 'lib/operators.rb', line 250

def apply(population)
    mutation(population) do |chromosome|
        if GA::Random.with_probability(@probability)
            chromosome = chromosome.dup
            
            i1 = GA::Random.rand(chromosome.size)
            i2 = (i1 + [GA::Random.rand(@epsilon+1), @epsilon].max) % chromosome.size
            
            chromosome.data[i1], chromosome.data[i2] = chromosome.data[i2], chromosome.data[i1]
        end
        
        chromosome
    end
end