Class: Evolvable::Evolution

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/evolvable/evolution.rb

Overview

Evolution moves a population from one generation to the next. It runs in three steps: selection, combination, and mutation. You can swap out any step with your own strategy.

Default pipeline:

  1. Selection – keep the most fit evolvables
  2. Combination – create offspring by recombining genes
  3. Mutation – add random variation to preserve diversity

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(selection: Selection.new, combination: GeneCombination.new, mutation: Mutation.new) ⇒ Evolution

Initializes a new evolution object.

Parameters:

  • selection (Evolvable::Selection, Hash) (defaults to: Selection.new)

    The selection strategy

  • combination (Evolvable::Combination, Hash) (defaults to: GeneCombination.new)

    The combination strategy

  • mutation (Evolvable::Mutation, Hash) (defaults to: Mutation.new)

    The mutation strategy



25
26
27
28
29
30
31
# File 'lib/evolvable/evolution.rb', line 25

def initialize(selection: Selection.new,
               combination: GeneCombination.new,
               mutation: Mutation.new)
  @selection = selection
  @combination = combination
  @mutation = mutation
end

Instance Attribute Details

#combinationObject

Returns the value of attribute combination.



33
34
35
# File 'lib/evolvable/evolution.rb', line 33

def combination
  @combination
end

#mutationObject

Returns the value of attribute mutation.



33
34
35
# File 'lib/evolvable/evolution.rb', line 33

def mutation
  @mutation
end

#selectionObject

Returns the value of attribute selection.



33
34
35
# File 'lib/evolvable/evolution.rb', line 33

def selection
  @selection
end

Instance Method Details

#call(population) ⇒ Evolvable::Population

Executes the evolution process on the population. Applies selection, combination, and mutation in sequence.

Parameters:

Returns:



74
75
76
77
78
79
# File 'lib/evolvable/evolution.rb', line 74

def call(population)
  selection.call(population)
  combination.call(population)
  mutation.call(population)
  population
end