class GeneGenie::ProportionalSelector
A proportional gene selection algorithm. Genes are picked in proportion to thier normalised score.
Public Instance Methods
call(pool)
click to toggle source
# File lib/gene_genie/selector/proportional_selector.rb, line 5 def call(pool) [pick_one(pool), pick_one(pool)] end
Private Instance Methods
normalised_fitness(gene,pool)
click to toggle source
# File lib/gene_genie/selector/proportional_selector.rb, line 24 def normalised_fitness(gene,pool) gene.fitness - pool.worst_fitness + 1 end
pick_one(pool)
click to toggle source
# File lib/gene_genie/selector/proportional_selector.rb, line 11 def pick_one(pool) proportional_index = rand(total_normalised_fitness(pool)) total = 0 pool.genes.each_with_index do |gene, index| total += normalised_fitness(gene,pool) return gene if total >= proportional_index || index == (pool.size - 1) end end
total_normalised_fitness(pool)
click to toggle source
# File lib/gene_genie/selector/proportional_selector.rb, line 20 def total_normalised_fitness(pool) pool.genes.map { |gene| normalised_fitness(gene,pool) }.reduce(:+) end