Loading...
Searching...
No Matches
SteepestDescent Class Referencefinal

#include <SteepestDescent.h>

Inheritance diagram for SteepestDescent:

Public Member Functions

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

Eigen::VectorXd getStep (const Eigen::VectorXd &a_f)

Private Attributes

eonc::log::FileScoped m_log {"sd", "_sd.log"}
size_t iteration {0}
Eigen::VectorXd m_rPrev
Eigen::VectorXd m_fPrev

Additional Inherited Members

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

Detailed Description

Definition at line 24 of file SteepestDescent.h.

Constructor & Destructor Documentation

◆ SteepestDescent()

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

Definition at line 26 of file SteepestDescent.h.

28 : Optimizer(a_objf, OptType::SD, a_params),
29 iteration{0} {}
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
Definition Optimizer.h:71

◆ ~SteepestDescent()

Member Function Documentation

◆ getStep()

Eigen::VectorXd eonc::SteepestDescent::getStep ( const Eigen::VectorXd & a_f)
private

◆ run()

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

Implements eonc::Optimizer.

Definition at line 47 of file SteepestDescent.cpp.

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

◆ step()

int SteepestDescent::step ( double a_maxMove)
overridevirtual

Implements eonc::Optimizer.

Definition at line 18 of file SteepestDescent.cpp.

18 {
19 Eigen::VectorXd r = m_objf->getPositions();
20 Eigen::VectorXd f = -m_objf->getGradient();
21
22 Eigen::VectorXd dr;
23 double alpha = m_optConfig.opts.sd.alpha;
24 if (m_optConfig.opts.sd.two_point && iteration > 0) {
25 Eigen::VectorXd dx = r - m_rPrev;
26 Eigen::VectorXd dg = -f + m_fPrev;
27 alpha = eonc::safemath::safe_div(dx.dot(dx), dx.dot(dg), 0.0);
28 if (alpha < 0) {
29 alpha = m_optConfig.opts.sd.alpha;
30 }
31 QUILL_LOG_DEBUG(m_log, "[SD] alpha: {:.4e}", alpha);
32 }
33
34 dr = alpha * f;
35 dr = eonc::helpers::maxAtomMotionAppliedV(dr, a_maxMove);
36
37 m_objf->setPositions(r + dr);
38
39 m_rPrev = r;
40 m_fPrev = f;
41
42 iteration++;
43
44 return m_objf->isConverged() ? 1 : 0;
45}
Eigen::VectorXd m_fPrev
eonc::log::FileScoped m_log
Eigen::VectorXd m_rPrev
const OptimizerConfig m_optConfig
Definition Optimizer.h:67
VectorXd maxAtomMotionAppliedV(const VectorXd v1, double maxMotion)
constexpr double safe_div(double num, double denom, double fallback=0.0)
Definition SafeMath.h:21

Member Data Documentation

◆ iteration

Definition at line 38 of file SteepestDescent.h.

38{0};

◆ m_fPrev

Eigen::VectorXd eonc::SteepestDescent::m_fPrev
private

Definition at line 40 of file SteepestDescent.h.

◆ m_log

Definition at line 36 of file SteepestDescent.h.

36{"sd", "_sd.log"};

◆ m_rPrev

Eigen::VectorXd eonc::SteepestDescent::m_rPrev
private

Definition at line 39 of file SteepestDescent.h.


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