class Evolvable::UniformCrossover

Public Instance Methods

call(population) click to toggle source
# File lib/evolvable/uniform_crossover.rb, line 5
def call(population)
  population.instances = initialize_offspring(population)
  population
end

Private Instance Methods

initialize_offspring(population) click to toggle source
# File lib/evolvable/uniform_crossover.rb, line 12
def initialize_offspring(population)
  parent_genes = population.instances.map!(&:genes)
  parent_gene_couples = parent_genes.combination(2).cycle
  Array.new(population.size) do |index|
    genes_1, genes_2 = parent_gene_couples.next
    genes = genes_1.zip(genes_2).map!(&:sample)
    population.new_instance(genes: genes, population_index: index)
  end
end