ROL
|
Implements the computation of optimization steps using Moreau-Yosida regularized bound constraints. More...
#include <ROL_MoreauYosidaPenaltyStep.hpp>
Public Member Functions | |
~MoreauYosidaPenaltyStep () | |
MoreauYosidaPenaltyStep (Teuchos::ParameterList &parlist) | |
void | initialize (Vector< Real > &x, const Vector< Real > &g, Vector< Real > &l, const Vector< Real > &c, Objective< Real > &obj, EqualityConstraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
Initialize step with equality constraint. More... | |
void | compute (Vector< Real > &s, const Vector< Real > &x, const Vector< Real > &l, Objective< Real > &obj, EqualityConstraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
Compute step (equality and bound constraints). More... | |
void | update (Vector< Real > &x, Vector< Real > &l, const Vector< Real > &s, Objective< Real > &obj, EqualityConstraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
Update step, if successful (equality and bound constraints). More... | |
std::string | printHeader (void) const |
Print iterate header. More... | |
std::string | printName (void) const |
Print step name. More... | |
std::string | print (AlgorithmState< Real > &algo_state, bool pHeader=false) const |
Print iterate status. More... | |
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. More... | |
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. More... | |
![]() | |
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. More... | |
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. More... | |
virtual void | initialize (Vector< Real > &x, const Vector< Real > &g, Vector< Real > &l, const Vector< Real > &c, Objective< Real > &obj, EqualityConstraint< Real > &con, AlgorithmState< Real > &algo_state) |
Initialize step with equality constraint. More... | |
virtual void | compute (Vector< Real > &s, const Vector< Real > &x, const Vector< Real > &l, Objective< Real > &obj, EqualityConstraint< Real > &con, AlgorithmState< Real > &algo_state) |
Compute step (equality constraints). More... | |
virtual void | update (Vector< Real > &x, Vector< Real > &l, const Vector< Real > &s, Objective< Real > &obj, EqualityConstraint< Real > &con, AlgorithmState< Real > &algo_state) |
Update step, if successful (equality constraints). More... | |
void | initialize (OptimizationProblem< Real > &opt, AlgorithmState< Real > &algo_state) |
void | compute (Vector< Real > &s, OptimizationProblem< Real > &opt, AlgorithmState< Real > &algo_state) |
void | update (OptimizationProblem< Real > &opt, const Vector< Real > &s, AlgorithmState< Real > &algo_state) |
const Teuchos::RCP< const StepState< Real > > | getStepState (void) const |
Get state for step object. More... | |
Private Member Functions | |
void | updateState (const Vector< Real > &x, const Vector< Real > &l, Objective< Real > &obj, EqualityConstraint< Real > &con, BoundConstraint< Real > &bnd, AlgorithmState< Real > &algo_state) |
Private Attributes | |
Teuchos::RCP< Algorithm< Real > > | algo_ |
Teuchos::RCP< Vector< Real > > | x_ |
Teuchos::RCP< Vector< Real > > | g_ |
Teuchos::RCP< Vector< Real > > | l_ |
Real | tau_ |
bool | print_ |
Teuchos::ParameterList | parlist_ |
int | subproblemIter_ |
Additional Inherited Members | |
![]() | |
Teuchos::RCP< 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 121 of file ROL_MoreauYosidaPenaltyStep.hpp.
|
inline |
Definition at line 175 of file ROL_MoreauYosidaPenaltyStep.hpp.
|
inline |
Definition at line 177 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::Step< Real >::getState(), ROL::MoreauYosidaPenaltyStep< Real >::parlist_, ROL::MoreauYosidaPenaltyStep< Real >::print_, and ROL::MoreauYosidaPenaltyStep< Real >::tau_.
|
inlineprivate |
Definition at line 134 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::EqualityConstraint< Real >::applyAdjointJacobian(), ROL::AlgorithmState< Real >::cnorm, ROL::MoreauYosidaPenaltyStep< Real >::g_, ROL::Step< Real >::getState(), ROL::AlgorithmState< Real >::gnorm, ROL::MoreauYosidaPenalty< Real >::gradient(), ROL::BoundConstraint< Real >::isActivated(), ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::BoundConstraint< Real >::project(), ROL::MoreauYosidaPenalty< Real >::update(), ROL::EqualityConstraint< Real >::update(), ROL::AlgorithmState< Real >::value, ROL::EqualityConstraint< Real >::value(), ROL::MoreauYosidaPenalty< Real >::value(), and ROL::MoreauYosidaPenaltyStep< Real >::x_.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::initialize(), and ROL::MoreauYosidaPenaltyStep< Real >::update().
|
inlinevirtual |
Initialize step with equality constraint.
Reimplemented from ROL::Step< Real >.
Definition at line 200 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::Vector< Real >::clone(), ROL::MoreauYosidaPenaltyStep< Real >::g_, ROL::Step< Real >::getState(), ROL::BoundConstraint< Real >::isActivated(), ROL::MoreauYosidaPenaltyStep< Real >::l_, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::BoundConstraint< Real >::project(), ROL::MoreauYosidaPenalty< Real >::updateMultipliers(), ROL::MoreauYosidaPenaltyStep< Real >::updateState(), and ROL::MoreauYosidaPenaltyStep< Real >::x_.
|
inlinevirtual |
Compute step (equality and bound constraints).
Reimplemented from ROL::Step< Real >.
Definition at line 229 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::MoreauYosidaPenaltyStep< Real >::algo_, ROL::Vector< Real >::axpy(), ROL::MoreauYosidaPenaltyStep< Real >::l_, ROL::MoreauYosidaPenaltyStep< Real >::parlist_, ROL::MoreauYosidaPenaltyStep< Real >::print_, ROL::Vector< Real >::set(), ROL::MoreauYosidaPenaltyStep< Real >::subproblemIter_, and ROL::MoreauYosidaPenaltyStep< Real >::x_.
|
inlinevirtual |
Update step, if successful (equality and bound constraints).
Reimplemented from ROL::Step< Real >.
Definition at line 245 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::MoreauYosidaPenaltyStep< Real >::algo_, ROL::MoreauYosidaPenalty< Real >::getNumberFunctionEvaluations(), ROL::MoreauYosidaPenalty< Real >::getNumberGradientEvaluations(), ROL::Step< Real >::getState(), ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::iterateVec, ROL::MoreauYosidaPenaltyStep< Real >::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, ROL::MoreauYosidaPenaltyStep< Real >::tau_, ROL::MoreauYosidaPenalty< Real >::update(), ROL::EqualityConstraint< Real >::update(), ROL::MoreauYosidaPenalty< Real >::updateMultipliers(), and ROL::MoreauYosidaPenaltyStep< Real >::updateState().
|
inlinevirtual |
Print iterate header.
Reimplemented from ROL::Step< Real >.
Definition at line 275 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::print().
|
inlinevirtual |
Print step name.
Reimplemented from ROL::Step< Real >.
Definition at line 294 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::print().
|
inlinevirtual |
Print iterate status.
Reimplemented from ROL::Step< Real >.
Definition at line 303 of file ROL_MoreauYosidaPenaltyStep.hpp.
References ROL::AlgorithmState< Real >::cnorm, ROL::AlgorithmState< Real >::gnorm, ROL::AlgorithmState< Real >::iter, ROL::AlgorithmState< Real >::ncval, ROL::AlgorithmState< Real >::nfval, ROL::AlgorithmState< Real >::ngrad, ROL::MoreauYosidaPenaltyStep< Real >::printHeader(), ROL::MoreauYosidaPenaltyStep< Real >::printName(), ROL::AlgorithmState< Real >::snorm, ROL::MoreauYosidaPenaltyStep< Real >::subproblemIter_, and ROL::AlgorithmState< Real >::value.
|
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 345 of file ROL_MoreauYosidaPenaltyStep.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 352 of file ROL_MoreauYosidaPenaltyStep.hpp.
|
private |
Definition at line 123 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::compute(), and ROL::MoreauYosidaPenaltyStep< Real >::update().
|
private |
Definition at line 124 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::compute(), ROL::MoreauYosidaPenaltyStep< Real >::initialize(), and ROL::MoreauYosidaPenaltyStep< Real >::updateState().
|
private |
Definition at line 125 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::initialize(), and ROL::MoreauYosidaPenaltyStep< Real >::updateState().
|
private |
Definition at line 126 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::compute(), ROL::MoreauYosidaPenaltyStep< Real >::initialize(), and ROL::MoreauYosidaPenaltyStep< Real >::update().
|
private |
Definition at line 128 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::MoreauYosidaPenaltyStep(), and ROL::MoreauYosidaPenaltyStep< Real >::update().
|
private |
Definition at line 129 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::compute(), and ROL::MoreauYosidaPenaltyStep< Real >::MoreauYosidaPenaltyStep().
|
private |
Definition at line 131 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::compute(), and ROL::MoreauYosidaPenaltyStep< Real >::MoreauYosidaPenaltyStep().
|
private |
Definition at line 132 of file ROL_MoreauYosidaPenaltyStep.hpp.
Referenced by ROL::MoreauYosidaPenaltyStep< Real >::compute(), and ROL::MoreauYosidaPenaltyStep< Real >::print().