class BOAST::GeneticOptimizer

Public Class Methods

new(search_space, options = {} ) click to toggle source
Calls superclass method BOAST::Optimizer::new
# File lib/BOAST/Optimization/Optimization.rb, line 113
    def initialize(search_space, options = {} )
      super
      require 'darwinning'
      s = <<EOF
      @organism = Class::new(Darwinning::Organism) do
        @@block = nil
        def self.block
          return @@block
        end
        def self.block=(block)
          @@block = block
        end
        @@experiments = 0
        def self.experiments
          return @@experiments
        end
        def self.experiments=(experiments)
          @@experiments = experiments
        end
EOF
      @search_space.parameters.each { |param|
      s += <<EOF
        @genes.push( Darwinning::Gene.new(name: #{param.name.inspect}, value_range: #{param.values.inspect}) )
EOF
      }
      s += <<EOF
        def initialize(*args)
          super
        end

        def fitness
          return @fitness if @fitness
          opts = {}
          genes.each { |gene|
            opts[gene.name] = genotypes[gene]
          }
          @fitness = @@block.call(opts)
          @@experiments = @@experiments + 1
          return fitness
        end

        def to_a
          opts = {}
          genes.each { |gene|
            opts[gene.name] = genotypes[gene]
          }
          return [opts, fitness]
        end

        def to_s
          return to_a.to_s
        end

      end
EOF
      eval s
    end

Public Instance Methods

optimize(options={}, &block) click to toggle source
# File lib/BOAST/Optimization/Optimization.rb, line 171
def optimize(options={}, &block)
  opts = { :population_size => 20,
           :fitness_goal => 0,
           :generations_limit => 100,
           :search_space => @search_space }
  opts.update(options)
  opts[:organism] = @organism
  @organism.block = block
  @organism.experiments = 0
  population = Darwinning::Population.new(opts)
  population.evolve!
  @history = population.history
  @experiments = @organism.experiments
  return population.best_member.to_a
end