Loading...
Searching...
No Matches
FIRE Class Reference

#include <FIRE.h>

Inheritance diagram for FIRE:

Public Member Functions

 FIRE (std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
virtual ~FIRE ()=default
int step (double a_maxMove) override
int run (size_t a_maxIterations, double a_maxMove) override
Public Member Functions inherited from eonc::Optimizer
 Optimizer (std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
 Optimizer (std::shared_ptr< ObjectiveFunction > a_objf, OptType a_optype, const OptimizerConfig &a_config)
 Optimizer (std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
 Optimizer (std::shared_ptr< ObjectiveFunction > a_objf, OptType a_optype, const Parameters &a_params)
virtual ~Optimizer ()

Private Attributes

double m_dt
double m_dt_max
double m_max_move
size_t m_N_min
size_t m_N
Eigen::VectorXd m_vel
double m_alpha_start
double m_alpha
double m_f_inc
double m_f_dec
double m_f_a
size_t m_iteration
eonc::log::FileScoped m_log {"fire", "_fire.log"}

Additional Inherited Members

Protected Attributes inherited from eonc::Optimizer
const OptimizerConfig m_optConfig
std::shared_ptr< ObjectiveFunctionm_objf

Detailed Description

Definition at line 19 of file FIRE.h.

Constructor & Destructor Documentation

◆ FIRE()

eonc::FIRE::FIRE ( std::shared_ptr< ObjectiveFunction > a_objf,
const Parameters & a_params )
inline

Definition at line 22 of file FIRE.h.

27 m_N_min{5},
28 m_N{0},
29 m_vel{Eigen::VectorXd::Zero(a_objf->degreesOfFreedom())},
30 m_alpha_start{0.1},
32 m_f_inc{1.1},
33 m_f_dec{0.5},
34 m_f_a{0.99},
35 m_iteration{0} {}
Eigen::VectorXd m_vel
Definition FIRE.h:44
double m_dt_max
Definition FIRE.h:42
double m_f_inc
Definition FIRE.h:47
size_t m_N_min
Definition FIRE.h:43
double m_alpha_start
Definition FIRE.h:45
double m_f_a
Definition FIRE.h:49
double m_max_move
Definition FIRE.h:42
size_t m_iteration
Definition FIRE.h:50
size_t m_N
Definition FIRE.h:43
double m_alpha
Definition FIRE.h:46
double m_f_dec
Definition FIRE.h:48
double m_dt
Definition FIRE.h:42
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
Definition Optimizer.h:71
struct eonc::Parameters::optimizer_options_t optimizer_options
static OptimizerConfig fromParams(const Parameters &p)
Definition Optimizer.h:56

◆ ~FIRE()

virtual eonc::FIRE::~FIRE ( )
virtualdefault

Member Function Documentation

◆ run()

int FIRE::run ( size_t a_maxIterations,
double a_maxMove )
overridevirtual

Implements eonc::Optimizer.

Definition at line 70 of file FIRE.cpp.

70 {
71 while (!m_objf->isConverged() && m_iteration < a_maxIterations) {
72 step(a_maxMove);
73 }
74 return m_objf->isConverged() ? 1 : 0;
75}
int step(double a_maxMove) override
Definition FIRE.cpp:19
std::shared_ptr< ObjectiveFunction > m_objf
Definition Optimizer.h:68

◆ step()

int FIRE::step ( double a_maxMove)
overridevirtual

Implements eonc::Optimizer.

Definition at line 19 of file FIRE.cpp.

19 {
20 double P = 0;
21 // Check convergence.
22 if (m_objf->isConverged()) {
23 return 1;
24 }
25
26 // Velocity Verlet
27 Eigen::VectorXd f = -m_objf->getGradient();
28 Eigen::VectorXd x = m_objf->getPositions();
29
30 m_vel += f * m_dt;
31 Eigen::VectorXd dx = m_vel * m_dt;
32
34 m_objf->setPositions(x + dx);
35
36 f = -m_objf->getGradient();
37 Eigen::VectorXd f_unit = f / f.norm();
38
39 // FIRE
40 P = f.dot(m_vel);
41 m_vel = (1 - m_alpha) * m_vel + m_alpha * f_unit * m_vel.norm();
42 QUILL_LOG_DEBUG(m_log,
43 "P: {:.4f}, v: {:.4f}, m_dt: {:.4f}, m_alpha: {:.4f}, N: {}",
44 P, m_vel.norm(), m_dt, m_alpha, m_N);
45 if (P >= 0) {
46 m_N++;
47 if (m_N > m_N_min) {
48 m_dt = std::min(m_dt * m_f_inc, m_dt_max);
50 }
51 } else {
52 m_dt = m_dt * m_f_dec;
53 m_vel.setZero();
55 m_N = 0;
56 }
57
58 // add a sanity check on m_dt
59 if (m_dt < 1e-6) {
60 QUILL_LOG_CRITICAL(m_log, "[FIRE] [critical] m_dt is too small: {:.4f}",
61 m_dt);
62 throw std::runtime_error(
63 std::format("[FIRE] m_dt is too small: {:.4f}", m_dt));
64 }
65
67 return m_objf->isConverged() ? 1 : 0;
68}
eonc::log::FileScoped m_log
Definition FIRE.h:51
VectorXd maxAtomMotionAppliedV(const VectorXd v1, double maxMotion)

Member Data Documentation

◆ m_alpha

double eonc::FIRE::m_alpha
private

Definition at line 46 of file FIRE.h.

◆ m_alpha_start

double eonc::FIRE::m_alpha_start
private

Definition at line 45 of file FIRE.h.

◆ m_dt

double eonc::FIRE::m_dt
private

Definition at line 42 of file FIRE.h.

◆ m_dt_max

double eonc::FIRE::m_dt_max
private

Definition at line 42 of file FIRE.h.

◆ m_f_a

double eonc::FIRE::m_f_a
private

Definition at line 49 of file FIRE.h.

◆ m_f_dec

double eonc::FIRE::m_f_dec
private

Definition at line 48 of file FIRE.h.

◆ m_f_inc

double eonc::FIRE::m_f_inc
private

Definition at line 47 of file FIRE.h.

◆ m_iteration

size_t eonc::FIRE::m_iteration
private

Definition at line 50 of file FIRE.h.

◆ m_log

eonc::log::FileScoped eonc::FIRE::m_log {"fire", "_fire.log"}
private

Definition at line 51 of file FIRE.h.

51{"fire", "_fire.log"};

◆ m_max_move

double eonc::FIRE::m_max_move
private

Definition at line 42 of file FIRE.h.

◆ m_N

size_t eonc::FIRE::m_N
private

Definition at line 43 of file FIRE.h.

◆ m_N_min

size_t eonc::FIRE::m_N_min
private

Definition at line 43 of file FIRE.h.

◆ m_vel

Eigen::VectorXd eonc::FIRE::m_vel
private

Definition at line 44 of file FIRE.h.


The documentation for this class was generated from the following files:
  • /home/runner/work/eOn/eOn/include/eon/FIRE.h
  • /home/runner/work/eOn/eOn/client/FIRE.cpp