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