class GeneGenie::Genie
Top level, basic interface for GA optimisation. Genie
will attempt to optimise based on best-guess defaults if none are provided @since 0.0.1
Constants
- DEFAULT_NO_OF_GENERATIONS
- IMPROVEMENT_THRESHOLD
Public Class Methods
new(template, fitness_evaluator)
click to toggle source
# File lib/gene_genie/genie.rb, line 14 def initialize(template, fitness_evaluator) @template = template @fitness_evaluator = fitness_evaluator @gene_pool = GenePool.build(template, fitness_evaluator) end
Public Instance Methods
best()
click to toggle source
# File lib/gene_genie/genie.rb, line 38 def best @gene_pool.best_ever.to_hashes end
best_fitness()
click to toggle source
# File lib/gene_genie/genie.rb, line 42 def best_fitness @gene_pool.best_ever.fitness end
optimise(number_of_generations = 0)
click to toggle source
Optimise the genes until the convergence criteria are met. A reasonable set of defaults for criteria will be applied. @param [Integer] number_of_generations
# File lib/gene_genie/genie.rb, line 23 def optimise(number_of_generations = 0) previous_best = best_fitness # optimise if number_of_generations > 0 evolve_n_times(number_of_generations) else optimise_by_strategy end @best_fitness = @fitness_evaluator.fitness(best) @best_fitness > previous_best end
Also aliased as: optimize
Private Instance Methods
evolve_n_times(n)
click to toggle source
# File lib/gene_genie/genie.rb, line 48 def evolve_n_times(n) n.times { @gene_pool.evolve } end
optimise_by_strategy()
click to toggle source
# File lib/gene_genie/genie.rb, line 52 def optimise_by_strategy DEFAULT_NO_OF_GENERATIONS.times do @gene_pool.evolve end DEFAULT_NO_OF_GENERATIONS.times do current_fitness = best_fitness @gene_pool.evolve break if best_fitness < current_fitness * (1 + (IMPROVEMENT_THRESHOLD / 100)) end end