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

Has both inequality and equality constraints. Treat inequality constraint as equality with slack variable. More...

#include <ROL_Constraint_Partitioned.hpp>

+ Inheritance diagram for ROL::Constraint_Partitioned< Real >:

Public Member Functions

 Constraint_Partitioned (const std::vector< Ptr< Constraint< Real >>> &cvec, bool isInequality=false, int offset=0)
 
 Constraint_Partitioned (const std::vector< Ptr< Constraint< Real >>> &cvec, std::vector< bool > isInequality, int offset=0)
 
int getNumberConstraintEvaluations (void) const
 
Ptr< Constraint< Real > > get (int ind=0) const
 
void update (const Vector< Real > &x, UpdateType type, int iter=-1) override
 Update constraint function. More...
 
void update (const Vector< Real > &x, bool flag=true, int iter=-1) override
 Update constraint functions.
x is the optimization variable, flag = true if optimization variable is changed, iter is the outer algorithm iterations count. More...
 
void value (Vector< Real > &c, const Vector< Real > &x, Real &tol) override
 Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\). More...
 
void applyJacobian (Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
 Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\). More...
 
void applyAdjointJacobian (Vector< Real > &ajv, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
 Apply the adjoint of the the constraint Jacobian at \(x\), \(c'(x)^* \in L(\mathcal{C}^*, \mathcal{X}^*)\), to vector \(v\). More...
 
void applyAdjointHessian (Vector< Real > &ahuv, const Vector< Real > &u, const Vector< Real > &v, const Vector< Real > &x, Real &tol) override
 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 void applyPreconditioner (Vector< Real > &pv, const Vector< Real > &v, const Vector< Real > &x, const Vector< Real > &g, Real &tol) override
 Apply a constraint preconditioner at \(x\), \(P(x) \in L(\mathcal{C}, \mathcal{C}^*)\), to vector \(v\). Ideally, this preconditioner satisfies the following relationship: More...
 
void setParameter (const std::vector< Real > &param) override
 
- Public Member Functions inherited from ROL::Constraint< Real >
virtual ~Constraint (void)
 
 Constraint (void)
 
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 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 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...
 

Private Member Functions

Vector< Real > & getOpt (Vector< Real > &xs) const
 
const Vector< Real > & getOpt (const Vector< Real > &xs) const
 
Vector< Real > & getSlack (Vector< Real > &xs, int ind) const
 
const Vector< Real > & getSlack (const Vector< Real > &xs, int ind) const
 

Private Attributes

std::vector< Ptr< Constraint< Real > > > cvec_
 
std::vector< bool > isInequality_
 
const int offset_
 
Ptr< Vector< Real > > scratch_
 
int ncval_
 
bool initialized_
 

Additional Inherited Members

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

Detailed Description

template<typename Real>
class ROL::Constraint_Partitioned< Real >

Has both inequality and equality constraints. Treat inequality constraint as equality with slack variable.

Definition at line 56 of file ROL_Constraint_Partitioned.hpp.

Constructor & Destructor Documentation

◆ Constraint_Partitioned() [1/2]

template<typename Real >
ROL::Constraint_Partitioned< Real >::Constraint_Partitioned ( const std::vector< Ptr< Constraint< Real >>> &  cvec,
bool  isInequality = false,
int  offset = 0 
)

◆ Constraint_Partitioned() [2/2]

template<typename Real >
ROL::Constraint_Partitioned< Real >::Constraint_Partitioned ( const std::vector< Ptr< Constraint< Real >>> &  cvec,
std::vector< bool >  isInequality,
int  offset = 0 
)

Definition at line 56 of file ROL_Constraint_Partitioned_Def.hpp.

Member Function Documentation

◆ getNumberConstraintEvaluations()

template<typename Real >
int ROL::Constraint_Partitioned< Real >::getNumberConstraintEvaluations ( void  ) const

Definition at line 63 of file ROL_Constraint_Partitioned_Def.hpp.

◆ get()

template<typename Real >
Ptr< Constraint< Real > > ROL::Constraint_Partitioned< Real >::get ( int  ind = 0) const

Definition at line 68 of file ROL_Constraint_Partitioned_Def.hpp.

◆ update() [1/2]

template<typename Real >
void ROL::Constraint_Partitioned< Real >::update ( const Vector< Real > &  x,
UpdateType  type,
int  iter = -1 
)
overridevirtual

Update constraint function.

This function updates the constraint function at new iterations.

Parameters
[in]xis the new iterate.
[in]typeis the type of update requested.
[in]iteris the outer algorithm iterations count.

Reimplemented from ROL::Constraint< Real >.

Definition at line 76 of file ROL_Constraint_Partitioned_Def.hpp.

◆ update() [2/2]

template<typename Real >
void ROL::Constraint_Partitioned< Real >::update ( const Vector< Real > &  x,
bool  flag = true,
int  iter = -1 
)
overridevirtual

Update constraint functions.
x is the optimization variable, flag = true if optimization variable is changed, iter is the outer algorithm iterations count.

Reimplemented from ROL::Constraint< Real >.

Definition at line 84 of file ROL_Constraint_Partitioned_Def.hpp.

◆ value()

template<typename Real >
void ROL::Constraint_Partitioned< Real >::value ( Vector< Real > &  c,
const Vector< Real > &  x,
Real &  tol 
)
overridevirtual

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 92 of file ROL_Constraint_Partitioned_Def.hpp.

References ROL::PartitionedVector< Real >::get().

◆ applyJacobian()

template<typename Real >
void ROL::Constraint_Partitioned< Real >::applyJacobian ( Vector< Real > &  jv,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
overridevirtual

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 109 of file ROL_Constraint_Partitioned_Def.hpp.

References ROL::PartitionedVector< Real >::get().

◆ applyAdjointJacobian()

template<typename Real >
void ROL::Constraint_Partitioned< Real >::applyAdjointJacobian ( Vector< Real > &  ajv,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
overridevirtual

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

Parameters
[out]ajvis the result of applying the adjoint of the constraint Jacobian to v at x; a dual optimization-space vector
[in]vis a dual 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{ajv} = c'(x)^*v\), where \(v \in \mathcal{C}^*\), \(\mathsf{ajv} \in \mathcal{X}^*\).

The default implementation is a finite-difference approximation.


Reimplemented from ROL::Constraint< Real >.

Definition at line 128 of file ROL_Constraint_Partitioned_Def.hpp.

References ROL::PartitionedVector< Real >::get(), and ROL::PartitionedVector< Real >::zero().

◆ applyAdjointHessian()

template<typename Real >
void ROL::Constraint_Partitioned< Real >::applyAdjointHessian ( Vector< Real > &  ahuv,
const Vector< Real > &  u,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
overridevirtual

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

Parameters
[out]ahuvis the result of applying the derivative of the adjoint of the constraint Jacobian at x to vector u in direction v; a dual optimization-space vector
[in]uis the direction vector; a dual 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{ahuv} = c''(x)(v,\cdot)^*u \), where \(u \in \mathcal{C}^*\), \(v \in \mathcal{X}\), and \(\mathsf{ahuv} \in \mathcal{X}^*\).

The default implementation is a finite-difference approximation based on the adjoint Jacobian.


Reimplemented from ROL::Constraint< Real >.

Definition at line 156 of file ROL_Constraint_Partitioned_Def.hpp.

References ROL::PartitionedVector< Real >::get(), and ROL::PartitionedVector< Real >::zero().

◆ applyPreconditioner()

template<typename Real >
void ROL::Constraint_Partitioned< Real >::applyPreconditioner ( Vector< Real > &  pv,
const Vector< Real > &  v,
const Vector< Real > &  x,
const Vector< Real > &  g,
Real &  tol 
)
overridevirtual

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.

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

On return, \(\mathsf{pv} = P(x)v\), where \(v \in \mathcal{C}\), \(\mathsf{pv} \in \mathcal{C}^*\).

The default implementation is the Riesz map in \(L(\mathcal{C}, \mathcal{C}^*)\).


Reimplemented from ROL::Constraint< Real >.

Definition at line 185 of file ROL_Constraint_Partitioned_Def.hpp.

References ROL::PartitionedVector< Real >::get().

◆ setParameter()

template<typename Real >
void ROL::Constraint_Partitioned< Real >::setParameter ( const std::vector< Real > &  param)
overridevirtual

◆ getOpt() [1/2]

template<typename Real >
Vector< Real > & ROL::Constraint_Partitioned< Real >::getOpt ( Vector< Real > &  xs) const
private

Definition at line 211 of file ROL_Constraint_Partitioned_Def.hpp.

◆ getOpt() [2/2]

template<typename Real >
const Vector< Real > & ROL::Constraint_Partitioned< Real >::getOpt ( const Vector< Real > &  xs) const
private

Definition at line 221 of file ROL_Constraint_Partitioned_Def.hpp.

◆ getSlack() [1/2]

template<typename Real >
Vector< Real > & ROL::Constraint_Partitioned< Real >::getSlack ( Vector< Real > &  xs,
int  ind 
) const
private

Definition at line 231 of file ROL_Constraint_Partitioned_Def.hpp.

◆ getSlack() [2/2]

template<typename Real >
const Vector< Real > & ROL::Constraint_Partitioned< Real >::getSlack ( const Vector< Real > &  xs,
int  ind 
) const
private

Definition at line 236 of file ROL_Constraint_Partitioned_Def.hpp.

Member Data Documentation

◆ cvec_

template<typename Real >
std::vector<Ptr<Constraint<Real> > > ROL::Constraint_Partitioned< Real >::cvec_
private

Definition at line 58 of file ROL_Constraint_Partitioned.hpp.

◆ isInequality_

template<typename Real >
std::vector<bool> ROL::Constraint_Partitioned< Real >::isInequality_
private

◆ offset_

template<typename Real >
const int ROL::Constraint_Partitioned< Real >::offset_
private

Definition at line 60 of file ROL_Constraint_Partitioned.hpp.

◆ scratch_

template<typename Real >
Ptr<Vector<Real> > ROL::Constraint_Partitioned< Real >::scratch_
private

Definition at line 61 of file ROL_Constraint_Partitioned.hpp.

◆ ncval_

template<typename Real >
int ROL::Constraint_Partitioned< Real >::ncval_
private

Definition at line 62 of file ROL_Constraint_Partitioned.hpp.

◆ initialized_

template<typename Real >
bool ROL::Constraint_Partitioned< Real >::initialized_
private

Definition at line 63 of file ROL_Constraint_Partitioned.hpp.


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