Loading...
Searching...
No Matches
Optimizer.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
14#include "Eigen.h"
15#include "ObjectiveFunction.h"
16#include "Parameters.h"
17
18#include "EonLogger.h"
19
20namespace eonc {
21
30
45
49
63
64class Optimizer {
65private:
67
68protected:
70 std::shared_ptr<ObjectiveFunction> m_objf;
71
72public:
73 Optimizer(std::shared_ptr<ObjectiveFunction> a_objf,
74 const OptimizerConfig &a_config)
75 : m_otype{a_config.opts.method}, m_optConfig{a_config}, m_objf{a_objf} {
77 "You should explicitly set an optimizer while constructing the "
78 "optimizer!!\n Defaulting to opt_method from the parameters");
79 }
80 Optimizer(std::shared_ptr<ObjectiveFunction> a_objf, OptType a_optype,
81 const OptimizerConfig &a_config)
82 : m_otype{a_optype}, m_optConfig{a_config}, m_objf{a_objf} {}
83
84 // Backward-compat constructors
85 [[deprecated("Pass OptimizerConfig directly")]]
86 Optimizer(std::shared_ptr<ObjectiveFunction> a_objf,
87 const Parameters &a_params)
88 : Optimizer(a_objf, OptimizerConfig::fromParams(a_params)) {}
89 [[deprecated("Pass OptimizerConfig directly")]]
90 Optimizer(std::shared_ptr<ObjectiveFunction> a_objf, OptType a_optype,
91 const Parameters &a_params)
92 : Optimizer(a_objf, a_optype, OptimizerConfig::fromParams(a_params)) {}
93
94 virtual ~Optimizer() = default;
95 virtual int step(double a_maxMove) = 0;
96 virtual int run(size_t a_maxIterations, double a_maxMove) = 0;
97};
98
99namespace helpers::create {
100[[nodiscard]] std::unique_ptr<Optimizer>
101mkOptim(std::shared_ptr<ObjectiveFunction> a_objf, OptType a_otype,
102 const Parameters &a_params);
103}
104
105} // namespace eonc
#define EONC_LOG_WARNING(...)
Definition EonLogger.h:255
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, OptType a_optype, const Parameters &a_params)
Definition Optimizer.h:90
const OptType m_otype
Definition Optimizer.h:66
const OptimizerConfig m_optConfig
Definition Optimizer.h:69
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const OptimizerConfig &a_config)
Definition Optimizer.h:73
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, const Parameters &a_params)
Definition Optimizer.h:86
virtual int run(size_t a_maxIterations, double a_maxMove)=0
virtual ~Optimizer()=default
virtual int step(double a_maxMove)=0
std::shared_ptr< ObjectiveFunction > m_objf
Definition Optimizer.h:70
Optimizer(std::shared_ptr< ObjectiveFunction > a_objf, OptType a_optype, const OptimizerConfig &a_config)
Definition Optimizer.h:80
const potential_options_t & potential_options() const
const main_options_t & main_options() const
const saddle_search_options_t & saddle_search_options() const
eonc::optimizer_options_t optimizer_options_t
Definition Parameters.h:70
const optimizer_options_t & optimizer_options() const
std::unique_ptr< Optimizer > mkOptim(std::shared_ptr< ObjectiveFunction > a_objf, OptType a_otype, const Parameters &a_params)
Definition Optimizer.cpp:24
RAII resource manager for the ARTn C library with global synchronization.
Declaration of the optimizer class.
Definition Optimizer.h:51
Parameters::optimizer_options_t opts
Definition Optimizer.h:52
static OptimizerConfig fromParams(const Parameters &p)
Definition Optimizer.h:57
struct eonc::saddle_search_options_t::confine_positive_t confine_positive