ROL
Public Member Functions | Private Types | Private Attributes | Static Private Attributes | List of all members
ROL::InteriorPoint::PrimalDualResidual< Real > Class Template Reference

Express the Primal-Dual Interior Point gradient as an equality constraint. More...

#include <ROL_InteriorPointPrimalDualResidual.hpp>

+ Inheritance diagram for ROL::InteriorPoint::PrimalDualResidual< Real >:

Public Member Functions

 PrimalDualResidual (const ROL::Ptr< OBJ > &obj, const ROL::Ptr< CON > &eqcon, const ROL::Ptr< CON > &incon, const V &x)
 
void value (V &c, const V &x, Real &tol)
 Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\). More...
 
void applyJacobian (V &jv, const V &v, const V &x, Real &tol)
 Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\). More...
 
void updatePenalty (Real mu)
 
 PrimalDualResidual (const ROL::Ptr< OBJ > &obj, const ROL::Ptr< CON > &eqcon, const ROL::Ptr< CON > &incon, const V &x)
 
void value (V &c, const V &x, Real &tol)
 Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\). More...
 
void applyJacobian (V &jv, const V &v, const V &x, Real &tol)
 Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\). More...
 
void updatePenalty (Real mu)
 
- Public Member Functions inherited from ROL::Constraint< Real >
virtual ~Constraint (void)
 
 Constraint (void)
 
virtual void update (const Vector< Real > &x, UpdateType type, int iter=-1)
 Update constraint function. More...
 
virtual void update (const Vector< Real > &x, bool flag=true, int iter=-1)
 Update constraint functions. x is the optimization variable, flag = true if optimization variable is changed, iter is the outer algorithm iterations count. More...
 
virtual void applyAdjointJacobian (Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
 Apply the adjoint of the the constraint Jacobian at \(x\), \(c'(x)^* \in L(\mathcal{C}^*, \mathcal{X}^*)\), to vector \(v\). More...
 
virtual void applyAdjointJacobian (Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &x, const Vector< Real > &dualv, Real &tol)
 Apply the adjoint of the the constraint Jacobian at \(x\), \(c'(x)^* \in L(\mathcal{C}^*, \mathcal{X}^*)\), to vector \(v\). More...
 
virtual void applyAdjointHessian (Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
 Apply the derivative of the adjoint of the constraint Jacobian at \(x\) to vector \(u\) in direction \(v\), according to \( v \mapsto c''(x)(v,\cdot)^*u \). More...
 
virtual std::vector< Real > solveAugmentedSystem (Vector< Real > &v1, Vector< Real > &v2, const Vector< Real > &b1, const Vector< Real > &b2, const Vector< Real > &x, Real &tol)
 Approximately solves the augmented system

\[ \begin{pmatrix} I & c'(x)^* \\ c'(x) & 0 \end{pmatrix} \begin{pmatrix} v_{1} \\ v_{2} \end{pmatrix} = \begin{pmatrix} b_{1} \\ b_{2} \end{pmatrix} \]

where \(v_{1} \in \mathcal{X}\), \(v_{2} \in \mathcal{C}^*\), \(b_{1} \in \mathcal{X}^*\), \(b_{2} \in \mathcal{C}\), \(I : \mathcal{X} \rightarrow \mathcal{X}^*\) is an identity or Riesz operator, and \(0 : \mathcal{C}^* \rightarrow \mathcal{C}\) is a zero operator. More...

 
virtual void applyPreconditioner (Vector< Real > &pv, const Vector< Real > &v, const Vector< Real > &x, const Vector< Real > &g, Real &tol)
 Apply a constraint preconditioner at \(x\), \(P(x) \in L(\mathcal{C}, \mathcal{C}^*)\), to vector \(v\). Ideally, this preconditioner satisfies the following relationship:

\[ \left[c'(x) \circ R \circ c'(x)^* \circ P(x)\right] v = v \,, \]

where R is the appropriate Riesz map in \(L(\mathcal{X}^*, \mathcal{X})\). It is used by the solveAugmentedSystem method. More...

 
void activate (void)
 Turn on constraints. More...
 
void deactivate (void)
 Turn off constraints. More...
 
bool isActivated (void)
 Check if constraints are on. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyJacobian (const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &jv, const std::vector< Real > &steps, const bool printToStream=true, std::ostream &outStream=std::cout, const int order=1)
 Finite-difference check for the constraint Jacobian application. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyJacobian (const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &jv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
 Finite-difference check for the constraint Jacobian application. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyAdjointJacobian (const Vector< Real > &x, const Vector< Real > &v, const Vector< Real > &c, const Vector< Real > &ajv, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS)
 Finite-difference check for the application of the adjoint of constraint Jacobian. More...
 
virtual Real checkAdjointConsistencyJacobian (const Vector< Real > &w, const Vector< Real > &v, const Vector< Real > &x, const bool printToStream=true, std::ostream &outStream=std::cout)
 
virtual Real checkAdjointConsistencyJacobian (const Vector< Real > &w, const Vector< Real > &v, const Vector< Real > &x, const Vector< Real > &dualw, const Vector< Real > &dualv, const bool printToStream=true, std::ostream &outStream=std::cout)
 
virtual std::vector
< std::vector< Real > > 
checkApplyAdjointHessian (const Vector< Real > &x, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &hv, const std::vector< Real > &step, const bool printToScreen=true, std::ostream &outStream=std::cout, const int order=1)
 Finite-difference check for the application of the adjoint of constraint Hessian. More...
 
virtual std::vector
< std::vector< Real > > 
checkApplyAdjointHessian (const Vector< Real > &x, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &hv, const bool printToScreen=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
 Finite-difference check for the application of the adjoint of constraint Hessian. More...
 
virtual void setParameter (const std::vector< Real > &param)
 

Private Types

typedef Vector< Real > V
 
typedef PartitionedVector< Real > PV
 
typedef Objective< Real > OBJ
 
typedef Constraint< Real > CON
 
typedef PV::size_type size_type
 
typedef Vector< Real > V
 
typedef PartitionedVector< Real > PV
 
typedef Objective< Real > OBJ
 
typedef Constraint< Real > CON
 
typedef PV::size_type size_type
 

Private Attributes

ROL::Ptr< OBJobj_
 
ROL::Ptr< CONeqcon_
 
ROL::Ptr< CONincon_
 
ROL::Ptr< Vqo_
 
ROL::Ptr< Vqs_
 
ROL::Ptr< Vqe_
 
ROL::Ptr< Vqi_
 
Real mu_
 
ROL::Ptr< LinearOperator< Real > > sym_
 

Static Private Attributes

static const size_type OPT = 0
 
static const size_type SLACK = 1
 
static const size_type EQUAL = 2
 
static const size_type INEQ = 3
 

Additional Inherited Members

- Protected Member Functions inherited from ROL::Constraint< Real >
const std::vector< Real > getParameter (void) const
 

Detailed Description

template<class Real>
class ROL::InteriorPoint::PrimalDualResidual< Real >

Express the Primal-Dual Interior Point gradient as an equality constraint.

     See Nocedal & Wright second edition equation (19.6)
     In that book the convention for naming components

     x - optimization variable (here subscript o)
     s - slack variable (here subscript s)
     y - Lagrange multiplier for the equality constraint (here subscript e)
     z - Lagrange multiplier for the inequality constraint (here subscript i)

Definition at line 42 of file interiorpoint/ROL_InteriorPointPrimalDualResidual.hpp.

Member Typedef Documentation

template<class Real >
typedef Vector<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::V
private
template<class Real >
typedef PartitionedVector<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::PV
private
template<class Real >
typedef Objective<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::OBJ
private
template<class Real >
typedef Constraint<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::CON
private
template<class Real >
typedef PV::size_type ROL::InteriorPoint::PrimalDualResidual< Real >::size_type
private
template<class Real >
typedef Vector<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::V
private

Definition at line 45 of file ROL_InteriorPointPrimalDualResidual.hpp.

template<class Real >
typedef PartitionedVector<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::PV
private

Definition at line 46 of file ROL_InteriorPointPrimalDualResidual.hpp.

template<class Real >
typedef Objective<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::OBJ
private

Definition at line 47 of file ROL_InteriorPointPrimalDualResidual.hpp.

template<class Real >
typedef Constraint<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::CON
private

Definition at line 48 of file ROL_InteriorPointPrimalDualResidual.hpp.

template<class Real >
typedef PV::size_type ROL::InteriorPoint::PrimalDualResidual< Real >::size_type
private

Definition at line 51 of file ROL_InteriorPointPrimalDualResidual.hpp.

Constructor & Destructor Documentation

template<class Real >
ROL::InteriorPoint::PrimalDualResidual< Real >::PrimalDualResidual ( const ROL::Ptr< OBJ > &  obj,
const ROL::Ptr< CON > &  eqcon,
const ROL::Ptr< CON > &  incon,
const V x 
)
inline
template<class Real >
ROL::InteriorPoint::PrimalDualResidual< Real >::PrimalDualResidual ( const ROL::Ptr< OBJ > &  obj,
const ROL::Ptr< CON > &  eqcon,
const ROL::Ptr< CON > &  incon,
const V x 
)
inline

Member Function Documentation

template<class Real >
void ROL::InteriorPoint::PrimalDualResidual< Real >::value ( V c,
const V x,
Real &  tol 
)
inlinevirtual

Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\).

Parameters
[out]cis the result of evaluating the constraint operator at x; a constraint-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \(\mathsf{c} = c(x)\), where \(\mathsf{c} \in \mathcal{C}\), \(\mathsf{x} \in \mathcal{X}\).


Implements ROL::Constraint< Real >.

Definition at line 93 of file interiorpoint/ROL_InteriorPointPrimalDualResidual.hpp.

References ROL::InteriorPoint::PrimalDualResidual< Real >::eqcon_, ROL::InteriorPoint::PrimalDualResidual< Real >::EQUAL, ROL::PartitionedVector< Real >::get(), ROL::InteriorPoint::PrimalDualResidual< Real >::incon_, ROL::InteriorPoint::PrimalDualResidual< Real >::INEQ, ROL::InteriorPoint::PrimalDualResidual< Real >::mu_, ROL::InteriorPoint::PrimalDualResidual< Real >::obj_, ROL::InteriorPoint::PrimalDualResidual< Real >::OPT, ROL::InteriorPoint::PrimalDualResidual< Real >::qo_, ROL::InteriorPoint::PrimalDualResidual< Real >::qs_, ROL::InteriorPoint::PrimalDualResidual< Real >::SLACK, ROL::InteriorPoint::PrimalDualResidual< Real >::sym_, and ROL::Vector< Real >::zero().

template<class Real >
void ROL::InteriorPoint::PrimalDualResidual< Real >::applyJacobian ( V jv,
const V v,
const V x,
Real &  tol 
)
inlinevirtual

Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\).

  @param[out]      jv  is the result of applying the constraint Jacobian to @b v at @b x; a constraint-space vector
  @param[in]       v   is an optimization-space vector
  @param[in]       x   is the constraint argument; an optimization-space vector
  @param[in,out]   tol is a tolerance for inexact evaluations; currently unused

  On return, \form#91, where

\(v \in \mathcal{X}\), \(\mathsf{jv} \in \mathcal{C}\).

The default implementation is a finite-difference approximation.


Reimplemented from ROL::Constraint< Real >.

Definition at line 147 of file interiorpoint/ROL_InteriorPointPrimalDualResidual.hpp.

References ROL::InteriorPoint::PrimalDualResidual< Real >::eqcon_, ROL::InteriorPoint::PrimalDualResidual< Real >::EQUAL, ROL::PartitionedVector< Real >::get(), ROL::InteriorPoint::PrimalDualResidual< Real >::incon_, ROL::InteriorPoint::PrimalDualResidual< Real >::INEQ, ROL::InteriorPoint::PrimalDualResidual< Real >::obj_, ROL::InteriorPoint::PrimalDualResidual< Real >::OPT, ROL::InteriorPoint::PrimalDualResidual< Real >::qo_, ROL::InteriorPoint::PrimalDualResidual< Real >::qs_, ROL::InteriorPoint::PrimalDualResidual< Real >::SLACK, ROL::InteriorPoint::PrimalDualResidual< Real >::sym_, and ROL::Vector< Real >::zero().

template<class Real >
void ROL::InteriorPoint::PrimalDualResidual< Real >::updatePenalty ( Real  mu)
inline
template<class Real >
void ROL::InteriorPoint::PrimalDualResidual< Real >::value ( V c,
const V x,
Real &  tol 
)
inlinevirtual

Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\).

Parameters
[out]cis the result of evaluating the constraint operator at x; a constraint-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \(\mathsf{c} = c(x)\), where \(\mathsf{c} \in \mathcal{C}\), \(\mathsf{x} \in \mathcal{X}\).


Implements ROL::Constraint< Real >.

Definition at line 93 of file ROL_InteriorPointPrimalDualResidual.hpp.

References ROL::InteriorPoint::PrimalDualResidual< Real >::eqcon_, ROL::InteriorPoint::PrimalDualResidual< Real >::EQUAL, ROL::PartitionedVector< Real >::get(), ROL::InteriorPoint::PrimalDualResidual< Real >::incon_, ROL::InteriorPoint::PrimalDualResidual< Real >::INEQ, ROL::InteriorPoint::PrimalDualResidual< Real >::mu_, ROL::InteriorPoint::PrimalDualResidual< Real >::obj_, ROL::InteriorPoint::PrimalDualResidual< Real >::OPT, ROL::InteriorPoint::PrimalDualResidual< Real >::qo_, ROL::InteriorPoint::PrimalDualResidual< Real >::qs_, ROL::InteriorPoint::PrimalDualResidual< Real >::SLACK, ROL::InteriorPoint::PrimalDualResidual< Real >::sym_, and ROL::Vector< Real >::zero().

template<class Real >
void ROL::InteriorPoint::PrimalDualResidual< Real >::applyJacobian ( V jv,
const V v,
const V x,
Real &  tol 
)
inlinevirtual

Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\).

  @param[out]      jv  is the result of applying the constraint Jacobian to @b v at @b x; a constraint-space vector
  @param[in]       v   is an optimization-space vector
  @param[in]       x   is the constraint argument; an optimization-space vector
  @param[in,out]   tol is a tolerance for inexact evaluations; currently unused

  On return, \form#91, where

\(v \in \mathcal{X}\), \(\mathsf{jv} \in \mathcal{C}\).

The default implementation is a finite-difference approximation.


Reimplemented from ROL::Constraint< Real >.

Definition at line 147 of file ROL_InteriorPointPrimalDualResidual.hpp.

References ROL::InteriorPoint::PrimalDualResidual< Real >::eqcon_, ROL::InteriorPoint::PrimalDualResidual< Real >::EQUAL, ROL::PartitionedVector< Real >::get(), ROL::InteriorPoint::PrimalDualResidual< Real >::incon_, ROL::InteriorPoint::PrimalDualResidual< Real >::INEQ, ROL::InteriorPoint::PrimalDualResidual< Real >::obj_, ROL::InteriorPoint::PrimalDualResidual< Real >::OPT, ROL::InteriorPoint::PrimalDualResidual< Real >::qo_, ROL::InteriorPoint::PrimalDualResidual< Real >::qs_, ROL::InteriorPoint::PrimalDualResidual< Real >::SLACK, ROL::InteriorPoint::PrimalDualResidual< Real >::sym_, and ROL::Vector< Real >::zero().

template<class Real >
void ROL::InteriorPoint::PrimalDualResidual< Real >::updatePenalty ( Real  mu)
inline

Member Data Documentation

template<class Real >
ROL::Ptr< OBJ > ROL::InteriorPoint::PrimalDualResidual< Real >::obj_
private
template<class Real >
ROL::Ptr< CON > ROL::InteriorPoint::PrimalDualResidual< Real >::eqcon_
private
template<class Real >
ROL::Ptr< CON > ROL::InteriorPoint::PrimalDualResidual< Real >::incon_
private
template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qo_
private
template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qs_
private
template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qe_
private
template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qi_
private
template<class Real >
Real ROL::InteriorPoint::PrimalDualResidual< Real >::mu_
private
template<class Real >
ROL::Ptr< LinearOperator< Real > > ROL::InteriorPoint::PrimalDualResidual< Real >::sym_
private
template<class Real >
static const size_type ROL::InteriorPoint::PrimalDualResidual< Real >::OPT = 0
staticprivate
template<class Real >
static const size_type ROL::InteriorPoint::PrimalDualResidual< Real >::SLACK = 1
staticprivate
template<class Real >
static const size_type ROL::InteriorPoint::PrimalDualResidual< Real >::EQUAL = 2
staticprivate
template<class Real >
static const size_type ROL::InteriorPoint::PrimalDualResidual< Real >::INEQ = 3
staticprivate

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