Class: GeneGenie::Genie

Inherits:
Object
  • Object
show all
Defined in:
lib/gene_genie/genie.rb

Overview

Top level, basic interface for GA optimisation. Genie will attempt to optimise based on best-guess defaults if none are provided Genie is basically a wrapper around GenePool that lets you get going as quickly as possible by providing a reasonable set of defaults. For more control and customisation, go straight to using GenePoo

Since:

  • 0.0.1

Constant Summary collapse

DEFAULT_NO_OF_GENERATIONS =

Since:

  • 0.0.1

50
IMPROVEMENT_THRESHOLD =

%

Since:

  • 0.0.1

0.1

Instance Method Summary collapse

Constructor Details

#initialize(template, fitness_evaluator) ⇒ Genie

Returns a new instance of Genie.

Since:

  • 0.0.1



18
19
20
21
22
# File 'lib/gene_genie/genie.rb', line 18

def initialize(template, fitness_evaluator)
  @template = template
  @fitness_evaluator = fitness_evaluator
  @gene_pool = GenePool.build(template, fitness_evaluator)
end

Instance Method Details

#bestObject

Since:

  • 0.0.1



46
47
48
# File 'lib/gene_genie/genie.rb', line 46

def best
  @gene_pool.best_ever.to_hashes
end

#best_fitnessObject

Since:

  • 0.0.1



50
51
52
# File 'lib/gene_genie/genie.rb', line 50

def best_fitness
  @gene_pool.best_ever.fitness
end

#optimise(number_of_generations = 0) ⇒ Object Also known as: optimize

Optimise the genes until the convergence criteria are met. A reasonable set of defaults for criteria will be applied.

Parameters:

  • number_of_generations (Integer) (defaults to: 0)

Since:

  • 0.0.1



27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/gene_genie/genie.rb', line 27

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

#register_listener(listener) ⇒ Object

Since:

  • 0.0.1



42
43
44
# File 'lib/gene_genie/genie.rb', line 42

def register_listener(listener)
  @gene_pool.register_listener(listener)
end