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
optimize(number_of_generations = 0)
Alias for: optimise

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