class Evolvable::Mutation
Attributes
probability[RW]
rate[RW]
Public Class Methods
new(probability: nil, rate: nil)
click to toggle source
# File lib/evolvable/mutation.rb, line 7 def initialize(probability: nil, rate: nil) @probability = probability || (rate ? 1 : 0.03) @rate = rate || 0 end
Public Instance Methods
call(population)
click to toggle source
# File lib/evolvable/mutation.rb, line 15 def call(population) return population if probability.zero? population.instances.each do |instance| mutate_instance(instance) if rand <= probability end population end
Private Instance Methods
mutate_gene(instance, gene_index)
click to toggle source
# File lib/evolvable/mutation.rb, line 35 def mutate_gene(instance, gene_index) gene = instance.genes[gene_index] mutant_gene = gene.class.new instance.genes[gene_index] = mutant_gene end
mutate_instance(instance)
click to toggle source
# File lib/evolvable/mutation.rb, line 26 def mutate_instance(instance) genes_count = instance.genes.count return if genes_count.zero? return mutate_gene(instance, rand(genes_count)) if rate.zero? genes_count.times { |index| mutate_gene(instance, index) if rand <= rate } end