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

Defines a constaint formed through function composition \(c(x)=c_o(c_i(x))\). More...

#include <ROL_ChainRuleConstraint.hpp>

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

Public Member Functions

 ChainRuleConstraint (const Ptr< Constraint< Real >> &outer_con, const Ptr< Constraint< Real >> &inner_con, const Vector< Real > &x, const Vector< Real > &lag_inner)
 
virtual ~ChainRuleConstraint ()=default
 
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, 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 value (Vector< Real > &c, const Vector< Real > &x, Real &tol) override
 Evaluate the constraint operator \(c:\mathcal{X} \rightarrow \mathcal{C}\) at \(x\). More...
 
virtual 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...
 
virtual void applyAdjointJacobian (Vector< Real > &ajl, const Vector< Real > &l, 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...
 
virtual void applyAdjointHessian (Vector< Real > &ahlv, const Vector< Real > &l, 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...
 
- 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

\[ \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 Attributes

const Ptr< Constraint< Real > > outer_con_
 
const Ptr< Constraint< Real > > inner_con_
 
Ptr< Vector< Real > > y_
 
Ptr< Vector< Real > > Jiv_
 
Ptr< Vector< Real > > aJol_
 
Ptr< Vector< Real > > HiaJol_
 
Ptr< Vector< Real > > HolJiv_
 
Real tol_
 

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

Defines a constaint formed through function composition \(c(x)=c_o(c_i(x))\).

\(c_i\mathcal{X}\to\mathcal{Y}\) and \(c_o:\mathcal{Y}\to\mathcal{Z}\)

It is assumed that both $c_i$ and $c_o$ both of ROL::Constraint type, are

twice differentiable and that that the range of $c_i$ is in the domain of $c_o$.

Definition at line 30 of file ROL_ChainRuleConstraint.hpp.

Constructor & Destructor Documentation

template<typename Real >
ROL::ChainRuleConstraint< Real >::ChainRuleConstraint ( const Ptr< Constraint< Real >> &  outer_con,
const Ptr< Constraint< Real >> &  inner_con,
const Vector< Real > &  x,
const Vector< Real > &  lag_inner 
)
inline

Definition at line 33 of file ROL_ChainRuleConstraint.hpp.

template<typename Real >
virtual ROL::ChainRuleConstraint< Real >::~ChainRuleConstraint ( )
virtualdefault

Member Function Documentation

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

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 48 of file ROL_ChainRuleConstraint.hpp.

References ROL::ChainRuleConstraint< Real >::inner_con_, ROL::ChainRuleConstraint< Real >::outer_con_, ROL::ChainRuleConstraint< Real >::tol_, and ROL::ChainRuleConstraint< Real >::y_.

template<typename Real >
virtual void ROL::ChainRuleConstraint< Real >::update ( const Vector< Real > &  x,
bool  flag,
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 56 of file ROL_ChainRuleConstraint.hpp.

References ROL::ChainRuleConstraint< Real >::inner_con_, ROL::ChainRuleConstraint< Real >::outer_con_, ROL::ChainRuleConstraint< Real >::tol_, and ROL::ChainRuleConstraint< Real >::y_.

template<typename Real >
virtual void ROL::ChainRuleConstraint< Real >::value ( Vector< Real > &  c,
const Vector< Real > &  x,
Real &  tol 
)
inlineoverridevirtual

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 64 of file ROL_ChainRuleConstraint.hpp.

References ROL::ChainRuleConstraint< Real >::inner_con_, ROL::ChainRuleConstraint< Real >::outer_con_, and ROL::ChainRuleConstraint< Real >::y_.

template<typename Real >
virtual void ROL::ChainRuleConstraint< Real >::applyJacobian ( Vector< Real > &  jv,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
inlineoverridevirtual

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 71 of file ROL_ChainRuleConstraint.hpp.

References ROL::ChainRuleConstraint< Real >::inner_con_, ROL::ChainRuleConstraint< Real >::Jiv_, ROL::ChainRuleConstraint< Real >::outer_con_, and ROL::ChainRuleConstraint< Real >::y_.

template<typename Real >
virtual void ROL::ChainRuleConstraint< Real >::applyAdjointJacobian ( Vector< Real > &  ajv,
const Vector< Real > &  v,
const Vector< Real > &  x,
Real &  tol 
)
inlineoverridevirtual

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#95, 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 80 of file ROL_ChainRuleConstraint.hpp.

References ROL::ChainRuleConstraint< Real >::aJol_, ROL::ChainRuleConstraint< Real >::inner_con_, ROL::ChainRuleConstraint< Real >::outer_con_, and ROL::ChainRuleConstraint< Real >::y_.

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

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#100, 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 89 of file ROL_ChainRuleConstraint.hpp.

References ROL::ChainRuleConstraint< Real >::aJol_, ROL::ChainRuleConstraint< Real >::HiaJol_, ROL::ChainRuleConstraint< Real >::HolJiv_, ROL::ChainRuleConstraint< Real >::inner_con_, ROL::ChainRuleConstraint< Real >::Jiv_, ROL::ChainRuleConstraint< Real >::outer_con_, ROL::Vector< Real >::plus(), and ROL::ChainRuleConstraint< Real >::y_.

Member Data Documentation

template<typename Real >
const Ptr<Constraint<Real> > ROL::ChainRuleConstraint< Real >::outer_con_
private
template<typename Real >
const Ptr<Constraint<Real> > ROL::ChainRuleConstraint< Real >::inner_con_
private
template<typename Real >
Ptr<Vector<Real> > ROL::ChainRuleConstraint< Real >::y_
private
template<typename Real >
Ptr<Vector<Real> > ROL::ChainRuleConstraint< Real >::Jiv_
private
template<typename Real >
Ptr<Vector<Real> > ROL::ChainRuleConstraint< Real >::aJol_
private
template<typename Real >
Ptr<Vector<Real> > ROL::ChainRuleConstraint< Real >::HiaJol_
private
template<typename Real >
Ptr<Vector<Real> > ROL::ChainRuleConstraint< Real >::HolJiv_
private
template<typename Real >
Real ROL::ChainRuleConstraint< Real >::tol_
private

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