Simulated Annealing

The following pseudo-code describes the Simulated Annealing algorithm.


SIMULATED-ANNEALING(problem, schedule)
    curr ← Randomly generated node

    for t = 1, 2, 3,...
        T = schedule(t)
        
        // System has reached final configuration
        if T == 0
            return curr
        end

        next ← randomly generated successor of curr
        ΔE ← next.value - curr.value


        // Always accept a better successor
        if ΔE > 0
            curr ← next
        else
            // ΔE is less than 0
            prob ← e^{ΔE / T}
            
            if rand_double() <= prob
                curr ← next
            end
        end
    end
end



Below is a graph of the exponential function with a negative argument: