eOn 3.2.0
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
LBFGS.h
Go to the documentation of this file.
1
/*
2
** This file is part of eOn.
3
**
4
** SPDX-License-Identifier: BSD-3-Clause
5
**
6
** Copyright (c) 2010--present, eOn Development Team
7
** All rights reserved.
8
**
9
** Repo:
10
** https://github.com/TheochemUI/eOn
11
*/
12
#pragma once
13
#include "
EonLogger.h
"
14
15
#include "
HelperFunctions.h
"
16
#include "
Matter.h
"
17
#include "
ObjectiveFunction.h
"
18
#include "
Optimizer.h
"
19
#include "
Parameters.h
"
20
21
#include <deque>
22
23
namespace
eonc
{
24
25
class
LBFGS
final :
public
Optimizer
{
26
27
public
:
28
LBFGS
(std::shared_ptr<ObjectiveFunction> a_objf,
const
Parameters
&a_params)
29
:
Optimizer
(a_objf,
OptType
::
LBFGS
,
30
OptimizerConfig
::fromParams(a_params)),
31
m_memory
{std::min(
32
a_objf->degreesOfFreedom(),
33
static_cast<int>(a_params.optimizer_options().lbfgs.memory))},
34
m_rPrev
{Eigen::VectorXd::Zero(a_objf->degreesOfFreedom())},
35
m_fPrev
{Eigen::VectorXd::Zero(a_objf->degreesOfFreedom())} {}
36
37
~LBFGS
() =
default
;
38
39
[[nodiscard]]
int
step
(
double
a_maxMove)
override
;
40
[[nodiscard]]
int
run
(
size_t
a_maxIterations,
double
a_maxMove)
override
;
41
[[nodiscard]]
int
update
(
const
Eigen::VectorXd &a_r1,
42
const
Eigen::VectorXd &a_r0,
43
const
Eigen::VectorXd &a_f1,
44
const
Eigen::VectorXd &a_f0,
double
a_e1,
45
double
a_e0);
46
void
reset
();
47
48
private
:
49
[[nodiscard]] Eigen::VectorXd
getStep
(
double
a_maxMove,
50
const
Eigen::VectorXd &a_f);
51
[[nodiscard]] Eigen::Vector3d
micRij
(
const
Eigen::VectorXd &pos,
int
i,
52
int
j)
const
;
53
[[nodiscard]]
bool
usesPrecon
()
const
;
54
[[nodiscard]] Eigen::MatrixXd
buildPrecon
(
const
Eigen::VectorXd &pos)
const
;
55
[[nodiscard]] Eigen::VectorXd
applyH0
(
const
Eigen::VectorXd &q,
double
H0,
56
const
Eigen::VectorXd &pos)
const
;
57
[[nodiscard]] Eigen::VectorXd
hessianStep
(
double
a_maxMove,
58
const
Eigen::VectorXd &a_f);
59
60
int
m_iteration
{0};
61
int
m_memory
{0};
62
63
std::deque<Eigen::VectorXd>
m_s
;
64
std::deque<Eigen::VectorXd>
m_y
;
65
std::deque<double>
m_rho
;
66
std::deque<double>
m_eHist
;
67
68
Eigen::VectorXd
m_rPrev
;
69
Eigen::VectorXd
m_fPrev
;
70
double
m_ePrev
{0.0};
71
eonc::log::FileScoped
m_log
{
"lbfgs"
,
"_lbfgs.log"
};
72
};
73
74
}
// namespace eonc
EonLogger.h
HelperFunctions.h
Matter.h
ObjectiveFunction.h
Optimizer.h
The optimizer class is used to serve as an abstract class for all optimizers, as well as to call an o...
Parameters.h
eonc::LBFGS::m_rho
std::deque< double > m_rho
Definition
LBFGS.h:65
eonc::LBFGS::update
int update(const Eigen::VectorXd &a_r1, const Eigen::VectorXd &a_r0, const Eigen::VectorXd &a_f1, const Eigen::VectorXd &a_f0, double a_e1, double a_e0)
Definition
LBFGS.cpp:275
eonc::LBFGS::m_fPrev
Eigen::VectorXd m_fPrev
Definition
LBFGS.h:69
eonc::LBFGS::m_iteration
int m_iteration
Definition
LBFGS.h:60
eonc::LBFGS::m_y
std::deque< Eigen::VectorXd > m_y
Definition
LBFGS.h:64
eonc::LBFGS::m_eHist
std::deque< double > m_eHist
Definition
LBFGS.h:66
eonc::LBFGS::m_s
std::deque< Eigen::VectorXd > m_s
Definition
LBFGS.h:63
eonc::LBFGS::step
int step(double a_maxMove) override
Definition
LBFGS.cpp:367
eonc::LBFGS::m_rPrev
Eigen::VectorXd m_rPrev
Definition
LBFGS.h:68
eonc::LBFGS::usesPrecon
bool usesPrecon() const
Definition
LBFGS.cpp:61
eonc::LBFGS::run
int run(size_t a_maxIterations, double a_maxMove) override
Definition
LBFGS.cpp:425
eonc::LBFGS::m_memory
int m_memory
Definition
LBFGS.h:61
eonc::LBFGS::m_ePrev
double m_ePrev
Definition
LBFGS.h:70
eonc::LBFGS::LBFGS
LBFGS(std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
Definition
LBFGS.h:28
eonc::LBFGS::hessianStep
Eigen::VectorXd hessianStep(double a_maxMove, const Eigen::VectorXd &a_f)
Definition
LBFGS.cpp:91
eonc::LBFGS::reset
void reset()
Definition
LBFGS.cpp:268
eonc::LBFGS::m_log
eonc::log::FileScoped m_log
Definition
LBFGS.h:71
eonc::LBFGS::buildPrecon
Eigen::MatrixXd buildPrecon(const Eigen::VectorXd &pos) const
Definition
LBFGS.cpp:68
eonc::LBFGS::applyH0
Eigen::VectorXd applyH0(const Eigen::VectorXd &q, double H0, const Eigen::VectorXd &pos) const
Definition
LBFGS.cpp:74
eonc::LBFGS::getStep
Eigen::VectorXd getStep(double a_maxMove, const Eigen::VectorXd &a_f)
Definition
LBFGS.cpp:137
eonc::LBFGS::~LBFGS
~LBFGS()=default
eonc::LBFGS::micRij
Eigen::Vector3d micRij(const Eigen::VectorXd &pos, int i, int j) const
Definition
LBFGS.cpp:55
eonc::Optimizer::Optimizer
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
Definition
Optimizer.h:73
eonc::Parameters
Definition
Parameters.h:35
eonc
RAII resource manager for the ARTn C library with global synchronization.
Definition
ARTnSaddleSearch.cpp:23
eonc::OptType
OptType
Definition
BaseStructures.h:103
eonc::OptimizerConfig
Declaration of the optimizer class.
Definition
Optimizer.h:51
eonc::log::FileScoped
RAII helper for file-based logging in a class.
Definition
EonLogger.h:207
include
eon
LBFGS.h
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf