#include <gsl_anneal.h>
This class is a modification of simulated annealing as implemented in GSL in the function gsl_siman_solve()
. It acts as a generic multidimensional minimizer for any function given a generic temperature schedule specified by the user.
The simulated annealing algorithm proposes a displacement of one coordinate of the previous point by
where the are random numbers between 0 and 1. The displacement is accepted or rejected based on the Metropolis method. The random number generator is set in the parent, sim_anneal.
There are a large variety of strategies for choosing the temperature evolution. To offer the user the largest possible flexibility, the temperature evolution is controlled by a the virtual functions start() and next() which can be freely changed by creating descendant.
The default behavior is as follows: Initially, the step sizes are chosen to be 10 and the temperature to be 1. Each iteration decreases the temperature by a factor of 1.5 for each step, and the minimizer is finished when the next decrease would bring the temperature below multi_min::tolx. If none of the multi_min::ntrial steps in a particular iteration changes the value of the minimum, and the step sizes are greater than 100 times multi_min::tolx, then the step sizes are decreased by a factor of 1.5 for the next iteration.
If multi_min::verbose is greater than zero, then mmin() will print out information and/or request a keypress after the function iterations for each temperature.
An example demonstrating the usage of this class is given in examples/ex_anneal.cpp
and in the Simulated annealing example .
See also a multi-threaded version of this class in anneal_mt.
Definition at line 121 of file gsl_anneal.h.
Public Member Functions | |
virtual int | mmin (size_t nvar, vec_t &x0, double &fmin, param_t &pa, func_t &func) |
Calculate the minimum fmin of func w.r.t the array x0 of size nvar . | |
virtual const char * | type () |
Return string denoting type ("gsl_anneal"). | |
Data Fields | |
double | boltz |
Boltzmann factor (default 1.0). | |
Protected Member Functions | |
virtual int | next (size_t nvar, vec_t &x_old, double min_old, vec_t &x_new, double min_new, double &T, size_t n_moves, bool &finished) |
Determine how to change the minimization for the next iteration. | |
virtual int | start (size_t nvar, double &T) |
Setup initial temperature and stepsize. | |
virtual int | allocate (size_t n, double boltz_factor=1.0) |
Allocate memory for a minimizer over n dimensions with stepsize step and Boltzmann factor boltz_factor . | |
virtual int | free () |
Free allocated memory. | |
virtual int | step (vec_t &sx, int nvar) |
Make a step to a new attempted minimum. | |
Protected Attributes | |
alloc_t | ao |
Allocation object. | |
size_t | nstep |
Number of step sizes. | |
double * | step_sizes |
Step sizes. | |
Storage for present, next, and best vectors | |
alloc_vec_t | x |
alloc_vec_t | new_x |
alloc_vec_t | best_x |
alloc_vec_t | old_x |
Documentation generated with Doxygen and provided under the GNU Free Documentation License. See License Information for details.
Project hosting provided by
,
O2scl Sourceforge Project Page