1#ifndef LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_OPTIMIZESD_H
2#define LINEARALGEBRA_SRC_MOLPRO_LINALG_ITSOLV_OPTIMIZESD_H
3#include <molpro/linalg/itsolv/CastOptions.h>
4#include <molpro/linalg/itsolv/DSpaceResetter.h>
5#include <molpro/linalg/itsolv/IterativeSolverTemplate.h>
6#include <molpro/linalg/itsolv/propose_rspace.h>
7#include <molpro/linalg/itsolv/subspace/SubspaceSolverOptSD.h>
8#include <molpro/linalg/itsolv/subspace/XSpace.h>
19template <
class R,
class Q = R,
class P = std::map<
size_t,
typename R::value_type>>
24 using typename SolverTemplate::scalar_type;
25 using typename SolverTemplate::value_type;
26 using typename SolverTemplate::value_type_abs;
30 const std::shared_ptr<Logger>& logger_ = std::make_shared<Logger>())
31 :
SolverTemplate(std::make_shared<subspace::XSpace<R, Q, P>>(handlers, logger_),
32 std::static_pointer_cast<subspace::ISubspaceSolver<R, Q, P>>(
33 std::make_shared<subspace::SubspaceSolverOptSD<R, Q, P>>(logger_)),
34 handlers, std::make_shared<
Statistics>(), logger_),
41 if (this->
m_errors.front() < this->m_convergence_threshold) {
46 this->
m_handlers->rr().axpy(-1, action.front(), parameters.front());
51 size_t end_iteration(std::vector<R>& parameters, std::vector<R>& action)
override {
58 this->
m_value_errors.assign(1, std::numeric_limits<double>::max());
59 if (this->
m_xspace->size() > 1 and Value(0, 0) < Value(1, 0))
71 auto opt = std::make_shared<OptimizeSDOptions>();
76 void report(std::ostream& cout,
bool endl =
true)
const override {
78 cout <<
", value " << this->
value();
85 using namespace subspace;
87 auto& xdata = xspace->data;
88 const auto n = this->
m_xspace->dimensions().nX;
89 xdata[EqnData::value].resize({n + 1, 1});
90 xdata[EqnData::value](0, 0) =
value;
96 auto wparams = std::vector<std::reference_wrapper<R>>{std::ref(parameters)};
97 auto wactions = std::vector<std::reference_wrapper<R>>{std::ref(actions)};
Class, containing a collection of array handlers used in IterativeSolver Provides a Builder sub-class...
Definition: ArrayHandlers.h:25
Implements IterativeSolver interface that is common to all solvers.
Definition: IterativeSolverTemplate.h:127
void solution_params(const std::vector< int > &roots, std::vector< R > ¶meters) override
Definition: IterativeSolverTemplate.h:224
std::vector< int > m_working_set
indices of roots in the working set
Definition: IterativeSolverTemplate.h:583
scalar_type value() const override
Report the function value for the current optimum solution.
Definition: IterativeSolverTemplate.h:312
std::shared_ptr< subspace::IXSpace< R, R, std::map< size_t, typename R::value_type > > > m_xspace
manages the subspace and associated data
Definition: IterativeSolverTemplate.h:579
std::shared_ptr< ArrayHandlers< R, R, std::map< size_t, typename R::value_type > > > m_handlers
Array handlers.
Definition: IterativeSolverTemplate.h:578
std::shared_ptr< Options > get_options() const override
Definition: IterativeSolverTemplate.h:262
int add_vector(const VecRef< R > ¶meters, const VecRef< R > &actions) override
Definition: IterativeSolverTemplate.h:140
void report() const override
Definition: IterativeSolverTemplate.h:287
void set_options(const Options &options) override
Definition: IterativeSolverTemplate.h:253
std::vector< double > m_errors
errors from the most recent solution
Definition: IterativeSolverTemplate.h:581
std::shared_ptr< Statistics > m_stats
accumulates statistics of operations performed by the solver
Definition: IterativeSolverTemplate.h:588
std::vector< double > m_value_errors
value errors from the most recent solution
Definition: IterativeSolverTemplate.h:582
typename R::value_type value_type
The underlying type of elements of vectors.
Definition: IterativeSolver.h:202
A class that optimises a function using a simple steepest-descent method.
Definition: OptimizeSD.h:20
size_t end_iteration(R ¶meters, R &actions) override
Definition: OptimizeSD.h:95
void construct_residual(const std::vector< int > &roots, const CVecRef< R > ¶ms, const VecRef< R > &actions) override
Constructs residual for given roots provided their parameters and actions.
Definition: OptimizeSD.h:103
void report(std::ostream &cout, bool endl=true) const override
Writes a report to cout output stream.
Definition: OptimizeSD.h:76
bool nonlinear() const override
Report whether the class is a non-linear solver.
Definition: OptimizeSD.h:37
size_t end_iteration(const VecRef< R > ¶meters, const VecRef< R > &action) override
Behaviour depends on the solver.
Definition: OptimizeSD.h:39
void set_value_errors() override
Implementation class should overload this to set errors in the current values (e.g....
Definition: OptimizeSD.h:56
std::shared_ptr< Logger > logger
Definition: OptimizeSD.h:82
size_t end_iteration(std::vector< R > ¶meters, std::vector< R > &action) override
Definition: OptimizeSD.h:51
int add_vector(R ¶meters, R &residual, value_type value) override
Definition: OptimizeSD.h:84
std::shared_ptr< Options > get_options() const override
Definition: OptimizeSD.h:70
OptimizeSD(const std::shared_ptr< ArrayHandlers< R, Q, P > > &handlers, const std::shared_ptr< Logger > &logger_=std::make_shared< Logger >())
Definition: OptimizeSD.h:29
void report() const override
Writes a report to std::cout.
Definition: IterativeSolverTemplate.h:287
void set_options(const Options &options) override
Definition: OptimizeSD.h:63
Solves subspace problem for minimisation using the Steepest Descent algorithm.
Definition: SubspaceSolverOptSD.h:13
4-parameter interpolation of a 1-dimensional function given two points for which function values and ...
Definition: helper.h:10
auto wrap(ForwardIt begin, ForwardIt end)
Takes a begin and end iterators and returns a vector of references to each element.
Definition: wrap.h:32
std::vector< std::reference_wrapper< const A > > CVecRef
Definition: wrap.h:14
std::vector< std::reference_wrapper< A > > VecRef
Definition: wrap.h:11
const std::shared_ptr< const molpro::Options > options()
Get the Options object associated with iterative-solver.
Definition: options.cpp:4
static std::shared_ptr< OptimizeSDOptions > OptimizeSD(const std::shared_ptr< Options > &options)
Definition: CastOptions.h:90
Allows setting and getting of options for OptimizeBFGS instance via IterativeSolver base class.
Definition: OptimizeSDOptions.h:9
Access point for different options in iterative solvers.
Definition: Options.h:20
Information about performance of IterativeSolver instance.
Definition: Statistics.h:10