Class: BOAST::BruteForceOptimizer

Inherits:
Optimizer
  • Object
show all
Defined in:
lib/BOAST/Optimization/Optimization.rb

Instance Attribute Summary

Attributes inherited from Optimizer

#experiments, #history, #log, #search_space

Instance Method Summary collapse

Methods included from PrivateStateAccessor

#address_size, #address_size=, #annotate, #annotate=, #annotate?, #annotate_indepth_list, #annotate_indepth_list=, #annotate_level, #annotate_level=, #annotate_list, #annotate_list=, #architecture, #architecture=, #array_start, #array_start=, #chain_code, #chain_code=, #chain_code?, #debug, #debug=, #debug?, #debug_kernel_source, #debug_kernel_source=, #debug_kernel_source?, #debug_source, #debug_source=, #debug_source?, #decl_module, #decl_module=, #decl_module?, #default_align, #default_align=, #default_int_signed, #default_int_signed=, #default_int_signed?, #default_int_size, #default_int_size=, #default_real_size, #default_real_size=, #default_type, #default_type=, #disable_openmp, #disable_openmp=, #disable_openmp?, #executable, #executable=, #executable?, #ffi, #ffi=, #ffi?, #fortran_line_length, #fortran_line_length=, #get_address_size, #get_annotate, #get_annotate_indepth_list, #get_annotate_level, #get_annotate_list, #get_architecture, #get_array_start, #get_chain_code, #get_debug, #get_debug_kernel_source, #get_debug_source, #get_decl_module, #get_default_align, #get_default_int_signed, #get_default_int_size, #get_default_real_size, #get_default_type, #get_disable_openmp, #get_executable, #get_ffi, #get_fortran_line_length, #get_indent_increment, #get_indent_level, #get_keep_temp, #get_lang, #get_model, #get_optimizer_log, #get_optimizer_log_file, #get_output, #get_replace_constants, #get_use_vla, #get_verbose, #indent_increment, #indent_increment=, #indent_level, #indent_level=, #keep_temp, #keep_temp=, #keep_temp?, #lang, #lang=, #model, #model=, #optimizer_log, #optimizer_log=, #optimizer_log?, #optimizer_log_file, #optimizer_log_file=, #output, #output=, #replace_constants, #replace_constants=, #replace_constants?, #set_address_size, #set_annotate, #set_annotate_indepth_list, #set_annotate_level, #set_annotate_list, #set_architecture, #set_array_start, #set_chain_code, #set_debug, #set_debug_kernel_source, #set_debug_source, #set_decl_module, #set_default_align, #set_default_int_signed, #set_default_int_size, #set_default_real_size, #set_default_type, #set_disable_openmp, #set_executable, #set_ffi, #set_fortran_line_length, #set_indent_increment, #set_indent_level, #set_keep_temp, #set_lang, #set_model, #set_optimizer_log, #set_optimizer_log_file, #set_output, #set_replace_constants, #set_use_vla, #set_verbose, #use_vla, #use_vla=, #use_vla?, #verbose, #verbose=, #verbose?

Constructor Details

#initialize(search_space, options = {}) ⇒ BruteForceOptimizer

Returns a new instance of BruteForceOptimizer.



179
180
181
182
183
184
185
# File 'lib/BOAST/Optimization/Optimization.rb', line 179

def initialize(search_space, options = {} )
  super
  @randomize = options[:randomize]
  @checkpoint = options[:checkpoint]
  @checkpoint_size = options[:checkpoint_size]
  @seed = options[:seed]
end

Instance Method Details

#each(&block) ⇒ Object



208
209
210
# File 'lib/BOAST/Optimization/Optimization.rb', line 208

def each(&block)
  return self.points.each(&block)
end

#each_random(&block) ⇒ Object



212
213
214
# File 'lib/BOAST/Optimization/Optimization.rb', line 212

def each_random(&block)
  return self.points.shuffle.each(&block)
end

#optimize(&block) ⇒ Object



216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
# File 'lib/BOAST/Optimization/Optimization.rb', line 216

def optimize(&block)
  @experiments = 0
  @log = {}
  best = [nil, Float::INFINITY]
  pts = points
  
  (@seed ? pts.shuffle!(random: Random.new(@seed)) : pts.shuffle!) if @randomize

  pts = pts.slice(@checkpoint,@checkpoint_size) if @checkpoint_size

  pts.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

#pointsObject



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/BOAST/Optimization/Optimization.rb', line 187

def points
  params2 = @search_space.parameters.dup
  param = params2.shift
  
  pts = param.values.collect { |val| {param.name => val} }
  if params2.size == 0 then
    pts4 = pts 
  else
    optim2 = BruteForceOptimizer::new(OptimizationSpace::new(*params2))
    pts3=[]
    pts.each{ |p1|
      optim2.each { |p2|
        pts3.push(p1.dup.update(p2))
      }
    }
    pts4 = pts3
  end
  @search_space.remove_unfeasible pts4
  return pts4
end