|
ROL
|
Implements the computation of optimization steps with composite-step trust-region methods. More...
#include <ROL_CompositeStep.hpp>
Public Member Functions | |
| virtual | ~CompositeStep () |
| CompositeStep (ROL::ParameterList &parlist) | |
| void | initialize (Vector< Real > &x, const Vector< Real > &g, Vector< Real > &l, const Vector< Real > &c, Objective< Real > &obj, Constraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Initialize step. | |
| void | compute (Vector< Real > &s, const Vector< Real > &x, const Vector< Real > &l, Objective< Real > &obj, Constraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Compute step. | |
| void | update (Vector< Real > &x, Vector< Real > &l, const Vector< Real > &s, Objective< Real > &obj, Constraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Update step, if successful. | |
| void | compute (Vector< Real > &s, const Vector< Real > &x, Objective< Real > &obj, BoundConstraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Compute step for bound constraints; here only to satisfy the interface requirements, does nothing, needs refactoring. | |
| void | update (Vector< Real > &x, const Vector< Real > &s, Objective< Real > &obj, BoundConstraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Update step, for bound constraints; here only to satisfy the interface requirements, does nothing, needs refactoring. | |
| std::string | printHeader (void) const |
| Print iterate header. | |
| std::string | printName (void) const |
| Print step name. | |
| std::string | print (AlgorithmState< Real > &algo_state, bool pHeader=false) const |
| Print iterate status. | |
| void | computeLagrangeMultiplier (Vector< Real > &l, const Vector< Real > &x, const Vector< Real > &gf, Constraint< Real > &con) |
| Compute Lagrange multipliers by solving the least-squares problem minimizing the gradient of the Lagrangian, via the augmented system formulation. | |
| void | computeQuasinormalStep (Vector< Real > &n, const Vector< Real > &c, const Vector< Real > &x, Real delta, Constraint< Real > &con) |
| Compute quasi-normal step by minimizing the norm of the linearized constraint. | |
| void | solveTangentialSubproblem (Vector< Real > &t, Vector< Real > &tCP, Vector< Real > &Wg, const Vector< Real > &x, const Vector< Real > &g, const Vector< Real > &n, const Vector< Real > &l, Real delta, Objective< Real > &obj, Constraint< Real > &con) |
| Solve tangential subproblem. | |
| void | accept (Vector< Real > &s, Vector< Real > &n, Vector< Real > &t, Real f_new, Vector< Real > &c_new, Vector< Real > &gf_new, Vector< Real > &l_new, Vector< Real > &g_new, const Vector< Real > &x, const Vector< Real > &l, Real f, const Vector< Real > &gf, const Vector< Real > &c, const Vector< Real > &g, Vector< Real > &tCP, Vector< Real > &Wg, Objective< Real > &obj, Constraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Check acceptance of subproblem solutions, adjust merit function penalty parameter, ensure global convergence. | |
| Public Member Functions inherited from ROL::Step< Real > | |
| virtual | ~Step () |
| Step (void) | |
| virtual void | initialize (Vector< Real > &x, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Initialize step with bound constraint. | |
| virtual void | initialize (Vector< Real > &x, const Vector< Real > &s, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &con, AlgorithmState< Real > &algo_state) |
| Initialize step with bound constraint. | |
| virtual void | initialize (Vector< Real > &x, const Vector< Real > &g, Vector< Real > &l, const Vector< Real > &c, Objective< Real > &obj, Constraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Initialize step with equality constraint. | |
| virtual void | compute (Vector< Real > &s, const Vector< Real > &x, const Vector< Real > &l, Objective< Real > &obj, Constraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Compute step (equality constraints). | |
| virtual void | update (Vector< Real > &x, Vector< Real > &l, const Vector< Real > &s, Objective< Real > &obj, Constraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Update step, if successful (equality constraints). | |
| const ROL::Ptr< const StepState< Real > > | getStepState (void) const |
| Get state for step object. | |
| void | reset (const Real searchSize=1.0) |
| Get state for step object. | |
Private Member Functions | |
| template<typename T> | |
| int | sgn (T val) |
| void | printInfoLS (const std::vector< Real > &res) const |
| Real | setTolOSS (const Real intol) const |
Private Attributes | |
| ROL::Ptr< Vector< Real > > | xvec_ |
| ROL::Ptr< Vector< Real > > | gvec_ |
| ROL::Ptr< Vector< Real > > | cvec_ |
| ROL::Ptr< Vector< Real > > | lvec_ |
| int | flagCG_ |
| int | flagAC_ |
| int | iterCG_ |
| int | maxiterCG_ |
| int | maxiterOSS_ |
| Real | tolCG_ |
| Real | tolOSS_ |
| bool | tolOSSfixed_ |
| Real | lmhtol_ |
| Real | qntol_ |
| Real | pgtol_ |
| Real | projtol_ |
| Real | tangtol_ |
| Real | tntmax_ |
| Real | zeta_ |
| Real | Delta_ |
| Real | penalty_ |
| Real | eta_ |
| bool | useConHess_ |
| Real | ared_ |
| Real | pred_ |
| Real | snorm_ |
| Real | nnorm_ |
| Real | tnorm_ |
| bool | infoQN_ |
| bool | infoLM_ |
| bool | infoTS_ |
| bool | infoAC_ |
| bool | infoLS_ |
| bool | infoALL_ |
| int | totalIterCG_ |
| int | totalProj_ |
| int | totalNegCurv_ |
| int | totalRef_ |
| int | totalCallLS_ |
| int | totalIterLS_ |
Additional Inherited Members | |
| Protected Member Functions inherited from ROL::Step< Real > | |
| ROL::Ptr< StepState< Real > > | getState (void) |
Implements the computation of optimization steps with composite-step trust-region methods.
Definition at line 29 of file ROL_CompositeStep.hpp.
|
inlinevirtual |
Definition at line 114 of file ROL_CompositeStep.hpp.
|
inline |
Definition at line 116 of file ROL_CompositeStep.hpp.
References Delta_, eta_, flagAC_, flagCG_, infoAC_, infoALL_, infoLM_, infoLS_, infoQN_, infoTS_, iterCG_, lmhtol_, maxiterCG_, nnorm_, penalty_, pgtol_, projtol_, qntol_, snorm_, ROL::Step< Real >::Step(), tangtol_, tnorm_, tntmax_, tolCG_, tolOSS_, tolOSSfixed_, totalCallLS_, totalIterCG_, totalIterLS_, totalNegCurv_, totalProj_, totalRef_, useConHess_, and zeta_.
|
inlineprivate |
Definition at line 87 of file ROL_CompositeStep.hpp.
Referenced by solveTangentialSubproblem().
|
inlineprivate |
Definition at line 91 of file ROL_CompositeStep.hpp.
References infoLS_.
Referenced by accept(), computeLagrangeMultiplier(), computeQuasinormalStep(), and solveTangentialSubproblem().
|
inlineprivate |
Definition at line 105 of file ROL_CompositeStep.hpp.
References tolOSS_, and tolOSSfixed_.
Referenced by accept(), computeLagrangeMultiplier(), computeQuasinormalStep(), and solveTangentialSubproblem().
|
inlinevirtual |
Initialize step.
Reimplemented from ROL::Step< Real >.
Definition at line 175 of file ROL_CompositeStep.hpp.
References ROL::Constraint< Real >::applyAdjointJacobian(), ROL::Vector< Real >::clone(), ROL::AlgorithmState< Real >::cnorm, computeLagrangeMultiplier(), cvec_, ROL::Step< Real >::getState(), ROL::AlgorithmState< Real >::gnorm, ROL::Objective< Real >::gradient(), gvec_, ROL::AlgorithmState< Real >::iter, lvec_, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::ROL_EPSILON(), ROL::Constraint< Real >::update(), ROL::Objective< Real >::update(), ROL::AlgorithmState< Real >::value, ROL::Constraint< Real >::value(), ROL::Objective< Real >::value(), and xvec_.
|
inlinevirtual |
Compute step.
Reimplemented from ROL::Step< Real >.
Definition at line 218 of file ROL_CompositeStep.hpp.
References accept(), ROL::Constraint< Real >::applyAdjointJacobian(), computeQuasinormalStep(), cvec_, Delta_, ROL::Objective< Real >::gradient(), gvec_, iterCG_, lvec_, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::ROL_EPSILON(), solveTangentialSubproblem(), totalIterCG_, ROL::Constraint< Real >::value(), ROL::Objective< Real >::value(), xvec_, and zeta_.
|
inlinevirtual |
Update step, if successful.
Reimplemented from ROL::Step< Real >.
Definition at line 266 of file ROL_CompositeStep.hpp.
References ROL::Constraint< Real >::applyAdjointJacobian(), ared_, ROL::AlgorithmState< Real >::cnorm, computeLagrangeMultiplier(), cvec_, Delta_, eta_, flagAC_, ROL::Step< Real >::getState(), ROL::AlgorithmState< Real >::gnorm, ROL::Objective< Real >::gradient(), gvec_, ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, nnorm_, ROL::Vector< Real >::plus(), pred_, ROL::ROL_EPSILON(), ROL::AlgorithmState< Real >::snorm, snorm_, tnorm_, ROL::Constraint< Real >::update(), ROL::Objective< Real >::update(), ROL::AlgorithmState< Real >::value, ROL::Constraint< Real >::value(), ROL::Objective< Real >::value(), and zero.
|
inlinevirtual |
Compute step for bound constraints; here only to satisfy the interface requirements, does nothing, needs refactoring.
Reimplemented from ROL::Step< Real >.
Definition at line 338 of file ROL_CompositeStep.hpp.
|
inlinevirtual |
Update step, for bound constraints; here only to satisfy the interface requirements, does nothing, needs refactoring.
Reimplemented from ROL::Step< Real >.
Definition at line 345 of file ROL_CompositeStep.hpp.
|
inlinevirtual |
Print iterate header.
Reimplemented from ROL::Step< Real >.
Definition at line 351 of file ROL_CompositeStep.hpp.
Referenced by print().
|
inlinevirtual |
Print step name.
Reimplemented from ROL::Step< Real >.
Definition at line 372 of file ROL_CompositeStep.hpp.
Referenced by print().
|
inlinevirtual |
Print iterate status.
Reimplemented from ROL::Step< Real >.
Definition at line 381 of file ROL_CompositeStep.hpp.
References ROL::AlgorithmState< Real >::cnorm, Delta_, flagAC_, flagCG_, ROL::AlgorithmState< Real >::gnorm, ROL::AlgorithmState< Real >::iter, iterCG_, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, nnorm_, printHeader(), printName(), ROL::AlgorithmState< Real >::snorm, tnorm_, totalCallLS_, totalIterLS_, and ROL::AlgorithmState< Real >::value.
|
inline |
Compute Lagrange multipliers by solving the least-squares problem minimizing the gradient of the Lagrangian, via the augmented system formulation.
| [out] | l | is the updated Lagrange multiplier; a dual constraint-space vector |
| [in] | x | is the current iterate; an optimization-space vector |
| [in] | gf | is the gradient of the objective function; a dual optimization-space vector |
| [in] | con | is the equality constraint object |
On return ... fill the blanks.
Definition at line 434 of file ROL_CompositeStep.hpp.
References ROL::Constraint< Real >::applyAdjointJacobian(), cvec_, gvec_, infoLM_, lmhtol_, lvec_, ROL::Vector< Real >::plus(), printInfoLS(), ROL::ROL_EPSILON(), setTolOSS(), ROL::Constraint< Real >::solveAugmentedSystem(), totalCallLS_, totalIterLS_, and xvec_.
Referenced by accept(), initialize(), and update().
|
inline |
Compute quasi-normal step by minimizing the norm of the linearized constraint.
Compute an approximate solution of the problem
\[ \begin{array}{rl} \min_{n} & \|c'(x_k)n + c(x_k)\|^2_{\mathcal{X}} \\ \mbox{subject to} & \|n\|_{\mathcal{X}} \le \delta \end{array} \]
The approximate solution is computed using Powell's dogleg method. The dogleg path is computed using the Cauchy point and a full Newton step. The path's intersection with the trust-region constraint gives the quasi-normal step.
| [out] | n | is the quasi-normal step; an optimization-space vector |
| [in] | c | is the value of equality constraints; a constraint-space vector |
| [in] | x | is the current iterate; an optimization-space vector |
| [in] | delta | is the trust-region radius for the quasi-normal step |
| [in] | con | is the equality constraint object |
Definition at line 501 of file ROL_CompositeStep.hpp.
References ROL::Constraint< Real >::applyAdjointJacobian(), ROL::Constraint< Real >::applyJacobian(), ROL::Vector< Real >::axpy(), cvec_, ROL::Vector< Real >::dual(), gvec_, infoQN_, lvec_, printInfoLS(), qntol_, ROL::ROL_EPSILON(), ROL::Vector< Real >::scale(), ROL::Vector< Real >::set(), setTolOSS(), ROL::Constraint< Real >::solveAugmentedSystem(), totalCallLS_, totalIterLS_, xvec_, and zero.
|
inline |
Solve tangential subproblem.
@param[out] t is the solution of the tangential subproblem; an optimization-space vector @param[out] tCP is the Cauchy point for the tangential subproblem; an optimization-space vector @param[out] Wg is the dual of the projected gradient of the Lagrangian; an optimization-space vector @param[in] x is the current iterate; an optimization-space vector @param[in] g is the gradient of the Lagrangian; a dual optimization-space vector @param[in] n is the quasi-normal step; an optimization-space vector @param[in] l is the Lagrange multiplier; a dual constraint-space vector @param[in] delta is the trust-region radius for the tangential subproblem @param[in] con is the equality constraint object
Definition at line 611 of file ROL_CompositeStep.hpp.
References ROL::Constraint< Real >::applyAdjointHessian(), ROL::Constraint< Real >::applyJacobian(), cvec_, ROL::Vector< Real >::dot(), ROL::Vector< Real >::dual(), flagCG_, gvec_, ROL::Objective< Real >::hessVec(), infoTS_, iterCG_, lvec_, maxiterCG_, ROL::Vector< Real >::norm(), pgtol_, ROL::Vector< Real >::plus(), printInfoLS(), projtol_, ROL::ROL_EPSILON(), ROL::Vector< Real >::set(), setTolOSS(), sgn(), ROL::Constraint< Real >::solveAugmentedSystem(), tolCG_, totalCallLS_, totalIterLS_, useConHess_, xvec_, ROL::Vector< Real >::zero(), and zero.
|
inline |
Check acceptance of subproblem solutions, adjust merit function penalty parameter, ensure global convergence.
Definition at line 938 of file ROL_CompositeStep.hpp.
References ROL::Constraint< Real >::applyAdjointHessian(), ROL::Constraint< Real >::applyAdjointJacobian(), ROL::Constraint< Real >::applyJacobian(), ared_, computeLagrangeMultiplier(), computeQuasinormalStep(), cvec_, Delta_, ROL::Vector< Real >::dot(), ROL::Vector< Real >::dual(), eta_, flagCG_, ROL::Objective< Real >::gradient(), gvec_, ROL::Objective< Real >::hessVec(), infoAC_, ROL::AlgorithmState< Real >::iter, iterCG_, lmhtol_, lvec_, nnorm_, ROL::Vector< Real >::norm(), penalty_, pgtol_, ROL::Vector< Real >::plus(), pred_, printInfoLS(), projtol_, qntol_, ROL::ROL_EPSILON(), ROL::Vector< Real >::set(), setTolOSS(), snorm_, ROL::Constraint< Real >::solveAugmentedSystem(), solveTangentialSubproblem(), tangtol_, tnorm_, tntmax_, tolOSSfixed_, totalCallLS_, totalIterCG_, totalIterLS_, totalNegCurv_, totalProj_, totalRef_, ROL::Constraint< Real >::update(), ROL::Objective< Real >::update(), useConHess_, ROL::Constraint< Real >::value(), ROL::Objective< Real >::value(), xvec_, zero, and zeta_.
Referenced by compute().
|
private |
Definition at line 33 of file ROL_CompositeStep.hpp.
Referenced by accept(), compute(), computeLagrangeMultiplier(), computeQuasinormalStep(), initialize(), and solveTangentialSubproblem().
|
private |
Definition at line 34 of file ROL_CompositeStep.hpp.
Referenced by accept(), compute(), computeLagrangeMultiplier(), computeQuasinormalStep(), initialize(), solveTangentialSubproblem(), and update().
|
private |
Definition at line 35 of file ROL_CompositeStep.hpp.
Referenced by accept(), compute(), computeLagrangeMultiplier(), computeQuasinormalStep(), initialize(), solveTangentialSubproblem(), and update().
|
private |
Definition at line 36 of file ROL_CompositeStep.hpp.
Referenced by accept(), compute(), computeLagrangeMultiplier(), computeQuasinormalStep(), initialize(), and solveTangentialSubproblem().
|
private |
Definition at line 39 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), print(), and solveTangentialSubproblem().
|
private |
Definition at line 40 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), print(), and update().
|
private |
Definition at line 41 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), compute(), print(), and solveTangentialSubproblem().
|
private |
Definition at line 44 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), and solveTangentialSubproblem().
|
private |
Definition at line 45 of file ROL_CompositeStep.hpp.
|
private |
Definition at line 46 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), and solveTangentialSubproblem().
|
private |
Definition at line 47 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), and setTolOSS().
|
private |
Definition at line 48 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and setTolOSS().
|
private |
Definition at line 51 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and computeLagrangeMultiplier().
|
private |
Definition at line 52 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and computeQuasinormalStep().
|
private |
Definition at line 53 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and solveTangentialSubproblem().
|
private |
Definition at line 54 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and solveTangentialSubproblem().
|
private |
Definition at line 55 of file ROL_CompositeStep.hpp.
Referenced by accept(), and CompositeStep().
|
private |
Definition at line 56 of file ROL_CompositeStep.hpp.
Referenced by accept(), and CompositeStep().
|
private |
Definition at line 59 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and compute().
|
private |
Definition at line 60 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), compute(), print(), and update().
|
private |
Definition at line 61 of file ROL_CompositeStep.hpp.
Referenced by accept(), and CompositeStep().
|
private |
Definition at line 62 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and update().
|
private |
Definition at line 63 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and solveTangentialSubproblem().
|
private |
Definition at line 65 of file ROL_CompositeStep.hpp.
|
private |
Definition at line 66 of file ROL_CompositeStep.hpp.
|
private |
Definition at line 67 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and update().
|
private |
Definition at line 68 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), print(), and update().
|
private |
Definition at line 69 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), print(), and update().
|
private |
Definition at line 72 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), and computeQuasinormalStep().
|
private |
Definition at line 73 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), and computeLagrangeMultiplier().
|
private |
Definition at line 74 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), and solveTangentialSubproblem().
|
private |
Definition at line 75 of file ROL_CompositeStep.hpp.
Referenced by accept(), and CompositeStep().
|
private |
Definition at line 76 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep(), and printInfoLS().
|
private |
Definition at line 77 of file ROL_CompositeStep.hpp.
Referenced by CompositeStep().
|
private |
Definition at line 80 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), and compute().
|
private |
Definition at line 81 of file ROL_CompositeStep.hpp.
Referenced by accept(), and CompositeStep().
|
private |
Definition at line 82 of file ROL_CompositeStep.hpp.
Referenced by accept(), and CompositeStep().
|
private |
Definition at line 83 of file ROL_CompositeStep.hpp.
Referenced by accept(), and CompositeStep().
|
private |
Definition at line 84 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), computeLagrangeMultiplier(), computeQuasinormalStep(), print(), and solveTangentialSubproblem().
|
private |
Definition at line 85 of file ROL_CompositeStep.hpp.
Referenced by accept(), CompositeStep(), computeLagrangeMultiplier(), computeQuasinormalStep(), print(), and solveTangentialSubproblem().