class Annealing::Simulator
It runs simulated annealing
Attributes
cooling_rate[R]
temperature[R]
Public Class Methods
new(temperature: nil, cooling_rate: nil)
click to toggle source
# File lib/annealing/simulator.rb, line 8 def initialize(temperature: nil, cooling_rate: nil) @temperature = temperature || Annealing.configuration.temperature @cooling_rate = cooling_rate || Annealing.configuration.cooling_rate raise 'Invalid initial temperature' if @temperature.negative? normalize_cooling_rate end
Public Instance Methods
run(collection, calculator = nil)
click to toggle source
# File lib/annealing/simulator.rb, line 17 def run(collection, calculator = nil) best = current = Pool.new(collection.shuffle, calculator) Annealing.logger.debug(" Original: #{current}") cool_down do |temp| current = current.solution_at(temp) best = current if current.better_than?(best) end Annealing.logger.debug("Optimized: #{best}") best end
Private Instance Methods
cool_down() { |temp| ... }
click to toggle source
# File lib/annealing/simulator.rb, line 30 def cool_down (temperature..0).step(cooling_rate).each { |temp| yield temp } end
normalize_cooling_rate()
click to toggle source
# File lib/annealing/simulator.rb, line 34 def normalize_cooling_rate @cooling_rate = -1.0 * cooling_rate if cooling_rate.positive? end