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\).
 
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\).
 
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\).
 
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\).
 
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.
 
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.
 
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\).
 
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\).
 
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 \).
 
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
 
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:
 
void activate (void)
 Turn on constraints.
 
void deactivate (void)
 Turn off constraints.
 
bool isActivated (void)
 Check if constraints are on.
 
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.
 
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.
 
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.
 
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.
 
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.
 
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)

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 77 of file interiorpoint/ROL_InteriorPointPrimalDualResidual.hpp.

Member Typedef Documentation

◆ V [1/2]

template<class Real >
typedef Vector<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::V
private

◆ PV [1/2]

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

◆ OBJ [1/2]

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

◆ CON [1/2]

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

◆ size_type [1/2]

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

◆ V [2/2]

template<class Real >
typedef Vector<Real> ROL::InteriorPoint::PrimalDualResidual< Real >::V
private

Definition at line 80 of file ROL_InteriorPointPrimalDualResidual.hpp.

◆ PV [2/2]

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

Definition at line 81 of file ROL_InteriorPointPrimalDualResidual.hpp.

◆ OBJ [2/2]

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

Definition at line 82 of file ROL_InteriorPointPrimalDualResidual.hpp.

◆ CON [2/2]

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

Definition at line 83 of file ROL_InteriorPointPrimalDualResidual.hpp.

◆ size_type [2/2]

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

Definition at line 86 of file ROL_InteriorPointPrimalDualResidual.hpp.

Constructor & Destructor Documentation

◆ PrimalDualResidual() [1/2]

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

◆ PrimalDualResidual() [2/2]

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

◆ value() [1/2]

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 128 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().

◆ applyJacobian() [1/2]

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\).

Parameters
[out]jvis the result of applying the constraint Jacobian to v at x; a constraint-space vector
[in]vis an optimization-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \(\mathsf{jv} = c'(x)v\), 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 182 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().

◆ updatePenalty() [1/2]

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

◆ value() [2/2]

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 128 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().

◆ applyJacobian() [2/2]

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\).

Parameters
[out]jvis the result of applying the constraint Jacobian to v at x; a constraint-space vector
[in]vis an optimization-space vector
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis a tolerance for inexact evaluations; currently unused

On return, \(\mathsf{jv} = c'(x)v\), 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 182 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().

◆ updatePenalty() [2/2]

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

Member Data Documentation

◆ obj_

template<class Real >
ROL::Ptr< OBJ > ROL::InteriorPoint::PrimalDualResidual< Real >::obj_
private

◆ eqcon_

template<class Real >
ROL::Ptr< CON > ROL::InteriorPoint::PrimalDualResidual< Real >::eqcon_
private

◆ incon_

template<class Real >
ROL::Ptr< CON > ROL::InteriorPoint::PrimalDualResidual< Real >::incon_
private

◆ qo_

template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qo_
private

◆ qs_

template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qs_
private

◆ qe_

template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qe_
private

◆ qi_

template<class Real >
ROL::Ptr< V > ROL::InteriorPoint::PrimalDualResidual< Real >::qi_
private

◆ mu_

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

◆ sym_

template<class Real >
ROL::Ptr< LinearOperator< Real > > ROL::InteriorPoint::PrimalDualResidual< Real >::sym_
private

◆ OPT

template<class Real >
static const size_type ROL::InteriorPoint::PrimalDualResidual< Real >::OPT = 0
staticprivate

◆ SLACK

template<class Real >
static const size_type ROL::InteriorPoint::PrimalDualResidual< Real >::SLACK = 1
staticprivate

◆ EQUAL

template<class Real >
static const size_type ROL::InteriorPoint::PrimalDualResidual< Real >::EQUAL = 2
staticprivate

◆ INEQ

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: