Multidimensional minimization by simulated annealing (GSL) More...
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.
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 a child class which overwrites these functions.
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, anneal.
The default behavior is as follows: Initially, the step sizes are chosen to be 1.0 (or whatever was recently specified in set_step() ) and the temperature to be T_start (default 1.0). Each iteration decreases the temperature by a factor of T_dec (default 1.5) for each step, and the minimizer is finished when the next decrease would bring the temperature below multi_min::tol_abs. 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 min_step_ratio (default 100) times multi_min::tol_abs, then the step sizes are decreased by a factor of step_dec (default 1.5) for the next iteration.
If mmin_base::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 .
The form of the user-specified function is as in multi_funct11 has a "function value" which is the value of the function (given in the third argument as a number of type double
), and a "return value" (the integer return value). The initial function evaluation which is performed at the user-specified initial guess must give 0 as the return value. If subsequent function evaluations have a non-zero return value, then the resulting point is ignored and a new point is selected.
This class thus can sometimes handle constrained minimization problems. If the user ensures that the function's return value is non-zero when the function is evaluated outside the allowed region, the minimizer will not accept any steps which take the minimizer outside the allowed region. Note that this should be done with care, however, as this approach may cause convergence problems with sufficiently difficult functions or constraints.
See also a multi-threaded version of this class in anneal_mt.
Definition at line 142 of file anneal_gsl.h.
#include <anneal_gsl.h>
Public Types | |
typedef boost::numeric::ublas::vector < double > | ubvector |
Public Member Functions | |
virtual int | mmin (size_t nvar, vec_t &x0, double &fmin, 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 ("anneal_gsl") | |
template<class vec2_t > | |
int | set_step (size_t nv, vec2_t &stepv) |
Set the step sizes. | |
anneal_gsl (const anneal_gsl< func_t, vec_t, rng_t, rng_dist_t > &ag) | |
Copy constructor. | |
anneal_gsl< func_t, vec_t, rng_t, rng_dist_t > & | operator= (const anneal_gsl< func_t, vec_t, rng_t, rng_dist_t > &ag) |
Copy constructor from operator=. | |
![]() | |
virtual int | print_iter (size_t nv, vec_t &x, double y, int iter, double tptr, std::string comment) |
Print out iteration information. More... | |
anneal_base (const anneal_base< func_t, vec_t, rng_t, rng_dist_t > &ab) | |
Copy constructor. | |
anneal_base< func_t, vec_t, rng_t, rng_dist_t > & | operator= (const anneal_base< func_t, vec_t, rng_t, rng_dist_t > &ab) |
Copy constructor from operator=. | |
![]() | |
mmin_base (const mmin_base< func_t, func_t, vec_t > &mb) | |
Copy constructor. | |
int | set_verbose_stream (std::ostream &out, std::istream &in) |
Set streams for verbose I/O. More... | |
virtual int | mmin_de (size_t nvar, vec_t &x, double &fmin, func_t &func, func_t &dfunc) |
Calculate the minimum min of func w.r.t. the array x of size nvar with gradient dfunc . | |
int | print_iter (size_t nv, vec2_t &x, double y, int iter, double value, double limit, std::string comment) |
Print out iteration information. More... | |
const char * | type () |
Return string denoting type ("mmin_base") | |
mmin_base< func_t, func_t, vec_t > & | operator= (const mmin_base< func_t, func_t, vec_t > &mb) |
Copy constructor from operator=. | |
Data Fields | |
double | boltz |
Boltzmann factor (default 1.0). | |
double | T_start |
Initial temperature (default 1.0) | |
double | T_dec |
Factor to decrease temperature by (default 1.5) | |
double | step_dec |
Factor to decrease step size by (default 1.5) | |
double | min_step_ratio |
Ratio between minimum step size and tol_abs (default 100.0) | |
![]() | |
rng_dist_t | rng_dist |
The default random number distribution. | |
rng_t | rng |
The default random number generator. | |
![]() | |
int | verbose |
Output control. | |
int | ntrial |
Maximum number of iterations. | |
double | tol_rel |
Function value tolerance. | |
double | tol_abs |
The independent variable tolerance. | |
int | last_ntrial |
The number of iterations for in the most recent minimization. | |
bool | err_nonconv |
If true, call the error handler if the routine does not "converge". | |
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 | step (vec_t &sx, int nvar) |
Make a step to a new attempted minimum. | |
Protected Attributes | |
ubvector | step_vec |
Vector of step sizes. | |
Storage for present, next, and best vectors | |
ubvector | x |
ubvector | new_x |
ubvector | best_x |
ubvector | old_x |
![]() | |
std::ostream * | outs |
Stream for verbose output. | |
std::istream * | ins |
Stream for verbose input. | |
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).
Hosted at
.