class Algorithms::SimulatedAnnealing::Engine
Public Class Methods
new(solution)
click to toggle source
# File lib/algorithms/simulated_annealing.rb, line 16 def initialize(solution) @initial_solution = solution @solutions_history = [@initial_solution] end
Public Instance Methods
best_solution()
click to toggle source
# File lib/algorithms/simulated_annealing.rb, line 32 def best_solution; @solutions_history[-1] end
run(iterations)
click to toggle source
# File lib/algorithms/simulated_annealing.rb, line 21 def run(iterations) iterations.times do |i| temperature = iterations.to_f / i.to_f current_solution = @solutions_history[-1] next_solution = current_solution.next_solution if acceptance_probability(current_solution.score, next_solution.score, temperature) > rand @solutions_history << next_solution end end end
Private Instance Methods
acceptance_probability(current_score, next_score, temperature)
click to toggle source
# File lib/algorithms/simulated_annealing.rb, line 36 def acceptance_probability(current_score, next_score, temperature) if next_score > current_score return 1.0 end Math.exp((next_score - current_score) / temperature) end