Loading...
Searching...
No Matches
ConjugateGradients.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 "Eigen.h"
14#include "EonLogger.h"
15#include "HelperFunctions.h"
16#include "Matter.h"
17#include "Optimizer.h"
18#include "Parameters.h"
19
20namespace eonc {
21
33
37
39public:
41
46 ConjugateGradients(std::shared_ptr<ObjectiveFunction> a_objf,
47 const Parameters &a_params)
48 : Optimizer(a_objf, OptType::CG, a_params),
49 m_directionOld{(a_objf->getPositions()).setZero()},
50 m_forceOld{(a_objf->getPositions()).setZero()}, // use setZero instead
51 m_cg_i{0} {}
52
54
56
60 int step(double a_maxMove) override;
62
66 int run(size_t a_maxIterations, double a_maxMove) override;
68 Eigen::VectorXd getStep();
69
70private:
72 Eigen::VectorXd m_direction;
74 Eigen::VectorXd m_directionOld;
76 Eigen::VectorXd m_directionNorm;
78 Eigen::VectorXd m_force;
80 Eigen::VectorXd m_forceOld;
81 eonc::log::FileScoped m_log{"cg", "_cg.log"};
82
84 size_t m_cg_i;
85
87
90 int single_step(double a_maxMove);
92
96 int line_search(double a_maxMove);
97};
98
99} // namespace eonc
100
The optimizer class is used to serve as an abstract class for all optimizers, as well as to call an o...
ConjugateGradients(std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
Conjugate Gradients optimizer constructor.
Decleration of the Conjugate Gradients optimizer.
int line_search(double a_maxMove)
Steps the conjugate gradient.
Eigen::VectorXd m_force
Current force vector.
Eigen::VectorXd m_directionNorm
Normalised version of the current direction vector.
Eigen::VectorXd m_directionOld
Algorithms previous step direction.
~ConjugateGradients()=default
Conjugant Gradient deconstructor.
size_t m_cg_i
Counts the number of discrete steps until algorithm convergence.
ConjugateGradients(std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
Conjugate Gradients optimizer constructor.
int single_step(double a_maxMove)
Steps the conjugate gradient.
int run(size_t a_maxIterations, double a_maxMove) override
Runs the conjugate gradient.
Eigen::VectorXd getStep()
Gets the direction of the next step.
Eigen::VectorXd m_direction
Current step direction of the conjugate gradient.
int step(double a_maxMove) override
Calls the next step in the algorithm.
Eigen::VectorXd m_forceOld
Previous force vector.
eonc::log::FileScoped m_log
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