Multidimensional minimization by simulated annealing (GSL) More...
#include <anneal_gsl.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.
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 o2scl::mmin_base::tol_abs. If none of the mmin_base::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 o2scl::mmin_base::tol_abs, then the step sizes are decreased by a factor of step_dec (default 1.5) for the next iteration.
If o2scl::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 .
Definition at line 144 of file 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 > &ag) | |
Copy constructor. | |
anneal_gsl< func_t, vec_t, rng_t > & | operator= (const anneal_gsl< func_t, vec_t, rng_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 > &ab) | |
Copy constructor. | |
anneal_base< func_t, vec_t, rng_t > & | operator= (const anneal_base< func_t, vec_t, rng_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=. | |
Public Attributes | |
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_t | rng |
The default random number generator. | |
o2scl::prob_dens_uniform | dist |
The random distribution object. | |
![]() | |
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, vec_t &best_x, double best_E, 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 | step (vec_t &sx, int nvar) |
Make a step to a new attempted minimum. | |
Protected Attributes | |
double | step_norm |
Normalization for step. | |
ubvector | step_vec |
Vector of step sizes. | |
![]() | |
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).