|
ROL
|
Implements the computation of optimization steps using Moreau-Yosida regularized bound constraints. More...
#include <ROL_MoreauYosidaPenaltyStep.hpp>
Inheritance diagram for ROL::MoreauYosidaPenaltyStep< Real >:Public Member Functions | |
| ~MoreauYosidaPenaltyStep () | |
| MoreauYosidaPenaltyStep (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, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Initialize step with equality constraint. | |
| void | initialize (Vector< Real > &x, const Vector< Real > &g, Objective< Real > &obj, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Initialize step without equality constraint. | |
| 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 and bound constraints). | |
| void | compute (Vector< Real > &s, const Vector< Real > &x, Objective< Real > &obj, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Compute step for bound constraints. | |
| 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 and bound constraints). | |
| void | update (Vector< Real > &x, const Vector< Real > &s, Objective< Real > &obj, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Update step, for bound constraints. | |
| 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. | |
Public Member Functions inherited from ROL::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, AlgorithmState< Real > &algo_state) |
| Initialize step with equality 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, Objective< Real > &obj, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Compute step. | |
| virtual void | update (Vector< Real > &x, const Vector< Real > &s, Objective< Real > &obj, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| Update step, if successful. | |
| virtual 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 (equality constraints). | |
| virtual 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 (equality constraints). | |
| 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). | |
| virtual std::string | print (AlgorithmState< Real > &algo_state, bool printHeader=false) const |
| Print iterate status. | |
| 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 | |
| void | updateState (const Vector< Real > &x, const Vector< Real > &l, Objective< Real > &obj, Constraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
| void | updateState (const Vector< Real > &x, Objective< Real > &obj, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
Private Attributes | |
| ROL::Ptr< StatusTest< Real > > | status_ |
| ROL::Ptr< Step< Real > > | step_ |
| ROL::Ptr< Algorithm< Real > > | algo_ |
| ROL::Ptr< Vector< Real > > | x_ |
| ROL::Ptr< Vector< Real > > | g_ |
| ROL::Ptr< Vector< Real > > | l_ |
| ROL::Ptr< BoundConstraint< Real > > | bnd_ |
| Real | compViolation_ |
| Real | gLnorm_ |
| Real | tau_ |
| bool | print_ |
| bool | updatePenalty_ |
| ROL::ParameterList | parlist_ |
| int | subproblemIter_ |
| bool | hasEquality_ |
| EStep | stepType_ |
| std::string | stepname_ |
Additional Inherited Members | |
Protected Member Functions inherited from ROL::ROL::Step< Real > | |
| ROL::Ptr< StepState< Real > > | getState (void) |
Implements the computation of optimization steps using Moreau-Yosida regularized bound constraints.
To describe the generalized Moreau-Yosida penalty method, we consider the following abstract setting. Suppose \(\mathcal{X}\) is a Hilbert space of functions mapping \(\Xi\) to \(\mathbb{R}\). For example, \(\Xi\subset\mathbb{R}^n\) and \(\mathcal{X}=L^2(\Xi)\) or \(\Xi = \{1,\ldots,n\}\) and \(\mathcal{X}=\mathbb{R}^n\). We assume \( f:\mathcal{X}\to\mathbb{R}\) is twice-continuously Fréchet differentiable and \(a,\,b\in\mathcal{X}\) with \(a\le b\) almost everywhere in \(\Xi\). Note that the generalized Moreau-Yosida penalty method will also work with secant approximations of the Hessian.
The generalized Moreau-Yosida penalty method is a proveably convergent algorithm for convex optimization problems and may not converge for general nonlinear, nonconvex problems. The algorithm solves
\[ \min_x \quad f(x) \quad \text{s.t.} \quad c(x) = 0, \quad a \le x \le b. \]
We can respresent the bound constraints using the indicator function \(\iota_{[a,b]}(x) = 0\) if \(a \le x \le b\) and equals \(\infty\) otherwise. Using this indicator function, we can write our optimization problem as the (nonsmooth) equality constrained program
\[ \min_x \quad f(x) + \iota_{[a,b]}(x) \quad \text{s.t.}\quad c(x) = 0. \]
Since the indicator function is not continuously Fréchet differentiable, we cannot apply our existing algorithms (such as, Composite Step SQP) to the above equality constrained problem. To circumvent this issue, we smooth the indicator function using generalized Moreau-Yosida regularization, i.e., we replace \(\iota_{[a,b]}\) in the objective function with
\[ \varphi(x,\mu,c) = \inf_y\; \{\; \iota_{[a,b]}(x-y) + \langle \mu, y\rangle_{\mathcal{X}} + \frac{c}{2}\|y\|_{\mathcal{X}}^2 \;\}. \]
One can show that \(\varphi(\cdot,\mu,c)\) for any \(\mu\in\mathcal{X}\) and \(c > 0\) is continuously Fréchet differentiable with respect to \(x\). Thus, using this penalty, Step::compute solves the following subproblem: given \(c_k>0\) and \(\mu_k\in\mathcal{X}\), determine \(x_k\in\mathcal{X}\) that solves
\[ \min_{x} \quad f(x) + \varphi(x,\mu_k,c_k)\quad\text{s.t.} c(x) = 0. \]
The multipliers \(\mu_k\) are then updated in Step::update as \(\mu_{k+1} = \nabla_x\varphi(x_k,\mu_k,c_k)\) and \(c_k\) is potentially increased (although this is not always necessary).
For more information on this method see:
Definition at line 128 of file ROL_MoreauYosidaPenaltyStep.hpp.
|
inline |
Definition at line 208 of file ROL_MoreauYosidaPenaltyStep.hpp.
|
inline |
Definition at line 210 of file ROL_MoreauYosidaPenaltyStep.hpp.
References algo_, g_, ROL::Step< Real >::getState(), hasEquality_, l_, parlist_, print_, ROL::ROL::Step< Real >::Step(), stepname_, stepType_, ROL::StringToEStep(), subproblemIter_, tau_, updatePenalty_, and x_.
|
inlineprivate |
Definition at line 151 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::Constraint< Real >::applyAdjointJacobian(), ROL::AlgorithmState< Real >::cnorm, compViolation_, g_, ROL::Step< Real >::getState(), gLnorm_, ROL::AlgorithmState< Real >::gnorm, ROL::MoreauYosidaPenalty< Real >::gradient(), ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::ROL_EPSILON(), ROL::MoreauYosidaPenalty< Real >::testComplementarity(), ROL::Constraint< Real >::update(), ROL::MoreauYosidaPenalty< Real >::update(), ROL::AlgorithmState< Real >::value, ROL::Constraint< Real >::value(), and ROL::MoreauYosidaPenalty< Real >::value().
Referenced by initialize(), initialize(), update(), and update().
|
inlineprivate |
Definition at line 179 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::AlgorithmState< Real >::cnorm, compViolation_, ROL::Step< Real >::getState(), gLnorm_, ROL::AlgorithmState< Real >::gnorm, ROL::MoreauYosidaPenalty< Real >::gradient(), ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::ROL_EPSILON(), ROL::MoreauYosidaPenalty< Real >::testComplementarity(), ROL::MoreauYosidaPenalty< Real >::update(), ROL::AlgorithmState< Real >::value, and ROL::MoreauYosidaPenalty< Real >::value().
|
inline |
Initialize step with equality constraint.
Definition at line 238 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::Vector< Real >::clone(), g_, ROL::Step< Real >::getState(), hasEquality_, ROL::BoundConstraint< Real >::isActivated(), l_, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::BoundConstraint< Real >::project(), updateState(), and x_.
|
inline |
Initialize step without equality constraint.
Definition at line 264 of file ROL_MoreauYosidaPenaltyStep.hpp.
References bnd_, ROL::Vector< Real >::clone(), g_, ROL::Step< Real >::getState(), ROL::BoundConstraint< Real >::isActivated(), ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::BoundConstraint< Real >::project(), updateState(), and x_.
|
inline |
Compute step (equality and bound constraints).
Definition at line 290 of file ROL_MoreauYosidaPenaltyStep.hpp.
References algo_, ROL::Vector< Real >::axpy(), ROL::Step< Real >::getState(), l_, parlist_, print_, ROL::Vector< Real >::set(), status_, step_, ROL::STEP_AUGMENTEDLAGRANGIAN, ROL::STEP_COMPOSITESTEP, ROL::STEP_FLETCHER, stepname_, stepType_, subproblemIter_, and x_.
|
inline |
Compute step for bound constraints.
Definition at line 328 of file ROL_MoreauYosidaPenaltyStep.hpp.
References algo_, ROL::Vector< Real >::axpy(), bnd_, parlist_, print_, ROL::Vector< Real >::set(), status_, step_, ROL::STEP_BUNDLE, ROL::STEP_LINESEARCH, stepType_, subproblemIter_, and x_.
|
inline |
Update step, if successful (equality and bound constraints).
Definition at line 356 of file ROL_MoreauYosidaPenaltyStep.hpp.
References algo_, ROL::MoreauYosidaPenalty< Real >::getNumberFunctionEvaluations(), ROL::MoreauYosidaPenalty< Real >::getNumberGradientEvaluations(), ROL::Step< Real >::getState(), ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::iterateVec, l_, ROL::AlgorithmState< Real >::lagmultVec, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::Vector< Real >::norm(), ROL::Vector< Real >::plus(), ROL::Vector< Real >::set(), ROL::AlgorithmState< Real >::snorm, subproblemIter_, tau_, ROL::Constraint< Real >::update(), ROL::MoreauYosidaPenalty< Real >::update(), ROL::MoreauYosidaPenalty< Real >::updateMultipliers(), updatePenalty_, and updateState().
|
inline |
Update step, for bound constraints.
Definition at line 389 of file ROL_MoreauYosidaPenaltyStep.hpp.
References algo_, ROL::MoreauYosidaPenalty< Real >::getNumberFunctionEvaluations(), ROL::MoreauYosidaPenalty< Real >::getNumberGradientEvaluations(), ROL::Step< Real >::getState(), ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::iterateVec, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::Vector< Real >::norm(), ROL::Vector< Real >::plus(), ROL::AlgorithmState< Real >::snorm, tau_, ROL::MoreauYosidaPenalty< Real >::update(), ROL::MoreauYosidaPenalty< Real >::updateMultipliers(), updatePenalty_, and updateState().
|
inlinevirtual |
Print iterate header.
Reimplemented from ROL::ROL::Step< Real >.
Definition at line 416 of file ROL_MoreauYosidaPenaltyStep.hpp.
References hasEquality_.
Referenced by print().
|
inlinevirtual |
Print step name.
Reimplemented from ROL::ROL::Step< Real >.
Definition at line 440 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by print().
|
inline |
Print iterate status.
Definition at line 449 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::AlgorithmState< Real >::cnorm, compViolation_, gLnorm_, hasEquality_, ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, printHeader(), printName(), ROL::AlgorithmState< Real >::snorm, subproblemIter_, and ROL::AlgorithmState< Real >::value.
|
private |
Definition at line 130 of file ROL_MoreauYosidaPenaltyStep.hpp.
|
private |
Definition at line 131 of file ROL_MoreauYosidaPenaltyStep.hpp.
|
private |
Definition at line 132 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), compute(), MoreauYosidaPenaltyStep(), update(), and update().
|
private |
Definition at line 133 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), compute(), initialize(), initialize(), and MoreauYosidaPenaltyStep().
|
private |
Definition at line 134 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by initialize(), initialize(), MoreauYosidaPenaltyStep(), and updateState().
|
private |
Definition at line 135 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), initialize(), MoreauYosidaPenaltyStep(), and update().
|
private |
Definition at line 136 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), and initialize().
|
private |
Definition at line 138 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by print(), updateState(), and updateState().
|
private |
Definition at line 139 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by print(), updateState(), and updateState().
|
private |
Definition at line 140 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by MoreauYosidaPenaltyStep(), update(), and update().
|
private |
Definition at line 141 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), compute(), and MoreauYosidaPenaltyStep().
|
private |
Definition at line 142 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by MoreauYosidaPenaltyStep(), update(), and update().
|
private |
Definition at line 144 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), compute(), and MoreauYosidaPenaltyStep().
|
private |
Definition at line 145 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), compute(), MoreauYosidaPenaltyStep(), print(), and update().
|
private |
Definition at line 146 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by initialize(), MoreauYosidaPenaltyStep(), print(), and printHeader().
|
private |
Definition at line 148 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), compute(), and MoreauYosidaPenaltyStep().
|
private |
Definition at line 149 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by compute(), and MoreauYosidaPenaltyStep().