44 #ifndef ROL_BOUND_CONSTRAINT_SIMOPT_H 45 #define ROL_BOUND_CONSTRAINT_SIMOPT_H 75 Teuchos::RCP<BoundConstraint<Real> >
bnd1_;
76 Teuchos::RCP<BoundConstraint<Real> >
bnd2_;
87 : bnd1_(bnd1), bnd2_(bnd2) {
88 if ( bnd1_->isActivated() || bnd2_->isActivated() ) {
106 if ( bnd1_->isActivated() ) {
107 bnd1_->update(*(xs.
get_1()),flag,iter);
109 if ( bnd2_->isActivated() ) {
110 bnd2_->update(*(xs.
get_2()),flag,iter);
125 if ( bnd1_->isActivated() ) {
126 Teuchos::RCP<Vector<Real> > x1 = xs.
get_1()->clone(); x1->set(*(xs.
get_1()));
130 if ( bnd2_->isActivated() ) {
131 Teuchos::RCP<Vector<Real> > x2 = xs.
get_2()->clone(); x2->set(*(xs.
get_2()));
146 const ROL::Vector_SimOpt<Real> &xs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
149 if ( bnd1_->isActivated() ) {
150 nn1 = bnd1_->checkMultipliers(*(ls.
get_1()),*(xs.
get_1()));
153 if ( bnd2_->isActivated() ) {
154 nn2 = bnd2_->checkMultipliers(*(ls.
get_2()),*(xs.
get_2()));
173 const ROL::Vector_SimOpt<Real> &xs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
175 if ( bnd1_->isActivated() ) {
176 Teuchos::RCP<Vector<Real> > v1 = vs.
get_1()->clone(); v1->set(*(vs.
get_1()));
177 bnd1_->pruneUpperActive(*v1,*(xs.
get_1()),eps);
180 if ( bnd2_->isActivated() ) {
181 Teuchos::RCP<Vector<Real> > v2 = vs.
get_2()->clone(); v2->set(*(vs.
get_2()));
182 bnd2_->pruneUpperActive(*v2,*(xs.
get_2()),eps);
203 const ROL::Vector_SimOpt<Real> &gs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
205 const ROL::Vector_SimOpt<Real> &xs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
207 if ( bnd1_->isActivated() ) {
208 Teuchos::RCP<Vector<Real> > v1 = vs.
get_1()->clone(); v1->set(*(vs.
get_1()));
209 bnd1_->pruneUpperActive(*v1,*(gs.
get_1()),*(xs.
get_1()),eps);
212 if ( bnd2_->isActivated() ) {
213 Teuchos::RCP<Vector<Real> > v2 = vs.
get_2()->clone(); v2->set(*(vs.
get_2()));
214 bnd2_->pruneUpperActive(*v2,*(gs.
get_2()),*(xs.
get_2()),eps);
233 const ROL::Vector_SimOpt<Real> &xs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
235 if ( bnd1_->isActivated() ) {
236 Teuchos::RCP<Vector<Real> > v1 = vs.
get_1()->clone(); v1->set(*(vs.
get_1()));
237 bnd1_->pruneLowerActive(*v1,*(xs.
get_1()),eps);
240 if ( bnd2_->isActivated() ) {
241 Teuchos::RCP<Vector<Real> > v2 = vs.
get_2()->clone(); v2->set(*(vs.
get_2()));
242 bnd2_->pruneLowerActive(*v2,*(xs.
get_2()),eps);
263 const ROL::Vector_SimOpt<Real> &gs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
265 const ROL::Vector_SimOpt<Real> &xs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
267 if ( bnd1_->isActivated() ) {
268 Teuchos::RCP<Vector<Real> > v1 = vs.
get_1()->clone(); v1->set(*(vs.
get_1()));
269 bnd1_->pruneLowerActive(*v1,*(gs.
get_1()),*(xs.
get_1()),eps);
272 if ( bnd2_->isActivated() ) {
273 Teuchos::RCP<Vector<Real> > v2 = vs.
get_2()->clone(); v2->set(*(vs.
get_2()));
274 bnd2_->pruneLowerActive(*v2,*(gs.
get_2()),*(xs.
get_2()),eps);
287 Teuchos::RCP<Vector<Real> > u1 = us.
get_1()->clone();
288 Teuchos::RCP<Vector<Real> > u2 = us.
get_2()->clone();
289 bnd1_->setVectorToUpperBound(*u1);
290 bnd2_->setVectorToUpperBound(*u2);
303 Teuchos::RCP<Vector<Real> > l1 = ls.
get_1()->clone();
304 Teuchos::RCP<Vector<Real> > l2 = ls.
get_2()->clone();
305 bnd1_->setVectorToLowerBound(*l1);
306 bnd2_->setVectorToLowerBound(*l2);
325 const ROL::Vector_SimOpt<Real> &xs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
327 if ( bnd1_->isActivated() ) {
328 Teuchos::RCP<Vector<Real> > v2 = vs.
get_2()->clone(); v2->set(*(vs.
get_2()));
329 bnd2_->pruneActive(*v2,*(xs.
get_2()),eps);
332 if ( bnd2_->isActivated() ) {
333 Teuchos::RCP<Vector<Real> > v1 = vs.
get_1()->clone(); v1->set(*(vs.
get_1()));
334 bnd1_->pruneActive(*v1,*(xs.
get_1()),eps);
354 const ROL::Vector_SimOpt<Real> &gs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
356 const ROL::Vector_SimOpt<Real> &xs = Teuchos::dyn_cast<
const ROL::Vector_SimOpt<Real> >(
358 if ( bnd1_->isActivated() ) {
359 Teuchos::RCP<Vector<Real> > v1 = vs.
get_1()->clone(); v1->set(*(vs.
get_1()));
360 bnd1_->pruneActive(*v1,*(gs.
get_1()),*(xs.
get_1()),eps);
363 if ( bnd2_->isActivated() ) {
364 Teuchos::RCP<Vector<Real> > v2 = vs.
get_2()->clone(); v2->set(*(vs.
get_2()));
365 bnd2_->pruneActive(*v2,*(gs.
get_2()),*(xs.
get_2()),eps);
378 return bnd1_->isFeasible(*(vs.
get_1()))*bnd2_->isFeasible(*(vs.
get_2()));
~BoundConstraint_SimOpt()
bool isFeasible(const Vector< Real > &v)
Check if the vector, v, is feasible.
void setVectorToLowerBound(Vector< Real > &l)
Set the input vector to the lower bound.
Teuchos::RCP< const Vector< Real > > get_1() const
void pruneLowerActive(Vector< Real > &v, const Vector< Real > &x, Real eps=0.0)
Set variables to zero if they correspond to the lower -active set.
Defines the linear algebra or vector space interface for simulation-based optimization.
void activate(void)
Turn on bounds.
void pruneLowerActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x, Real eps=0.0)
Set variables to zero if they correspond to the lower -binding set.
Contains definitions of custom data types in ROL.
void set_1(const Vector< Real > &vec)
Defines the linear algebra or vector space interface.
void setVectorToUpperBound(Vector< Real > &u)
Set the input vector to the upper bound.
bool checkMultipliers(const Vector< Real > &l, const Vector< Real > &x)
Determine if a vector of Lagrange multipliers is nonnegative components.
Teuchos::RCP< BoundConstraint< Real > > bnd1_
void pruneActive(Vector< Real > &v, const Vector< Real > &x, Real eps=0.0)
Set variables to zero if they correspond to the -active set.
void pruneUpperActive(Vector< Real > &v, const Vector< Real > &x, Real eps=0.0)
Set variables to zero if they correspond to the upper -active set.
BoundConstraint_SimOpt(const Teuchos::RCP< BoundConstraint< Real > > &bnd1, const Teuchos::RCP< BoundConstraint< Real > > &bnd2)
Default constructor.
void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Update bounds.
Provides the interface to apply upper and lower bound constraints.
void pruneUpperActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x, Real eps=0.0)
Set variables to zero if they correspond to the upper -binding set.
Teuchos::RCP< BoundConstraint< Real > > bnd2_
void pruneActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x, Real eps=0.0)
Set variables to zero if they correspond to the -binding set.
void deactivate(void)
Turn off bounds.
Teuchos::RCP< const Vector< Real > > get_2() const
void project(Vector< Real > &x)
Project optimization variables onto the bounds.
void set_2(const Vector< Real > &vec)