The library annealing_schedule
includes functions with signature
TemperatureSequence
for generating
linear, geometric, normal, exponential, and Lundy
temperature sequences.
The annealing schedule show below (figure on the left, red line) consists of a monotonically decreasing exponential sequence with start value Tstart = 0.3673892633, end value Tend = 0.0000017939, and with 750 steps.
The simulated annealing temperature schedule can be specified via the Simulator
parameter outerIterations
and by setting the class variable temperatureSequence
.
The green curve represents the first component of the perturbation magnitudes deltaPosition calculated by interpolated between deltaPositionMax = [2.0, 2.0, 2.0] and deltaPositionMin = [1e-6, 1e-6, 1e-6] using the function: deltaPosition(T) = a* T + b, where a = (deltaPositionMax - deltaPositionMin)/(Tstart - Tend) and b = deltaPositionMax - a*Tstart.
The perturbation magnitude deltaPosition specifies a region of the search space around the current solution position. From this region a random point is selected as the next potential solution.
SA is typically used to solve discrete optimization problems. However, the algorithm can be adapted to minimize continuous (multi-variate) functions by reducing the size of the perturbation magnitude, deltaPosition, during each (outer) SA iteration until the required solution precision is reached.
The right figure above shows the temperature during an SA process. In the example presented here, the search space is a sphere centred at the origin with radius 2. At high temperatures (red dots) deltaPosition approaches deltaPositionMax = [2.0, 2.0, 2.0] and the potential solutions are selected from the entire search space. As the temperature decreases (blue dots) deltaPosition approaches deltaPositionMin and, in this example, the solution converges towards the global minimum.
Please file feature requests and bugs at the issue tracker.