ROL
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ROL::MoreauYosidaPenaltyStep< Real > Class Template Reference

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 (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...
 
- 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. 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 compViolation_
 
Real gLnorm_
 
Real tau_
 
bool print_
 
Teuchos::ParameterList parlist_
 
int subproblemIter_
 

Additional Inherited Members

- Protected Member Functions inherited from ROL::Step< Real >
Teuchos::RCP< StepState< Real > > getState (void)
 

Detailed Description

template<class Real>
class ROL::MoreauYosidaPenaltyStep< Real >

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.

Constructor & Destructor Documentation

◆ ~MoreauYosidaPenaltyStep()

template<class Real >
ROL::MoreauYosidaPenaltyStep< Real >::~MoreauYosidaPenaltyStep ( )
inline

Definition at line 170 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ MoreauYosidaPenaltyStep()

template<class Real >
ROL::MoreauYosidaPenaltyStep< Real >::MoreauYosidaPenaltyStep ( Teuchos::ParameterList &  parlist)
inline

Definition at line 172 of file ROL_MoreauYosidaPenaltyStep.hpp.

References ROL::Step< Real >::getState().

Member Function Documentation

◆ updateState()

template<class Real >
void ROL::MoreauYosidaPenaltyStep< Real >::updateState ( const Vector< Real > &  x,
const Vector< Real > &  l,
Objective< Real > &  obj,
EqualityConstraint< Real > &  con,
BoundConstraint< Real > &  bnd,
AlgorithmState< Real > &  algo_state 
)
inlineprivate

◆ initialize()

template<class Real >
void ROL::MoreauYosidaPenaltyStep< Real >::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 
)
inlinevirtual

◆ compute() [1/2]

template<class Real >
void ROL::MoreauYosidaPenaltyStep< Real >::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 
)
inlinevirtual

Compute step (equality and bound constraints).

Reimplemented from ROL::Step< Real >.

Definition at line 224 of file ROL_MoreauYosidaPenaltyStep.hpp.

References ROL::Vector< Real >::axpy(), and ROL::Vector< Real >::set().

◆ update() [1/2]

template<class Real >
void ROL::MoreauYosidaPenaltyStep< Real >::update ( Vector< Real > &  x,
Vector< Real > &  l,
const Vector< Real > &  s,
Objective< Real > &  obj,
EqualityConstraint< Real > &  con,
BoundConstraint< Real > &  bnd,
AlgorithmState< Real > &  algo_state 
)
inlinevirtual

◆ printHeader()

template<class Real >
std::string ROL::MoreauYosidaPenaltyStep< Real >::printHeader ( void  ) const
inlinevirtual

Print iterate header.

Reimplemented from ROL::Step< Real >.

Definition at line 270 of file ROL_MoreauYosidaPenaltyStep.hpp.

Referenced by ROL::MoreauYosidaPenaltyStep< Real >::print().

◆ printName()

template<class Real >
std::string ROL::MoreauYosidaPenaltyStep< Real >::printName ( void  ) const
inlinevirtual

Print step name.

Reimplemented from ROL::Step< Real >.

Definition at line 290 of file ROL_MoreauYosidaPenaltyStep.hpp.

Referenced by ROL::MoreauYosidaPenaltyStep< Real >::print().

◆ print()

template<class Real >
std::string ROL::MoreauYosidaPenaltyStep< Real >::print ( AlgorithmState< Real > &  algo_state,
bool  pHeader = false 
) const
inlinevirtual

◆ compute() [2/2]

template<class Real >
void ROL::MoreauYosidaPenaltyStep< Real >::compute ( Vector< Real > &  s,
const Vector< Real > &  x,
Objective< Real > &  obj,
BoundConstraint< Real > &  con,
AlgorithmState< Real > &  algo_state 
)
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 343 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ update() [2/2]

template<class Real >
void ROL::MoreauYosidaPenaltyStep< Real >::update ( Vector< Real > &  x,
const Vector< Real > &  s,
Objective< Real > &  obj,
BoundConstraint< Real > &  con,
AlgorithmState< Real > &  algo_state 
)
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 350 of file ROL_MoreauYosidaPenaltyStep.hpp.

Member Data Documentation

◆ algo_

template<class Real >
Teuchos::RCP<Algorithm<Real> > ROL::MoreauYosidaPenaltyStep< Real >::algo_
private

Definition at line 123 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ x_

template<class Real >
Teuchos::RCP<Vector<Real> > ROL::MoreauYosidaPenaltyStep< Real >::x_
private

Definition at line 124 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ g_

template<class Real >
Teuchos::RCP<Vector<Real> > ROL::MoreauYosidaPenaltyStep< Real >::g_
private

Definition at line 125 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ l_

template<class Real >
Teuchos::RCP<Vector<Real> > ROL::MoreauYosidaPenaltyStep< Real >::l_
private

Definition at line 126 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ compViolation_

template<class Real >
Real ROL::MoreauYosidaPenaltyStep< Real >::compViolation_
private

◆ gLnorm_

template<class Real >
Real ROL::MoreauYosidaPenaltyStep< Real >::gLnorm_
private

◆ tau_

template<class Real >
Real ROL::MoreauYosidaPenaltyStep< Real >::tau_
private

◆ print_

template<class Real >
bool ROL::MoreauYosidaPenaltyStep< Real >::print_
private

Definition at line 131 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ parlist_

template<class Real >
Teuchos::ParameterList ROL::MoreauYosidaPenaltyStep< Real >::parlist_
private

Definition at line 133 of file ROL_MoreauYosidaPenaltyStep.hpp.

◆ subproblemIter_

template<class Real >
int ROL::MoreauYosidaPenaltyStep< Real >::subproblemIter_
private

The documentation for this class was generated from the following file: