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