The simulated annealing algorithm performs the following steps:
The algorithm generates
a random trial point. The algorithm chooses the distance of the trial
point from the current point by a probability distribution with a
scale depending on the current temperature. You set the trial point
distance distribution as a function with the
@annealingfast (default) —
Step length equals the current temperature, and direction is uniformly
@annealingboltz — Step length
equals the square root of temperature, and direction is uniformly
@myfun — Custom annealing
myfun. For custom annealing function
syntax, see Algorithm Settings.
After generating the trial point, the algorithm shifts it, if necessary, to stay within bounds. The algorithm shifts each infeasible component of the trial point to a value chosen uniformly at random between the violated bound and the (feasible) value at the previous iteration.
The algorithm determines
whether the new point is better or worse than the current point. If
the new point is better than the current point, it becomes the next
point. If the new point is worse than the current point, the algorithm
can still make it the next point. The algorithm accepts a worse point
based on an acceptance function. Choose the acceptance function with
AcceptanceFcn option. Choices:
@acceptancesa (default) —
Simulated annealing acceptance function. The probability of acceptance
Δ = new objective – old objective.
T0 = initial temperature of component i
T = the current temperature.
Since both Δ and T are positive, the probability of acceptance is between 0 and 1/2. Smaller temperature leads to smaller acceptance probability. Also, larger Δ leads to smaller acceptance probability.
@myfun — Custom acceptance
myfun. For custom acceptance function
syntax, see Algorithm Settings.
The algorithm systematically lowers the
temperature, storing the best point found so far. The
specifies the function the algorithm uses to update the temperature.
Let k denote the annealing parameter. (The annealing
parameter is the same as the iteration number until reannealing.)
@temperatureexp (default) — T = T0 *
@temperaturefast — T = T0 / k.
@temperatureboltz — T = T0 /
@myfun — Custom temperature
myfun. For custom temperature function
syntax, see Temperature Options.
after it accepts
ReannealInterval points. Reannealing
sets the annealing parameters to lower values than the iteration number,
thus raising the temperature in each dimension. The annealing parameters
depend on the values of estimated gradients of the objective function
in each dimension. The basic formula is
ki = annealing
parameter for component i.
T0 = initial temperature of component i.
Ti = current temperature of component i.
si = gradient of objective in direction i times difference of bounds in direction i.
simulannealbnd safeguards the annealing
parameter values against
Inf and other improper
The algorithm stops when the average
change in the objective function is small relative to
or when it reaches any other stopping criterion. See Stopping Conditions for the Algorithm.
For more information on the algorithm, see Ingber .
The simulated annealing algorithm uses the following conditions to determine when to stop:
FunctionTolerance — The
algorithm runs until the average change in value of the objective
StallIterLim iterations is less than
the value of
FunctionTolerance. The default value
MaxIterations — The algorithm
stops when the number of iterations exceeds this maximum number of
iterations. You can specify the maximum number of iterations as a
positive integer or
Inf. The default value is
the maximum number of evaluations of the objective function. The algorithm
stops if the number of function evaluations exceeds the value of
The default value is
MaxTime specifies the maximum time
in seconds the algorithm runs before stopping. The default value is
ObjectiveLimit — The algorithm
stops when the best objective function value is less than or equal
to the value of
ObjectiveLimit. The default value
 Ingber, L. Adaptive simulated
annealing (ASA): Lessons learned. Invited paper to a special
issue of the Polish Journal Control and Cybernetics on
“Simulated Annealing Applied to Combinatorial Optimization.”
1995. Available from