ROL
Public Member Functions | List of all members
ROL::StdConstraint< Real > Class Template Referenceabstract

Defines the equality constraint operator interface for StdVectors. More...

#include <ROL_StdConstraint.hpp>

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

Public Member Functions

virtual ~StdConstraint ()
 
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 update (const std::vector< Real > &x, bool flag=true, int iter=-1)
 
void value (Vector< Real > &c, const Vector< Real > &x, Real &tol)
 Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\). More...
 
virtual void value (std::vector< Real > &c, const std::vector< Real > &x, Real &tol)=0
 
void applyJacobian (Vector< Real > &jv, const Vector< Real > &v, const Vector< Real > &x, Real &tol)
 Apply the constraint Jacobian at \(x\), \(c'(x) \in L(\mathcal{X}, \mathcal{C})\), to vector \(v\). More...
 
virtual void applyJacobian (std::vector< Real > &jv, const std::vector< Real > &v, const std::vector< Real > &x, Real &tol)
 
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 (std::vector< Real > &ajv, const std::vector< Real > &v, const std::vector< Real > &x, Real &tol)
 
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 void applyAdjointHessian (std::vector< Real > &ahuv, const std::vector< Real > &u, const std::vector< Real > &v, const std::vector< Real > &x, Real &tol)
 
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 std::vector< Real > solveAugmentedSystem (std::vector< Real > &v1, std::vector< Real > &v2, const std::vector< Real > &b1, const std::vector< Real > &b2, const std::vector< Real > &x, Real tol)
 
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...

 
virtual void applyPreconditioner (std::vector< Real > &pv, const std::vector< Real > &v, const std::vector< Real > &x, const std::vector< Real > &g, Real &tol)
 
- 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...
 
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)
 

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::StdConstraint< Real >

Defines the equality constraint operator interface for StdVectors.

Definition at line 59 of file ROL_StdConstraint.hpp.

Constructor & Destructor Documentation

template<class Real >
virtual ROL::StdConstraint< Real >::~StdConstraint ( )
inlinevirtual

Definition at line 62 of file ROL_StdConstraint.hpp.

Member Function Documentation

template<class Real >
void ROL::StdConstraint< Real >::update ( const Vector< Real > &  x,
bool  flag = true,
int  iter = -1 
)
inlinevirtual

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 66 of file ROL_StdConstraint.hpp.

References ROL::StdVector< Real, Element >::getVector().

template<class Real >
virtual void ROL::StdConstraint< Real >::update ( const std::vector< Real > &  x,
bool  flag = true,
int  iter = -1 
)
inlinevirtual

Definition at line 71 of file ROL_StdConstraint.hpp.

template<class Real >
void ROL::StdConstraint< Real >::value ( Vector< Real > &  c,
const Vector< Real > &  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 75 of file ROL_StdConstraint.hpp.

References ROL::StdVector< Real, Element >::getVector().

template<class Real >
virtual void ROL::StdConstraint< Real >::value ( std::vector< Real > &  c,
const std::vector< Real > &  x,
Real &  tol 
)
pure virtual
template<class Real >
void ROL::StdConstraint< Real >::applyJacobian ( Vector< Real > &  jv,
const Vector< Real > &  v,
const Vector< Real > &  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#76, 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 87 of file ROL_StdConstraint.hpp.

References ROL::Constraint< Real >::applyJacobian(), and ROL::StdVector< Real, Element >::getVector().

template<class Real >
virtual void ROL::StdConstraint< Real >::applyJacobian ( std::vector< Real > &  jv,
const std::vector< Real > &  v,
const std::vector< Real > &  x,
Real &  tol 
)
inlinevirtual
template<class Real >
void ROL::StdConstraint< Real >::applyAdjointJacobian ( Vector< Real > &  ajv,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
inlinevirtual

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

  @param[out]      ajv is the result of applying the adjoint of the constraint Jacobian to @b v at @b x; a dual optimization-space vector
  @param[in]       v   is a dual constraint-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#80, 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 109 of file ROL_StdConstraint.hpp.

References ROL::Constraint< Real >::applyAdjointJacobian(), and ROL::StdVector< Real, Element >::getVector().

template<class Real >
virtual void ROL::StdConstraint< Real >::applyAdjointJacobian ( std::vector< Real > &  ajv,
const std::vector< Real > &  v,
const std::vector< Real > &  x,
Real &  tol 
)
inlinevirtual
template<class Real >
void ROL::StdConstraint< Real >::applyAdjointHessian ( Vector< Real > &  ahuv,
const Vector< Real > &  u,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
inlinevirtual

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

  @param[out]      ahuv is the result of applying the derivative of the adjoint of the constraint Jacobian at @b x to vector @b u in direction @b v; a dual optimization-space vector
  @param[in]       u    is the direction vector; a dual 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#85, 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 131 of file ROL_StdConstraint.hpp.

References ROL::Constraint< Real >::applyAdjointHessian(), and ROL::StdVector< Real, Element >::getVector().

template<class Real >
virtual void ROL::StdConstraint< Real >::applyAdjointHessian ( std::vector< Real > &  ahuv,
const std::vector< Real > &  u,
const std::vector< Real > &  v,
const std::vector< Real > &  x,
Real &  tol 
)
inlinevirtual

Definition at line 147 of file ROL_StdConstraint.hpp.

template<class Real >
std::vector<Real> ROL::StdConstraint< Real >::solveAugmentedSystem ( Vector< Real > &  v1,
Vector< Real > &  v2,
const Vector< Real > &  b1,
const Vector< Real > &  b2,
const Vector< Real > &  x,
Real &  tol 
)
inlinevirtual

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.

Parameters
[out]v1is the optimization-space component of the result
[out]v2is the dual constraint-space component of the result
[in]b1is the dual optimization-space component of the right-hand side
[in]b2is the constraint-space component of the right-hand side
[in]xis the constraint argument; an optimization-space vector
[in,out]tolis the nominal relative residual tolerance

On return, \( [\mathsf{v1} \,\, \mathsf{v2}] \) approximately solves the augmented system, where the size of the residual is governed by special stopping conditions.

The default implementation is the preconditioned generalized minimal residual (GMRES) method, which enables the use of nonsymmetric preconditioners.


Reimplemented from ROL::Constraint< Real >.

Definition at line 158 of file ROL_StdConstraint.hpp.

References ROL::StdVector< Real, Element >::getVector(), and ROL::Constraint< Real >::solveAugmentedSystem().

template<class Real >
virtual std::vector<Real> ROL::StdConstraint< Real >::solveAugmentedSystem ( std::vector< Real > &  v1,
std::vector< Real > &  v2,
const std::vector< Real > &  b1,
const std::vector< Real > &  b2,
const std::vector< Real > &  x,
Real  tol 
)
inlinevirtual

Definition at line 175 of file ROL_StdConstraint.hpp.

template<class Real >
void ROL::StdConstraint< Real >::applyPreconditioner ( Vector< Real > &  pv,
const Vector< Real > &  v,
const Vector< Real > &  x,
const Vector< Real > &  g,
Real &  tol 
)
inlinevirtual

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.

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

  On return, \form#99, 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_StdConstraint.hpp.

References ROL::Constraint< Real >::applyPreconditioner(), and ROL::StdVector< Real, Element >::getVector().

template<class Real >
virtual void ROL::StdConstraint< Real >::applyPreconditioner ( std::vector< Real > &  pv,
const std::vector< Real > &  v,
const std::vector< Real > &  x,
const std::vector< Real > &  g,
Real &  tol 
)
inlinevirtual

Definition at line 200 of file ROL_StdConstraint.hpp.


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