class Evolvable::Population

Attributes

evaluation[RW]
evolution[RW]
evolutions_count[RW]
evolvable_class[RW]
gene_space[RW]
id[RW]
instances[RW]
name[RW]
size[RW]

Public Class Methods

new(id: nil, evolvable_class:, name: nil, size: 40, evolutions_count: 0, gene_space: nil, evolution: Evolution.new, evaluation: Evaluation.new, instances: []) click to toggle source
# File lib/evolvable/population.rb, line 7
def initialize(id: nil,
               evolvable_class:,
               name: nil,
               size: 40,
               evolutions_count: 0,
               gene_space: nil,
               evolution: Evolution.new,
               evaluation: Evaluation.new,
               instances: [])
  @id = id
  @evolvable_class = evolvable_class
  @name = name
  @size = size
  @evolutions_count = evolutions_count
  @gene_space = initialize_gene_space(gene_space)
  @evolution = evolution
  @evaluation = evaluation || Evaluation.new
  initialize_instances(instances)
end

Public Instance Methods

best_instance() click to toggle source
# File lib/evolvable/population.rb, line 68
def best_instance
  evaluation.best_instance(self)
end
evolve(count: Float::INFINITY, goal_value: nil) click to toggle source
# File lib/evolvable/population.rb, line 54
def evolve(count: Float::INFINITY, goal_value: nil)
  goal.value = goal_value if goal_value
  (1..count).each do
    before_evaluation(self)
    evaluation.call(self)
    before_evolution(self)
    break if met_goal?

    evolution.call(self)
    self.evolutions_count += 1
    after_evolution(self)
  end
end
met_goal?() click to toggle source
# File lib/evolvable/population.rb, line 72
def met_goal?
  evaluation.met_goal?(self)
end
new_instance(genes: [], population_index: nil) click to toggle source
# File lib/evolvable/population.rb, line 76
def new_instance(genes: [], population_index: nil)
  evolvable_class.new_instance(population: self,
                               genes: genes,
                               population_index: population_index)
end

Private Instance Methods

initialize_gene_space(gene_space) click to toggle source
# File lib/evolvable/population.rb, line 84
def initialize_gene_space(gene_space)
  return GeneSpace.build(gene_space) if gene_space

  evolvable_class.new_gene_space
end
initialize_instances(instances) click to toggle source
# File lib/evolvable/population.rb, line 90
def initialize_instances(instances)
  @instances = instances || []
  (@size - instances.count).times do |n|
    genes = gene_space.new_genes
    @instances << new_instance(genes: genes, population_index: n)
  end
end