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

#include <Quickmin.h>

Inheritance diagram for 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 ()

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< ObjectiveFunctionm_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.

27 : Optimizer(a_objf, OptType::QM, a_params),
31 m_vel{Eigen::VectorXd::Zero(a_objf->degreesOfFreedom())},
32 m_iteration{0},
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
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
Definition Optimizer.h:71
struct eonc::Parameters::optimizer_options_t optimizer_options

◆ ~Quickmin()

Member Function Documentation

◆ run()

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

Implements eonc::Optimizer.

Definition at line 38 of file Quickmin.cpp.

38 {
39 while (!m_objf->isConverged() && m_iteration < a_maxSteps) {
40 step(a_maxMove);
41 }
42 return m_objf->isConverged() ? 1 : 0;
43}
std::shared_ptr< ObjectiveFunction > m_objf
Definition Optimizer.h:68
int step(double a_maxMove) override
Definition Quickmin.cpp:15

◆ step()

int Quickmin::step ( double a_maxMove)
overridevirtual

Implements eonc::Optimizer.

Definition at line 15 of file Quickmin.cpp.

15 {
16 Eigen::VectorXd force = -m_objf->getGradient();
17 if (m_optConfig.opts.quickmin.steepest_descent) {
18 m_vel.setZero();
19 } else {
20 if (m_vel.dot(force) < 0) {
21 m_vel.setZero();
22 } else {
23 Eigen::VectorXd f_unit = force.normalized();
24 m_vel = m_vel.dot(f_unit) * f_unit;
25 }
26 }
27
28 m_vel += force * m_dt;
29 Eigen::VectorXd dr = eonc::helpers::maxAtomMotionAppliedV(
30 m_vel * m_dt,
31 a_maxMove); // used to be m_optConfig.opts.max_time_step
32 QUILL_LOG_INFO(m_log, "{} M_Vel.norm() is {}", m_iteration, m_vel.norm());
33 m_objf->setPositions(m_objf->getPositions() + dr);
35 return m_objf->isConverged() ? 1 : 0;
36}
eonc::log::FileScoped m_log
Definition Quickmin.h:43
const OptimizerConfig m_optConfig
Definition Optimizer.h:67
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

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

Definition at line 42 of file Quickmin.h.

◆ m_max_move

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: