Simulated Annealing is an stochastic optimization algorithm which is able to deliver near-optimal results quickly without knowing the gradient of the function being optimized.
More...
|
| SA (FunctionType &function, CoolingScheduleType &coolingSchedule, const size_t maxIterations=1000000, const double initT=10000., const size_t initMoves=1000, const size_t moveCtrlSweep=100, const double tolerance=1e-5, const size_t maxToleranceSweep=3, const double maxMoveCoef=20, const double initMoveCoef=0.3, const double gain=0.3) |
| Construct the SA optimizer with the given function and parameters. More...
|
|
const FunctionType & | Function () const |
| Get the instantiated function to be optimized. More...
|
|
FunctionType & | Function () |
| Modify the instantiated function. More...
|
|
double | Gain () const |
| Get the gain. More...
|
|
double & | Gain () |
| Modify the gain. More...
|
|
size_t | InitMoves () const |
| Get the initial moves. More...
|
|
size_t & | InitMoves () |
| Modify the initial moves. More...
|
|
size_t | MaxIterations () const |
| Get the maximum number of iterations. More...
|
|
size_t & | MaxIterations () |
| Modify the maximum number of iterations. More...
|
|
arma::mat | MaxMove () const |
| Get the maximum move size of each parameter. More...
|
|
arma::mat & | MaxMove () |
| Modify the maximum move size of each parameter. More...
|
|
size_t | MaxToleranceSweep () const |
| Get the maxToleranceSweep. More...
|
|
size_t & | MaxToleranceSweep () |
| Modify the maxToleranceSweep. More...
|
|
size_t | MoveCtrlSweep () const |
| Get sweeps per move control. More...
|
|
size_t & | MoveCtrlSweep () |
| Modify sweeps per move control. More...
|
|
arma::mat | MoveSize () const |
| Get move size of each parameter. More...
|
|
arma::mat & | MoveSize () |
| Modify move size of each parameter. More...
|
|
double | Optimize (arma::mat &iterate) |
| Optimize the given function using simulated annealing. More...
|
|
double | Temperature () const |
| Get the temperature. More...
|
|
double & | Temperature () |
| Modify the temperature. More...
|
|
double | Tolerance () const |
| Get the tolerance. More...
|
|
double & | Tolerance () |
| Modify the tolerance. More...
|
|
template<typename FunctionType, typename CoolingScheduleType = ExponentialSchedule>
class mlpack::optimization::SA< FunctionType, CoolingScheduleType >
Simulated Annealing is an stochastic optimization algorithm which is able to deliver near-optimal results quickly without knowing the gradient of the function being optimized.
It has unique hill climbing capability that makes it less vulnerable to local minima. This implementation uses exponential cooling schedule and feedback move control by default, but the cooling schedule can be changed via a template parameter.
The algorithm keeps the temperature at initial temperature for initMove steps to get rid of the dependency on the initial condition. After that, it cools every step until the system is considered frozen or maxIterations is reached.
At each step, SA only perturbs one parameter at a time. When SA has perturbed all parameters in a problem, a sweep has been completed. Every moveCtrlSweep sweeps, the algorithm does feedback move control to change the average move size depending on the responsiveness of each parameter. Parameter gain controls the proportion of the feedback control.
The system is considered "frozen" when its score fails to change more then tolerance for maxToleranceSweep consecutive sweeps.
For SA to work, the FunctionType parameter must implement the following two methods:
double Evaluate(const arma::mat& coordinates); arma::mat& GetInitialPoint();
and the CoolingScheduleType parameter must implement the following method:
double NextTemperature(const double currentTemperature, const double currentValue);
which returns the next temperature given current temperature and the value of the function being optimized.
- Template Parameters
-
FunctionType | objective function type to be minimized. |
CoolingScheduleType | type for cooling schedule |
Definition at line 65 of file sa.hpp.