class BOAST::BruteForceOptimizer
Public Class Methods
new(search_space, options = {} )
click to toggle source
Calls superclass method
BOAST::Optimizer::new
# File lib/BOAST/Optimization/Optimization.rb, line 191 def initialize(search_space, options = {} ) super @randomize = options[:randomize] @checkpoint = options[:checkpoint] @checkpoint_size = options[:checkpoint_size] @seed = options[:seed] end
Public Instance Methods
each() { |dup| ... }
click to toggle source
# File lib/BOAST/Optimization/Optimization.rb, line 213 def each array = @search_space.parameters.collect { |p| [p.name,p.values.to_a] } lazy_block = lambda { |rank, data| array[rank][1].each { |d| data[array[rank][0]] = d if rank == array.length - 1 then yield data.dup if @search_space.rules_checker(data) else lazy_block.call(rank+1, data) end } } if block_given? then lazy_block.call(0, {}) return self else return to_enum(:each) end end
each_random( &block)
click to toggle source
# File lib/BOAST/Optimization/Optimization.rb, line 233 def each_random( &block) self.points.shuffle.each(&block) return self if block_given? end
optimize(&block)
click to toggle source
# File lib/BOAST/Optimization/Optimization.rb, line 238 def optimize(&block) @experiments = 0 @log = {} best = [nil, Float::INFINITY] e = each if @randomize then e = e.to_a (@seed ? e.shuffle!(random: Random.new(@seed)) : e.shuffle!) end e = e.drop(@checkpoint).take(@checkpoint_size) if @checkpoint_size e.each { |config| @experiments += 1 metric = block.call(config) @log[config] = metric if optimizer_log best = [config, metric] if metric < best[1] } if optimizer_log_file then File::open(File::basename(optimizer_log_file,".yaml")+".yaml", "w") { |f| f.print YAML::dump(@log) } File::open(File::basename(optimizer_log_file,".yaml")+"_parameters.yaml", "w") { |f| f.print YAML::dump(@search_space.to_h) } end return best end
to_a()
click to toggle source
def points
array = @search_space.parameters.collect { |p| p.values.collect { |val| [p.name,val] } } pts = array[0] pts = pts.product(*array[1..-1]) if array.length > 1 pts = pts.collect { |a| Hash[ *a.flatten ] } return pts.select{ |pt| @search_space.rules_checker(pt) }
end
# File lib/BOAST/Optimization/Optimization.rb, line 207 def to_a return each.to_a end
Also aliased as: points