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
23namespace eonc {
24
25#define LBFGS_EPS 1e-30
26
27class LBFGS final : public Optimizer {
28
29public:
30 LBFGS(std::shared_ptr<ObjectiveFunction> a_objf, const Parameters &a_params)
31 : Optimizer(a_objf, OptType::LBFGS, a_params),
32 m_iteration{0},
33 m_memory{std::min(
34 a_objf->degreesOfFreedom(),
35 static_cast<int>(a_params.optimizer_options.lbfgs.memory))} {}
36
37 ~LBFGS() = default;
38
39 int step(double a_maxMove) override;
40 int run(size_t a_maxIterations, double a_maxMove) override;
41 int update(const Eigen::VectorXd &a_r1, const Eigen::VectorXd &a_r0,
42 const Eigen::VectorXd &a_f1, const Eigen::VectorXd &a_f0);
43 void reset(void);
44
45private:
46 Eigen::VectorXd getStep(double a_maxMove, const Eigen::VectorXd &a_f);
47
50
51 std::deque<Eigen::VectorXd> m_s;
52 std::deque<Eigen::VectorXd> m_y;
53 std::deque<double> m_rho;
54
55 Eigen::VectorXd m_rPrev;
56 Eigen::VectorXd m_fPrev;
57 eonc::log::FileScoped m_log{"lbfgs", "_lbfgs.log"};
58};
59
60} // namespace eonc
61
62using eonc::LBFGS;
The optimizer class is used to serve as an abstract class for all optimizers, as well as to call an o...
std::deque< double > m_rho
Definition LBFGS.h:53
Eigen::VectorXd m_fPrev
Definition LBFGS.h:56
int m_iteration
Definition LBFGS.h:48
std::deque< Eigen::VectorXd > m_y
Definition LBFGS.h:52
Eigen::VectorXd getStep(double a_maxMove, const Eigen::VectorXd &a_f)
Definition LBFGS.cpp:19
std::deque< Eigen::VectorXd > m_s
Definition LBFGS.h:51
Eigen::VectorXd m_rPrev
Definition LBFGS.h:55
int run(size_t a_maxIterations, double a_maxMove) override
Definition LBFGS.cpp:167
int m_memory
Definition LBFGS.h:49
LBFGS(std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
Definition LBFGS.h:30
void reset(void)
Definition LBFGS.cpp:110
int step(double a_maxMove) override
Definition LBFGS.cpp:144
int update(const Eigen::VectorXd &a_r1, const Eigen::VectorXd &a_r0, const Eigen::VectorXd &a_f1, const Eigen::VectorXd &a_f0)
Definition LBFGS.cpp:116
eonc::log::FileScoped m_log
Definition LBFGS.h:57
~LBFGS()=default
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
Definition Optimizer.h:71
RAII resource manager for the ARTn C library with global synchronization.
RAII helper for file-based logging in a class.
Definition EonLogger.h:208