FRAMES NO FRAMES

IloSimulatedAnnealing

public IloMetaHeuristic IloSimulatedAnnealing(IloEnv env, IloRandom rand, IloNum startTemperature, IloNum reductionFactor, IloNum cutoffProbability=1e-5, IloNum freezingTemperature=0.0)
public IloMetaHeuristic IloSimulatedAnnealing(IloEnv env, IloNum & temperature, IloRandom rand, IloNum startTemperature, IloNum reductionFactor, IloNum cutoffProbability=1e-5, IloNum freezingTemperature=0.0)
Definition file: ilsolver/iimmeta.h
Include file: <ilsolver/iimls.h>

This function returns a metaheuristic that implements a simulated annealing behavior. This metaheuristic discards neighbors using a probabilistic rule based on the cost of the neighbor and a notion of temperature. We will describe the operation of this metaheuristic as if it is performing a minimization procedure, but maximization can also be performed. Given a current solution of cost c, a neighbor of cost c+d, a temperature of T, and a random number r in the range [0..1), then the neighbor is accepted under the following condition:

r <= exp(-d / T)

When the increase in cost d is not strictly positive, the move is never rejected. When the increase in cost provided by the move is positive, the move is rejected probabilistically. Larger increases in cost and lower temperatures both make rejection of the move more likely. The current temperature is maintained internally by the returned metaheuristic or stored in the variable temperature, so that it can be inspected if desired.

The random number generator rand is used to generate the numbers r for the rule above. A non-reversible random number generator is recommended, as a reversible one generates the same random number for each leaf tested. To avoid the problem of the different state of the random number generator during re-computation, the simulated annealing test above is only performed when in the original computation mode. No neighbors are rejected when recomputing.

The overall idea of simulated annealing is to begin search at a high temperature to allow degrading moves to be taken readily— which allows the search to wander. Over time, the temperature is reduced, causing the search to be less inclined to accept degrading moves. The parameter startTemperature defines the temperature at which to begin the simulated annealing metaheuristic. Each time that the notify method is called for the returned metaheuristic, the temperature is reduced by the following rule.


 currentTemperature = currentTemperature * reductionFactor

where reductionFactor can range from 0 to 1. Usually, reduction factors are greater than 0.99. A high reduction factor results in slower cooling and, usually, in a better final solution. However, the search takes longer to stabilize in this condition.

If the parameter cutoffProbability is specified, it can be used as an efficiency measure. If the chance of accepting a neighbor according to the above probability equation is less than cutoffProbability, then it is rejected. This is done at each move by setting the upper bound on the cost equal to:

c - T * ln (cutoffProbability)

where c is the current cost and T is the current temperature. This allows pruning of neighbors with cost greater than this value without using the probabilistic rule. A cutoff probability of 0 results in a “pure' simulated annealing algorithm.

The parameter freezingTemperature can be specified to define a lower limit on the temperature reduction. Calling IloMetaHeuristic::complete on the returned metaheuristic returns IloTrue if and only if this temperature has been met.

Note
If you are using a neighborhood with the simulated annealing metaheuristic, it is advisable to randomize the neighborhood via IloRandomize, otherwise there will be a bias for accepting moves from the beginning of the neighborhood. In addition, it is also advisable to select the first move accepted by the simulated annealing metaheuristic, as this most faithfully follows the original simulated annealing algorithm.

For more information, see IloRandom in the IBM ILOG Concert Technology Reference Manual.

See Also: