ROL
Loading...
Searching...
No Matches
ROL_ConstraintAssembler.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Rapid Optimization Library (ROL) Package
4//
5// Copyright 2014 NTESS and the ROL contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef ROL_CONSTRAINT_ASSEMBLER_H
11#define ROL_CONSTRAINT_ASSEMBLER_H
12
15#include "ROL_Projection.hpp"
16#include <unordered_map>
17
25namespace ROL {
26
27template<typename Real>
29 Ptr<Constraint<Real>> constraint;
30 Ptr<Vector<Real>> multiplier;
31 Ptr<Vector<Real>> residual;
32 Ptr<BoundConstraint<Real>> bounds;
33 Ptr<Projection<Real>> projection;
34
36 const Ptr<Vector<Real>> &mul,
37 const Ptr<Vector<Real>> &res=nullPtr,
38 const Ptr<BoundConstraint<Real>> &bnd=nullPtr,
39 const Ptr<Projection<Real>> &pro=nullPtr)
40 : constraint(con), multiplier(mul),
41 residual(res==nullPtr ? mul->dual().clone() : res), bounds(bnd), projection(pro) {}
42};
43
44template<typename Real>
46private:
47 Ptr<Constraint<Real>> con_;
48 Ptr<Vector<Real>> mul_;
49 Ptr<Vector<Real>> res_;
50 Ptr<Constraint<Real>> linear_con_;
51 Ptr<Vector<Real>> linear_mul_;
52 Ptr<Vector<Real>> linear_res_;
53 Ptr<Vector<Real>> xprim_;
54 Ptr<Vector<Real>> xdual_;
55 Ptr<BoundConstraint<Real>> bnd_;
56
57 std::vector<Ptr<Constraint<Real>>> cvec_; // General constraints
58 std::vector<Ptr<Vector<Real>>> lvec_; // General multiplier vector
59 std::vector<Ptr<Vector<Real>>> rvec_; // General residual vector
60 std::vector<Ptr<Constraint<Real>>> lcvec_; // Linear constraints
61 std::vector<Ptr<Vector<Real>>> llvec_; // Linear multiplier vector
62 std::vector<Ptr<Vector<Real>>> lrvec_; // Linear residual vector
63 std::vector<Ptr<Vector<Real>>> psvec_; // Primal slack vector
64 std::vector<Ptr<Vector<Real>>> dsvec_; // Dual slack vector
65 std::vector<Ptr<BoundConstraint<Real>>> sbnd_; // Slack bound constraint
66
68
69 bool isNull_;
71
72 void initializeSlackVariable( const Ptr<Constraint<Real>> &con,
73 const Ptr<BoundConstraint<Real>> &cbnd,
74 const Ptr<Vector<Real>> &s,
75 const Ptr<Vector<Real>> &x) const;
76
77 void initialize( const std::unordered_map<std::string,ConstraintData<Real>> &input_con,
78 const Ptr<Vector<Real>> &xprim,
79 const Ptr<Vector<Real>> &xdual,
80 const Ptr<BoundConstraint<Real>> &bnd);
81
82 void initialize( const std::unordered_map<std::string,ConstraintData<Real>> &input_con,
83 const std::unordered_map<std::string,ConstraintData<Real>> &input_lcon,
84 const Ptr<Vector<Real>> &xprim,
85 const Ptr<Vector<Real>> &xdual,
86 const Ptr<BoundConstraint<Real>> &bnd);
87
88public:
90
91 ConstraintAssembler( const std::unordered_map<std::string,ConstraintData<Real>> &con,
92 const Ptr<Vector<Real>> &xprim,
93 const Ptr<Vector<Real>> &xdual,
94 const Ptr<BoundConstraint<Real>> &bnd = nullPtr);
95
96 ConstraintAssembler( const std::unordered_map<std::string,ConstraintData<Real>> &con,
97 const std::unordered_map<std::string,ConstraintData<Real>> &linear_con,
98 const Ptr<Vector<Real>> &xprim,
99 const Ptr<Vector<Real>> &xdual,
100 const Ptr<BoundConstraint<Real>> &bnd = nullPtr);
101
102 const Ptr<Constraint<Real>>& getConstraint() const;
103 const Ptr<Vector<Real>>& getMultiplier() const;
104 const Ptr<Vector<Real>>& getResidual() const;
105 const Ptr<Constraint<Real>>& getLinearConstraint() const;
106 const Ptr<Vector<Real>>& getLinearMultiplier() const;
107 const Ptr<Vector<Real>>& getLinearResidual() const;
108 const Ptr<Vector<Real>>& getOptVector() const;
109 const Ptr<Vector<Real>>& getDualOptVector() const;
110 const Ptr<BoundConstraint<Real>>& getBoundConstraint() const;
111
112 bool isNull() const;
113 bool hasInequality() const;
114
115 void resetSlackVariables();
116
117}; // class ConstraintAssembler
118
119} // namespace ROL
120
122
123#endif
Provides the interface to apply upper and lower bound constraints.
Provides a wrapper for multiple constraints.
std::vector< Ptr< Vector< Real > > > lvec_
void initializeSlackVariable(const Ptr< Constraint< Real > > &con, const Ptr< BoundConstraint< Real > > &cbnd, const Ptr< Vector< Real > > &s, const Ptr< Vector< Real > > &x) const
const Ptr< Constraint< Real > > & getLinearConstraint() const
void initialize(const std::unordered_map< std::string, ConstraintData< Real > > &input_con, const Ptr< Vector< Real > > &xprim, const Ptr< Vector< Real > > &xdual, const Ptr< BoundConstraint< Real > > &bnd)
Ptr< Constraint< Real > > con_
Ptr< BoundConstraint< Real > > bnd_
std::vector< Ptr< Vector< Real > > > psvec_
std::vector< Ptr< Constraint< Real > > > cvec_
Ptr< Constraint< Real > > linear_con_
const Ptr< Vector< Real > > & getMultiplier() const
std::vector< Ptr< Vector< Real > > > dsvec_
std::vector< bool > isLinearInequality_
const Ptr< Vector< Real > > & getLinearResidual() const
const Ptr< Vector< Real > > & getDualOptVector() const
std::vector< Ptr< Vector< Real > > > rvec_
const Ptr< BoundConstraint< Real > > & getBoundConstraint() const
std::vector< Ptr< Vector< Real > > > llvec_
std::vector< Ptr< BoundConstraint< Real > > > sbnd_
const Ptr< Constraint< Real > > & getConstraint() const
const Ptr< Vector< Real > > & getLinearMultiplier() const
std::vector< Ptr< Vector< Real > > > lrvec_
const Ptr< Vector< Real > > & getOptVector() const
std::vector< Ptr< Constraint< Real > > > lcvec_
const Ptr< Vector< Real > > & getResidual() const
Defines the general constraint operator interface.
Defines the linear algebra or vector space interface.
Ptr< Constraint< Real > > constraint
Ptr< Vector< Real > > multiplier
Ptr< Vector< Real > > residual
Ptr< BoundConstraint< Real > > bounds
ConstraintData(const Ptr< Constraint< Real > > &con, const Ptr< Vector< Real > > &mul, const Ptr< Vector< Real > > &res=nullPtr, const Ptr< BoundConstraint< Real > > &bnd=nullPtr, const Ptr< Projection< Real > > &pro=nullPtr)
Ptr< Projection< Real > > projection