Module: EvoSynth::Evolvers

Defined in:
lib/evosynth/evolvers/elitism.rb,
lib/evosynth/evolvers/evolver.rb,
lib/evosynth/evolvers/runnable_evolver.rb,
lib/evosynth/evolvers/basic/hillclimber.rb,
lib/evosynth/evolvers/basic/steady_state_ga.rb,
lib/evosynth/evolvers/profile_using_evolver.rb,
lib/evosynth/evolvers/basic/genetic_algorithm.rb,
lib/evosynth/evolvers/basic/memetic_algorithm.rb,
lib/evosynth/evolvers/local_search/local_search.rb,
lib/evosynth/evolvers/basic/population_hillclimber.rb,
lib/evosynth/evolvers/evolution_strategies/adaptive_es.rb,
lib/evosynth/evolvers/local_search/acceptance_threshold.rb,
lib/evosynth/evolvers/local_search/acceptance_hillclimber.rb,
lib/evosynth/evolvers/evolution_strategies/derandomized_es.rb,
lib/evosynth/evolvers/evolution_strategies/selfadaptive_es.rb,
lib/evosynth/evolvers/local_search/acceptance_great_deluge.rb,
lib/evosynth/evolvers/coevolutionary/balanced_coevolutionary.rb,
lib/evosynth/evolvers/local_search/acceptance_record_to_record.rb,
lib/evosynth/evolvers/coevolutionary/round_robin_coevolutionary.rb,
lib/evosynth/evolvers/local_search/acceptance_simulated_annealing.rb

Defined Under Namespace

Modules: Evolver, ProfileUsingEvolver, RunnableEvolver Classes: AdaptiveES, BalancedCoevolutionary, DerandomizedES, GeneticAlgorithm, Hillclimber, LocalSearch, MemeticAlgorithm, PopulationHillclimber, RoundRobinCoevolutionary, SelfAdaptiveES, SteadyStateGA

Class Method Summary collapse

Class Method Details

.add_strong_elistism(evolver, n = 1) ⇒ Object

this function adds weak elistism to a evolver using instance_eval

strong elitism: copy best n parents into offspring population (replace worst n childrens)

TODO: add some elegance to this code ;-)



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/evosynth/evolvers/elitism.rb', line 65

def Evolvers.add_strong_elistism(evolver, n = 1)
  evolver.population rescue raise "Evolver not supported!"

  if (n == 1)
    evolver.instance_eval("
      alias :original_next_generation :next_generation
      alias :original_to_s :to_s

      def next_generation
        best = population.best

        original_next_generation

        population.remove(population.worst)
        population.add(best)
      end

      def to_s
        '<< strong elitism >> ' + original_to_s
      end
    ")
  else
    evolver.instance_eval("
      alias :original_next_generation :next_generation
      alias :original_to_s :to_s

      def next_generation
        best = population.best(#{n})

        original_next_generation

        worst = population.worst(#{n})
        worst.each { |individual| population.remove(individual) }
        best.each { |individual| population.add(individual) }
      end

      def to_s
        '<< strong elitism >> ' + original_to_s
      end
    ")
  end
end

.add_weak_elistism(evolver) ⇒ Object

this function adds weak elistism to a evolver using instance_eval

weak elitism: if fitness of childrens decreased, replace worst individual with best parent



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/evosynth/evolvers/elitism.rb', line 35

def Evolvers.add_weak_elistism(evolver)
  evolver.population rescue raise "Evolver not supported!"

  evolver.instance_eval(%q{
    alias :original_next_generation :next_generation
    alias :original_to_s :to_s

    def next_generation
      best_individual = population.best

      original_next_generation

      if population.best < best_individual
        population.remove(population.worst)
        population.add(best_individual)
      end
    end

    def to_s
      "<< weak elitism >> " + original_to_s
    end
  })
end