Class MODIFIED_FIRE#

Inheritance Relationships#

Base Type#

Class Documentation#

class MODIFIED_FIRE : public pele::ODEBasedOptimizer#

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.

Public 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,
bool save_trajectory = false,
int iterations_before_save = 1,
StopCriterionType stop_criterion_type = StopCriterionType::GRADIENT
)#

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.

inline virtual ~MODIFIED_FIRE()#

Destructor.

inline virtual void one_iteration()#

Do one iteration iteration of the optimization algorithm.

virtual void initialize_func_gradient()#

Overload initialize_func_gradient from parent class.

virtual void set_func_gradient(double f, Array<double> grad)#

Set the initial func and gradient.

This can be used to avoid one potential call

inline virtual void reset(Array<double> &x0)#