Trust Region solver for non-linear optimization problems. More...
#include <ikarus/solver/nonlinearsolver/trustregion.hh>
| Public Types | |
| using | Settings = TRSettings | 
| Type of the settings for the TrustRegion solver.  More... | |
| using | FTraits = typename F::Traits | 
| using | Domain = typename FTraits::Domain | 
| Type of the parameter vector of.  More... | |
| using | CorrectionType = typename FTraits::template Range< 1 > | 
| Type of the correction of x += deltaX.  More... | |
| using | UpdateFunction = UF | 
| Type of the update function.  More... | |
| using | DifferentiableFunction = F | 
| Type of function to minimize.  More... | |
| using | IDBCForceFunction = IDBCF | 
| Type representing the force function to handle inhomogeneous Dirichlet BCs.  More... | |
| using | EnergyType = typename FTraits::template Range< 0 > | 
| Type of the scalar cost.  More... | |
| using | GradientType = typename FTraits::template Range< 1 > | 
| Type of the gradient vector.  More... | |
| using | HessianType = typename FTraits::template Range< 2 > | 
| Type of the Hessian matrix.  More... | |
| using | JacobianType = HessianType | 
| using | State = NonlinearSolverStateType< F > | 
| using | MessageType = NonLinearSolverMessages | 
| using | Callback = std::function< void(NonLinearSolverMessages, const State &)> | 
| using | Token = std::shared_ptr< Callback > | 
| Public Member Functions | |
| template<typename UF2 = UF, typename IDBCF2 = IDBCF> | |
| TrustRegion (const F &f, UF2 &&updateFunction={}, IDBCF2 &&idbcForceFunction={}) | |
| Constructs a TrustRegion solver instance.  More... | |
| void | setup (const Settings &settings) | 
| Sets up the TrustRegion solver with the provided settings and checks feasibility.  More... | |
| NonLinearSolverInformation | solve (Domain &x, double stepSize=0.0) | 
| Solves the nonlinear optimization problem using the TrustRegion algorithm.  More... | |
| auto & | energy () | 
| Access the energy function.  More... | |
| const auto & | energy () const | 
| Access the energy function.  More... | |
| auto | residual () const | 
| Access the residual.  More... | |
| const UpdateFunction & | updateFunction () const | 
| Access the update function.  More... | |
| const IDBCForceFunction & | idbcForceFunction () const | 
| Access the force function calculating internal forces due to inhomogeneous Dirichlet BCs.  More... | |
| Token | registerListener (Callback callback) | 
| This method is used to register a Listener function.  More... | |
| void | unregisterListener (Token token) | 
| deregisters a specific function  More... | |
| void | notify (NonLinearSolverMessages message, const State &data) | 
| This calls all the registered functions.  More... | |
Refer to [5] for details of the algorithm.
This code is heavily inspired by the trust-region implementation of Manopt.
| F | Type of the differentiable function to solve. | 
| preConditioner | Type of preconditioner to use (default is IncompleteCholesky). | 
| UF | Type of the update function | 
| IDBCF | Type of the force function to handle inhomogeneous Dirichlet BCs (defaults to IDBCForceDefault). | 
| 
 | inherited | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::CorrectionType = typename FTraits::template Range<1> | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::DifferentiableFunction = F | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::Domain = typename FTraits::Domain | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::EnergyType = typename FTraits::template Range<0> | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::FTraits = typename F::Traits | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::GradientType = typename FTraits::template Range<1> | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::HessianType = typename FTraits::template Range<2> | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::IDBCForceFunction = IDBCF | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::JacobianType = HessianType | 
| 
 | inherited | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::Settings = TRSettings | 
| 
 | inherited | 
| 
 | inherited | 
| using Ikarus::TrustRegion< F, preConditioner, UF, IDBCF >::UpdateFunction = UF | 
| 
 | inlineexplicit | 
| f | Function to solve. | 
| updateFunction | Update function | 
| idbcForceFunction | Force function to handle inhomogeneous Dirichlet BCs (default is IDBCForceDefault). | 
| 
 | inline | 
| 
 | inline | 
| 
 | inline | 
| 
 | inlineinherited | 
| 
 | inlineinherited | 
The function that is passed in is first stored in a shared_ptr. After this, the shared_ptr is added to the vector of listener functions, which leads to a implicit conversion to a weak_ptr. The shared_ptr is then returned to the Listener that has called this function to be stored in a vector of shared_ptr<void> listener.hh.
| callback | the callback function | 
| 
 | inline | 
| 
 | inline | 
| p_settings | TrustRegionSettings containing the solver configuration. | 
| 
 | inline | 
| x | the solution. | 
| stepSize | the step size of the control routine (defaults to 0.0) | 
| 
 | inlineinherited | 
| 
 | inline |