#include <modified_fire.h>
Public Member Functions | |
MODIFIED_FIRE (std::shared_ptr< pele::BasePotential > potential, pele::Array< double > &x0, double dtstart, double dtmax, double maxstep, size_t Nmin=5, double finc=1.1, double fdec=0.5, double fa=0.99, double astart=0.1, double tol=1e-4, bool stepback=true) | |
virtual | ~MODIFIED_FIRE () |
void | one_iteration () |
void | initialize_func_gradient () |
void | set_func_gradient (double f, Array< double > grad) |
void | reset (Array< double > &x0) |
An implementation of the *modified* FIRE optimization algorithm in c++.
The Fast Inertial Relaxation Engine is an optimization algorithm based on molecular dynamics with modifications to the velocity and adaptive time steps. The method is based on a blind skier searching for the bottom of a valley and is described and tested here:
Erik Bitzek, Pekka Koskinen, Franz Gaehler, Michael Moseler, and Peter Gumbsch. Phys. Rev. Lett. 97, 170201 (2006) http://link.aps.org/doi/10.1103/PhysRevLett.97.170201
This implementation of the algorithm differs significantly from the original algorithm in the order in which the steps are taken. Here we do the following:
-> initialise the velocities and gradients for some given coordinates -> set the velocity to the fire *inertial* velocity
Only then we use the MD integrator that here does things in this order:
-> compute the velocity difference and add it to the current velocity -> compute the new position given this velocity -> recompute gradient and energy
Once the integrator is done we continue following FIRE and compute
P = -g * f
here comes the other modification to the algorithm: if stepback is set to false then proceed just as the original FIRE algorithm prescribes, if stepback is set to true (default) then whenever P<=0 we undo the last step besides carrying out the operations defined by the original FIRE algorithm.
Definition at line 44 of file modified_fire.h.
pele::MODIFIED_FIRE::MODIFIED_FIRE | ( | std::shared_ptr< pele::BasePotential > | potential, |
pele::Array< double > & | x0, | ||
double | dtstart, | ||
double | dtmax, | ||
double | maxstep, | ||
size_t | Nmin = 5 , |
||
double | finc = 1.1 , |
||
double | fdec = 0.5 , |
||
double | fa = 0.99 , |
||
double | astart = 0.1 , |
||
double | tol = 1e-4 , |
||
bool | stepback = true |
||
) |
Constructor
An implementation of the *modified* FIRE optimization algorithm in c++.
The Fast Inertial Relaxation Engine is an optimization algorithm based on molecular dynamics with modifications to the velocity and adaptive time steps. The method is based on a blind skier searching for the bottom of a valley and is described and tested here:
Erik Bitzek, Pekka Koskinen, Franz Gaehler, Michael Moseler, and Peter Gumbsch. Phys. Rev. Lett. 97, 170201 (2006) http://link.aps.org/doi/10.1103/PhysRevLett.97.170201
This implementation of the algorithm differs significantly from the original algorithm in the order in which the steps are taken. Here we do the following:
-> initialise the velocities and gradients for some given coordinates -> set the velocity to the fire *inertial* velocity
Only then we use the MD integrator that here does things in this order:
-> compute the velocity difference and add it to the current velocity -> compute the new position given this velocity -> recompute gradient and energy
Once the integrator is done we continue following FIRE and compute
P = -g * f
here comes the other modification to the algorithm: if stepback is set to false then proceed just as the original FIRE algorithm prescribes, if stepback is set to true (default) then whenever P<=0 we undo the last step besides carrying out the operations defined by the original FIRE algorithm.
Definition at line 42 of file modified_fire.cpp.
virtual pele::MODIFIED_FIRE::~MODIFIED_FIRE | ( | ) | [inline, virtual] |
Destructorgit undo rebase
Definition at line 64 of file modified_fire.h.
void pele::MODIFIED_FIRE::initialize_func_gradient | ( | ) | [virtual] |
Overload initialize_func_gradient from parent class
Reimplemented from pele::GradientOptimizer.
Definition at line 61 of file modified_fire.cpp.
void pele::MODIFIED_FIRE::one_iteration | ( | ) | [inline, virtual] |
Do one iteration iteration of the optimization algorithm
Implements pele::GradientOptimizer.
Definition at line 153 of file modified_fire.h.
void pele::MODIFIED_FIRE::reset | ( | Array< double > & | x0 | ) | [inline, virtual] |
Reimplemented from pele::GradientOptimizer.
Definition at line 84 of file modified_fire.h.
void pele::MODIFIED_FIRE::set_func_gradient | ( | double | f, |
Array< double > | grad | ||
) | [virtual] |
Set the initial func and gradient. This can be used to avoid one potential call
Reimplemented from pele::GradientOptimizer.
Definition at line 75 of file modified_fire.cpp.