Optimist  0.0.0
A C++ library for optimization
Loading...
Searching...
No Matches
Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver > Class Template Reference

Class container for the QuasiNewton's method. More...

#include <QuasiNewton.hh>

Inherits Optimist::RootFinder::RootFinder< Vector, DerivedSolver >.

Public Types

using VectorTrait = TypeTrait<Vector>
using Scalar = typename TypeTrait<Vector>::Scalar
Public Types inherited from Optimist::RootFinder::RootFinder< Vector, DerivedSolver >
using Scalar
using Input
using Output
Public Types inherited from Optimist::SolverBase< Vector, Vector, DerivedSolver >
using InputTrait
using OutputTrait
using Scalar
using FirstDerivative
using SecondDerivative

Public Member Functions

 QuasiNewton ()
constexpr std::string name_impl () const
template<typename FunctionLambda, typename JacobianLambda>
bool solve_impl (FunctionLambda &&function, JacobianLambda &&jacobian, const Vector &x_ini, Vector &x_sol)
void update (const Vector &delta_x_old, const Vector &delta_function_old, const FirstDerivative &jacobian_old, const Vector &delta_x_new, const Vector &delta_function_new, const Vector &function_new, FirstDerivative &jacobian_new)
Public Member Functions inherited from Optimist::RootFinder::RootFinder< Vector, DerivedSolver >
 RootFinder ()
constexpr std::string name () const
Integer jacobian_evaluations () const
Integer max_jacobian_evaluations () const
Integer hessian_evaluations () const
Integer max_hessian_evaluations () const
bool solve (FunctionLambda &&function, const Input &x_ini, Output &x_sol)
Public Member Functions inherited from Optimist::SolverBase< Vector, Vector, DerivedSolver >
 SolverBase ()
void reset_bounds (const Integer n=InputTrait::IsDynamic ? 0 :InputTrait::Dimension)
const Vector & lower_bound () const
const Vector & upper_bound () const
void bounds (const Vector &t_lower_bound, const Vector &t_upper_bound)
constexpr Integer input_dimension () const
constexpr Integer output_dimension () const
Integer function_evaluations () const
void max_function_evaluations (const Integer t_max_function_evaluations)
Integer iterations () const
Integer max_iterations () const
Scalar alpha () const
Integer relaxations () const
Integer max_relaxations () const
Scalar tolerance () const
void verbose_mode (bool t_verbose)
void enable_verbose_mode ()
void disable_verbose_mode ()
void damped_mode (bool t_damped)
void enable_damped_mode ()
void disable_damped_mode ()
std::string task () const
bool converged () const
std::ostream & ostream () const
bool solve (FunctionLambda &&function, const Vector &x_ini, Vector &x_sol)
bool rootfind (const FunctionBase< FunctionInput, FunctionOutput, DerivedFunction > &function, const Vector &x_ini, Vector &x_sol)
bool optimize (const FunctionBase< FunctionInput, FunctionOutput, DerivedFunction > &function, const Vector &x_ini, Vector &x_sol)
constexpr std::string name () const

Additional Inherited Members

Static Public Attributes inherited from Optimist::RootFinder::RootFinder< Vector, DerivedSolver >
static constexpr bool IsRootFinder
static constexpr bool IsOptimizer
Protected Member Functions inherited from Optimist::RootFinder::RootFinder< Vector, DerivedSolver >
bool evaluate_jacobian (JacobianLambda &&jacobian, const Input &x, FirstDerivative &out)
bool evaluate_hessian (HessianLambda &&hessian, const Input &x, SecondDerivative &out)
Protected Member Functions inherited from Optimist::SolverBase< Vector, Vector, DerivedSolver >
Integer first_derivative_evaluations () const
Integer max_first_derivative_evaluations () const
Integer second_derivative_evaluations () const
Integer max_second_derivative_evaluations () const
void reset_counters ()
bool evaluate_function (FunctionLambda &&function, const Vector &x, Vector &out)
bool evaluate_first_derivative (FirstDerivativeLambda &&function, const Vector &x, FirstDerivative &out)
bool evaluate_second_derivative (SecondDerivativeLambda &&function, const Vector &x, SecondDerivative &out)
bool damp (FunctionLambda &&function, const Vector &x_old, const Vector &function_old, const Vector &step_old, Vector &x_new, Vector &function_new, Vector &step_new)
void header ()
void bottom ()
void info (Scalar residuals, const std::string &notes="-")
Protected Attributes inherited from Optimist::SolverBase< Vector, Vector, DerivedSolver >
Vector m_lower_bound
Vector m_upper_bound
Integer m_function_evaluations
Integer m_first_derivative_evaluations
Integer m_second_derivative_evaluations
Integer m_max_function_evaluations
Integer m_max_first_derivative_evaluations
Integer m_max_second_derivative_evaluations
Integer m_iterations
Integer m_max_iterations
Scalar m_alpha
Integer m_relaxations
Integer m_max_relaxations
Scalar m_tolerance
bool m_verbose
bool m_damped
std::ostream * m_ostream
std::string m_task
bool m_converged

Detailed Description

template<typename Vector, typename DerivedSolver>
requires TypeTrait<Vector>::IsEigen && (!TypeTrait<Vector>::IsFixed || TypeTrait<Vector>::Dimension > 0)
class Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver >

Quasi-Newton method

The quasi-Newton is a family of methods that approximate the Jacobian matrix or its inverse. Such methods are based on the linearization of the function \(\mathbf{f}(\mathbf{x})\) around the current iterate \(\mathbf{x}_k\), which leads to the linear system

\[ \mathbf{Jf}_{\mathbf{x}}(\mathbf{x}_k) \mathbf{h}_k = -\mathbf{f}(\mathbf{x}_k) \text{.} \]

Here, the Jacobian matrix \(\mathbf{Jf}_{\mathbf{x}}\) is supposed not to be explicitly available or computationally expensive to compute. For this reason, quasi-Newton methods approximate it iteratively.

Template Parameters
VectorEigen vector type.
DerivedSolverDerived solver type.

Member Typedef Documentation

◆ Scalar

template<typename Vector, typename DerivedSolver>
using Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver >::Scalar = typename TypeTrait<Vector>::Scalar

◆ VectorTrait

template<typename Vector, typename DerivedSolver>
using Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver >::VectorTrait = TypeTrait<Vector>

Constructor & Destructor Documentation

◆ QuasiNewton()

template<typename Vector, typename DerivedSolver>
Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver >::QuasiNewton ( )
inline

Class constructor for the QuasiNewton solver.

Member Function Documentation

◆ name_impl()

template<typename Vector, typename DerivedSolver>
std::string Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver >::name_impl ( ) const
inlineconstexpr

Get the QuasiNewton solver name.

Returns
The QuasiNewton solver name.

◆ solve_impl()

template<typename Vector, typename DerivedSolver>
template<typename FunctionLambda, typename JacobianLambda>
bool Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver >::solve_impl ( FunctionLambda && function,
JacobianLambda && jacobian,
const Vector & x_ini,
Vector & x_sol )
inline

Solve the nonlinear system of equations \( \mathbf{f}(\mathbf{x}) = 0 \), with \(\mathbf{f}: \mathbb{R}^n \rightarrow \mathbb{R}^n \).

Template Parameters
FunctionLambdaFunction lambda type.
JacobianLambdaJacobian lambda type.
Parameters
[in]functionFunction lambda.
[in]jacobianJacobian lambda.
[in]x_iniInitialization point.
[out]x_solSolution point.
Returns
The convergence boolean flag.

◆ update()

template<typename Vector, typename DerivedSolver>
void Optimist::RootFinder::QuasiNewton< Vector, DerivedSolver >::update ( const Vector & delta_x_old,
const Vector & delta_function_old,
const FirstDerivative & jacobian_old,
const Vector & delta_x_new,
const Vector & delta_function_new,
const Vector & function_new,
FirstDerivative & jacobian_new )
inline

Jacobian approximation update rule for the QuasiNewton's method.

Parameters
[in]delta_x_oldOld difference between points.
[in]delta_function_oldOld difference between function values.
[in]jacobian_oldOld jacobian approximation.
[in]delta_x_newNew difference between points.
[in]delta_function_newNew difference between function values.
[in]function_newNew function value.
[out]jacobian_newNew jacobian approximation.

The documentation for this class was generated from the following file: