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 |