Loading...
Searching...
No Matches
eonc::Quickmin Class Referencefinal

#include <Quickmin.h>

Inheritance diagram for eonc::Quickmin:

Public Member Functions

 Quickmin (std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
 ~Quickmin ()=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 ()=default

Private Attributes

double m_dt
double m_dt_max
double m_max_move
Eigen::VectorXd m_vel
size_t m_iteration
size_t m_max_iter
eonc::log::FileScoped m_log {"quickmin", "_quickmin.log"}

Additional Inherited Members

Protected Attributes inherited from eonc::Optimizer
const OptimizerConfig m_optConfig
std::shared_ptr< ObjectiveFunction > m_objf

Detailed Description

Definition at line 22 of file Quickmin.h.

Constructor & Destructor Documentation

◆ Quickmin()

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

Definition at line 25 of file Quickmin.h.

28 m_dt{a_params.optimizer_options().time_step},
29 m_dt_max{a_params.optimizer_options().max_time_step},
30 m_max_move{a_params.optimizer_options().max_move},
31 m_vel{Eigen::VectorXd::Zero(a_objf->degreesOfFreedom())},
32 m_iteration{0},
33 m_max_iter{a_params.optimizer_options().max_iterations} {}
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
Definition Optimizer.h:73
double m_dt
Definition Quickmin.h:40
Eigen::VectorXd m_vel
Definition Quickmin.h:41
size_t m_max_iter
Definition Quickmin.h:42
size_t m_iteration
Definition Quickmin.h:42
double m_dt_max
Definition Quickmin.h:40
double m_max_move
Definition Quickmin.h:40
static OptimizerConfig fromParams(const Parameters &p)
Definition Optimizer.h:57

◆ ~Quickmin()

eonc::Quickmin::~Quickmin ( )
default

Member Function Documentation

◆ run()

int eonc::Quickmin::run ( size_t a_maxIterations,
double a_maxMove )
overridevirtual

Implements eonc::Optimizer.

Definition at line 47 of file Quickmin.cpp.

47 {
48 while (!m_objf->isConverged() && m_iteration < a_maxSteps) {
49 step(a_maxMove);
50 }
51 return m_objf->isConverged() ? 1 : 0;
52}
std::shared_ptr< ObjectiveFunction > m_objf
Definition Optimizer.h:70
int step(double a_maxMove) override
Definition Quickmin.cpp:19

◆ step()

int eonc::Quickmin::step ( double a_maxMove)
overridevirtual

Implements eonc::Optimizer.

Definition at line 19 of file Quickmin.cpp.

19 {
20 Eigen::VectorXd force = -m_objf->getGradient();
21 const double fn = force.norm();
22 if (!(fn > 0.0) || !std::isfinite(fn)) {
24 return 1;
25 }
26 if (m_optConfig.opts.quickmin.steepest_descent) {
27 m_vel.setZero();
28 } else {
29 if (m_vel.dot(force) < 0) {
30 m_vel.setZero();
31 } else {
32 const Eigen::VectorXd f_unit = force / fn;
33 m_vel = m_vel.dot(f_unit) * f_unit;
34 }
35 }
36
37 m_vel += force * m_dt;
38 Eigen::VectorXd dr = eonc::geometry::maxAtomMotionAppliedV(
39 m_vel * m_dt,
40 a_maxMove); // used to be m_optConfig.opts.max_time_step
41 QUILL_LOG_INFO(m_log, "{} M_Vel.norm() is {}", m_iteration, m_vel.norm());
42 m_objf->setPositions(m_objf->getPositions() + dr);
44 return m_objf->isConverged() ? 1 : 0;
45}
const OptimizerConfig m_optConfig
Definition Optimizer.h:69
eonc::log::FileScoped m_log
Definition Quickmin.h:43
VectorXd maxAtomMotionAppliedV(const VectorXd v1, double maxMotion)

Member Data Documentation

◆ m_dt

double eonc::Quickmin::m_dt
private

Definition at line 40 of file Quickmin.h.

◆ m_dt_max

double eonc::Quickmin::m_dt_max
private

Definition at line 40 of file Quickmin.h.

◆ m_iteration

size_t eonc::Quickmin::m_iteration
private

Definition at line 42 of file Quickmin.h.

◆ m_log

eonc::log::FileScoped eonc::Quickmin::m_log {"quickmin", "_quickmin.log"}
private

Definition at line 43 of file Quickmin.h.

43{"quickmin", "_quickmin.log"};

◆ m_max_iter

size_t eonc::Quickmin::m_max_iter
private

Definition at line 42 of file Quickmin.h.

◆ m_max_move

double eonc::Quickmin::m_max_move
private

Definition at line 40 of file Quickmin.h.

◆ m_vel

Eigen::VectorXd eonc::Quickmin::m_vel
private

Definition at line 41 of file Quickmin.h.


The documentation for this class was generated from the following files: