ROL
ROL_RiskBoundConstraint.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ************************************************************************
3 //
4 // Rapid Optimization Library (ROL) Package
5 // Copyright (2014) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact lead developers:
38 // Drew Kouri (dpkouri@sandia.gov) and
39 // Denis Ridzal (dridzal@sandia.gov)
40 //
41 // ************************************************************************
42 // @HEADER
43 
44 #ifndef ROL_RISK_BOUND_CONSTRAINT_H
45 #define ROL_RISK_BOUND_CONSTRAINT_H
46 
48 #include "ROL_RiskVector.hpp"
49 #include "ROL_Types.hpp"
50 
51 namespace ROL {
52 
53 template <class Real>
54 class RiskBoundConstraint : public BoundConstraint<Real> {
55 private:
56  ROL::Ptr<BoundConstraint<Real> > bc_;
57 
58  ROL::Ptr<StdBoundConstraint<Real> > statObj_bc_;
59  std::vector<Real> lowerObj_, upperObj_;
60 
61  std::vector<ROL::Ptr<StdBoundConstraint<Real> > > statCon_bc_;
62  std::vector<std::vector<Real> > lowerCon_, upperCon_;
63 
65  int nStatObj_;
66 
68  std::vector<bool> activatedCon_;
69  std::vector<int> nStatCon_;
70 
72  mutable ROL::Ptr<RiskVector<Real> > lo_, hi_;
73 
74  void setBoundInfo(ROL::ParameterList &parlist,
75  int &nStat,
76  std::vector<Real> &lower,
77  std::vector<Real> &upper,
78  bool &augmented,
79  bool &activated) {
80  lower.clear(); upper.clear();
81  // Get stochastic optimization information
82  std::string optType = parlist.sublist("SOL").get("Stochastic Component Type","Risk Averse");
83  if ( optType == "Risk Averse" ||
84  optType == "Deviation" ||
85  optType == "Regret" ||
86  optType == "Error" ||
87  optType == "Probability" ) {
88  std::string name;
89  RandVarFunctionalInfo<Real>(parlist,name,nStat,lower,upper,activated);
90  augmented = (nStat > 0) ? true : false;
91  }
92  else if ( optType == "Risk Neutral" || optType == "Mean Value" ) {
93  augmented = false;
94  activated = false;
95  nStat = 0;
96  }
97  else {
98  ROL_TEST_FOR_EXCEPTION(true,std::invalid_argument,
99  ">>> (ROL::RiskBoundConstraint): Invalid stochastic optimization type!" << optType);
100  }
101  }
102 
103  bool buildObjStatBnd(ROL::Ptr<ROL::ParameterList> &parlist) {
104  // Objective statistic bound
105  if (parlist != ROL::nullPtr) {
107  // Build statistic bound constraint
108  if ( augmentedObj_ ) {
109  statObj_bc_ = ROL::makePtr<StdBoundConstraint<Real>>(lowerObj_,upperObj_);
110  }
111  }
112  else {
113  augmentedObj_ = false;
114  activatedObj_ = false;
115  nStatObj_ = 0;
116  statObj_bc_ = ROL::nullPtr;
117  }
118  // Determine whether or not bound constraint is activated
119  if ( !activatedObj_ ) {
120  if ( statObj_bc_ != ROL::nullPtr ) {
121  statObj_bc_->deactivate();
122  }
123  }
124  return activatedObj_;
125  }
126 
127  bool buildConStatBnd(std::vector<ROL::Ptr<ROL::ParameterList> > &parlist) {
128  // Constraint statistic bound
129  int size = parlist.size();
130  nStatCon_.clear(); nStatCon_.resize(size,0);
131  lowerCon_.clear(); lowerCon_.resize(size);
132  upperCon_.clear(); upperCon_.resize(size);
133  activatedCon_.clear(); activatedCon_.resize(size,false);
134  statCon_bc_.clear(); statCon_bc_.resize(size,ROL::nullPtr);
135  bool activated = false;
136  for (int i = 0; i < size; ++i) {
137  if ( parlist[i] != ROL::nullPtr ) {
138  bool augmented = false;
139  int nStat = 0;
140  std::vector<Real> lo, up;
141  bool act = false;
142  setBoundInfo(*parlist[i],nStat,lo,up,augmented,act);
143  nStatCon_[i] = nStat;
144  lowerCon_[i] = lo;
145  upperCon_[i] = up;
146  activatedCon_[i] = act;
147  augmentedCon_ = (augmented ? true : augmentedCon_);
148  // Build statistic bound constraint
149  if ( augmented ) {
150  statCon_bc_[i] = ROL::makePtr<StdBoundConstraint<Real>>(lowerCon_[i],upperCon_[i]);
151  }
152  }
153  else {
154  activatedCon_[i] = false;
155  nStatCon_[i] = 0;
156  statCon_bc_[i] = ROL::nullPtr;
157  }
158  if ( !activatedCon_[i] ) {
159  if ( statCon_bc_[i] != ROL::nullPtr ) {
160  statCon_bc_[i]->deactivate();
161  }
162  }
163  activated = (activatedCon_[i] ? true : activated);
164  }
165  return activated;
166  }
167 
168 public:
169 
170  // Objective risk only
171  RiskBoundConstraint(ROL::Ptr<ROL::ParameterList > &parlist,
172  const ROL::Ptr<BoundConstraint<Real> > &bc = ROL::nullPtr)
173  : BoundConstraint<Real>(), bc_(bc), statObj_bc_(ROL::nullPtr),
174  augmentedObj_(false), activatedObj_(false),
175  augmentedCon_(false),
176  isLOinitialized_(false), isHIinitialized_(false) {
177  bool activatedObj = buildObjStatBnd(parlist);
178  // Determine whether or not bound constraint is activated
180  if ( !activatedObj ) {
181  if ( bc == ROL::nullPtr || (bc != ROL::nullPtr && !bc->isActivated()) ) {
183  }
184  }
185  }
186 
187  // Constraint risk only
188  RiskBoundConstraint(std::vector<ROL::Ptr<ROL::ParameterList> > &parlist,
189  const ROL::Ptr<BoundConstraint<Real> > &bc = ROL::nullPtr)
190  : BoundConstraint<Real>(), bc_(bc), statObj_bc_(ROL::nullPtr),
191  augmentedObj_(false), activatedObj_(false),
192  augmentedCon_(false),
193  isLOinitialized_(false), isHIinitialized_(false) {
194  bool activatedCon = buildConStatBnd(parlist);
195  // Determine whether or not bound constraint is activated
197  if ( !activatedCon ) {
198  if ( bc == ROL::nullPtr || (bc != ROL::nullPtr && !bc->isActivated()) ) {
200  }
201  }
202  }
203 
204  // Objective and constraint risk
205  RiskBoundConstraint(ROL::Ptr<ROL::ParameterList> &parlistObj,
206  std::vector<ROL::Ptr<ROL::ParameterList> > &parlistCon,
207  const ROL::Ptr<BoundConstraint<Real> > &bc = ROL::nullPtr)
208  : BoundConstraint<Real>(), bc_(bc), statObj_bc_(ROL::nullPtr),
209  augmentedObj_(false), activatedObj_(false),
210  augmentedCon_(false),
211  isLOinitialized_(false), isHIinitialized_(false) {
212  bool activatedObj = buildObjStatBnd(parlistObj);
213  bool activatedCon = buildConStatBnd(parlistCon);
214  // Determine whether or not bound constraint is activated
216  if ( !activatedObj && !activatedCon ) {
217  if ( bc == ROL::nullPtr || (bc != ROL::nullPtr && !bc->isActivated()) ) {
219  }
220  }
221  }
222 
223  // Objective only -- no statistic
225  : BoundConstraint<Real>(), bc_(bc), statObj_bc_(nullPtr),
226  augmentedObj_(false), activatedObj_(false),
227  augmentedCon_(false),
228  isLOinitialized_(false), isHIinitialized_(false) {
229  activatedObj_ = bc_->isActivated();
231  if (!activatedObj_) {
233  }
234  }
235 
236  void update( const Vector<Real> &x, bool flag = true, int iter = -1 ) {
237  if ( augmentedObj_ && activatedObj_ ) {
238  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(0);
239  statObj_bc_->update(*xs,flag,iter);
240  }
241  if (augmentedCon_) {
242  int size = statCon_bc_.size();
243  for (int i = 0; i < size; ++i) {
244  if (activatedCon_[i]) {
245  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(1,i);
246  statCon_bc_[i]->update(*xs,flag,iter);
247  }
248  }
249  }
250  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
251  ROL::Ptr<const Vector<Real> > xv = dynamic_cast<const RiskVector<Real>&>(x).getVector();
252  bc_->update(*xv,flag,iter);
253  }
254  }
255 
256  void project( Vector<Real> &x ) {
257  if ( augmentedObj_ && activatedObj_ ) {
258  ROL::Ptr<StdVector<Real> > xs = dynamic_cast<RiskVector<Real>&>(x).getStatisticVector(0);
259  statObj_bc_->project(*xs);
260  }
261  if (augmentedCon_) {
262  int size = statCon_bc_.size();
263  for (int i = 0; i < size; ++i) {
264  if (activatedCon_[i]) {
265  ROL::Ptr<StdVector<Real> > xs = dynamic_cast<RiskVector<Real>&>(x).getStatisticVector(1,i);
266  statCon_bc_[i]->project(*xs);
267  }
268  }
269  }
270  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
271  ROL::Ptr<Vector<Real> > xvec = dynamic_cast<RiskVector<Real>&>(x).getVector();
272  bc_->project(*xvec);
273  }
274  }
275 
277  if ( augmentedObj_ && activatedObj_ ) {
278  ROL::Ptr<StdVector<Real> > xs = dynamic_cast<RiskVector<Real>&>(x).getStatisticVector(0);
279  statObj_bc_->projectInterior(*xs);
280  }
281  if (augmentedCon_) {
282  int size = statCon_bc_.size();
283  for (int i = 0; i < size; ++i) {
284  if (activatedCon_[i]) {
285  ROL::Ptr<StdVector<Real> > xs = dynamic_cast<RiskVector<Real>&>(x).getStatisticVector(1,i);
286  statCon_bc_[i]->projectInterior(*xs);
287  }
288  }
289  }
290  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
291  ROL::Ptr<Vector<Real> > xvec = dynamic_cast<RiskVector<Real>&>(x).getVector();
292  bc_->projectInterior(*xvec);
293  }
294  }
295 
296  void pruneUpperActive( Vector<Real> &v, const Vector<Real> &x, Real eps = 0 ) {
297  if ( augmentedObj_ && activatedObj_ ) {
298  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(0);
299  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(0);
300  statObj_bc_->pruneUpperActive(*vs,*xs,eps);
301  }
302  if (augmentedCon_) {
303  int size = statCon_bc_.size();
304  for (int i = 0; i < size; ++i) {
305  if (activatedCon_[i]) {
306  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(1,i);
307  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(1,i);
308  statCon_bc_[i]->pruneUpperActive(*vs,*xs,eps);
309  }
310  }
311  }
312  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
313  ROL::Ptr<Vector<Real> > vv = dynamic_cast<RiskVector<Real>&>(v).getVector();
314  ROL::Ptr<const Vector<Real> > xv = dynamic_cast<const RiskVector<Real>&>(x).getVector();
315  bc_->pruneUpperActive(*vv,*xv,eps);
316  }
317  }
318 
319  void pruneUpperActive( Vector<Real> &v, const Vector<Real> &g, const Vector<Real> &x, Real eps = 0 ) {
320  if ( augmentedObj_ && activatedObj_ ) {
321  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(0);
322  ROL::Ptr<const StdVector<Real> > gs = dynamic_cast<const RiskVector<Real>&>(g).getStatisticVector(0);
323  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(0);
324  statObj_bc_->pruneUpperActive(*vs,*gs,*xs,eps);
325  }
326  if (augmentedCon_) {
327  int size = statCon_bc_.size();
328  for (int i = 0; i < size; ++i) {
329  if (activatedCon_[i]) {
330  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(1,i);
331  ROL::Ptr<const StdVector<Real> > gs = dynamic_cast<const RiskVector<Real>&>(g).getStatisticVector(1,i);
332  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(1,i);
333  statCon_bc_[i]->pruneUpperActive(*vs,*gs,*xs,eps);
334  }
335  }
336  }
337  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
338  ROL::Ptr<Vector<Real> > vv = dynamic_cast<RiskVector<Real>&>(v).getVector();
339  ROL::Ptr<const Vector<Real> > gv = dynamic_cast<const RiskVector<Real>&>(g).getVector();
340  ROL::Ptr<const Vector<Real> > xv = dynamic_cast<const RiskVector<Real>&>(x).getVector();
341  bc_->pruneUpperActive(*vv,*gv,*xv,eps);
342  }
343  }
344 
345  void pruneLowerActive( Vector<Real> &v, const Vector<Real> &x, Real eps = 0 ) {
346  if ( augmentedObj_ && activatedObj_ ) {
347  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(0);
348  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(0);
349  statObj_bc_->pruneLowerActive(*vs,*xs,eps);
350  }
351  if (augmentedCon_) {
352  int size = statCon_bc_.size();
353  for (int i = 0; i < size; ++i) {
354  if (activatedCon_[i]) {
355  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(1,i);
356  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(1,i);
357  statCon_bc_[i]->pruneLowerActive(*vs,*xs,eps);
358  }
359  }
360  }
361  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
362  ROL::Ptr<Vector<Real> > vv = dynamic_cast<RiskVector<Real>&>(v).getVector();
363  ROL::Ptr<const Vector<Real> > xv = dynamic_cast<const RiskVector<Real>&>(x).getVector();
364  bc_->pruneLowerActive(*vv,*xv,eps);
365  }
366  }
367 
368  void pruneLowerActive( Vector<Real> &v, const Vector<Real> &g, const Vector<Real> &x, Real eps = 0 ) {
369  if ( augmentedObj_ && activatedObj_ ) {
370  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(0);
371  ROL::Ptr<const StdVector<Real> > gs = dynamic_cast<const RiskVector<Real>&>(g).getStatisticVector(0);
372  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(0);
373  statObj_bc_->pruneLowerActive(*vs,*gs,*xs,eps);
374  }
375  if (augmentedCon_) {
376  int size = statCon_bc_.size();
377  for (int i = 0; i < size; ++i) {
378  if (activatedCon_[i]) {
379  ROL::Ptr<StdVector<Real> > vs = dynamic_cast<RiskVector<Real>&>(v).getStatisticVector(1,i);
380  ROL::Ptr<const StdVector<Real> > gs = dynamic_cast<const RiskVector<Real>&>(g).getStatisticVector(1,i);
381  ROL::Ptr<const StdVector<Real> > xs = dynamic_cast<const RiskVector<Real>&>(x).getStatisticVector(1,i);
382  statCon_bc_[i]->pruneLowerActive(*vs,*gs,*xs,eps);
383  }
384  }
385  }
386  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
387  ROL::Ptr<Vector<Real> > vv = dynamic_cast<RiskVector<Real>&>(v).getVector();
388  ROL::Ptr<const Vector<Real> > gv = dynamic_cast<const RiskVector<Real>&>(g).getVector();
389  ROL::Ptr<const Vector<Real> > xv = dynamic_cast<const RiskVector<Real>&>(x).getVector();
390  bc_->pruneLowerActive(*vv,*gv,*xv,eps);
391  }
392  }
393 
394  const ROL::Ptr<const Vector<Real> > getLowerBound(void) const {
395  if (!isLOinitialized_) {
396  const ROL::Ptr<const Vector<Real> > vlo = bc_->getLowerBound();
397  ROL::Ptr<std::vector<Real> > lowerObj = ROL::makePtr<std::vector<Real>>(lowerObj_);
398  int size = statCon_bc_.size();
399  std::vector<ROL::Ptr<std::vector<Real> > > lowerCon(size);
400  for (int i = 0; i < size; ++i) {
401  lowerCon[i] = ROL::makePtr<std::vector<Real>>(lowerCon_[i]);
402  }
403  lo_ = ROL::makePtr<RiskVector<Real>>(ROL::constPtrCast<Vector<Real>>(vlo),
404  lowerObj,lowerCon);
405  isLOinitialized_ = true;
406  }
407  return lo_;
408  }
409 
410  const ROL::Ptr<const Vector<Real> > getUpperBound(void) const {
411  if (!isHIinitialized_) {
412  const ROL::Ptr<const Vector<Real> > vhi = bc_->getUpperBound();
413  ROL::Ptr<std::vector<Real> > upperObj = ROL::makePtr<std::vector<Real>>(upperObj_);
414  int size = statCon_bc_.size();
415  std::vector<ROL::Ptr<std::vector<Real> > > upperCon(size);
416  for (int i = 0; i < size; ++i) {
417  upperCon[i] = ROL::makePtr<std::vector<Real>>(upperCon_[i]);
418  }
419  hi_ = ROL::makePtr<RiskVector<Real>>(ROL::constPtrCast<Vector<Real>>(vhi),
420  upperObj,upperCon);
421  isHIinitialized_ = true;
422  }
423  return hi_;
424  }
425 
426  bool isFeasible( const Vector<Real> &v ) {
427  bool flagstat = true, flagcon = true, flagvec = true;
428  if ( augmentedObj_ && activatedObj_ ) {
429  ROL::Ptr<const StdVector<Real> > vs = dynamic_cast<const RiskVector<Real>&>(v).getStatisticVector(0);
430  flagstat = statObj_bc_->isFeasible(*vs);
431  }
432  if (augmentedCon_) {
433  int size = statCon_bc_.size();
434  for (int i = 0; i < size; ++i) {
435  if (activatedCon_[i]) {
436  ROL::Ptr<const StdVector<Real> > vs = dynamic_cast<const RiskVector<Real>&>(v).getStatisticVector(1,i);
437  flagcon = (!statCon_bc_[i]->isFeasible(*vs) ? false : flagcon);
438  }
439  }
440  }
441  if ( bc_ != ROL::nullPtr && bc_->isActivated() ) {
442  ROL::Ptr<const Vector<Real> > vv = dynamic_cast<const RiskVector<Real>&>(v).getVector();
443  flagvec = bc_->isFeasible(*vv);
444  }
445  return (flagstat && flagcon && flagvec);
446  }
447 
448 }; // class RiskBoundConstraint
449 
450 } // namespace ROL
451 
452 #endif
Contains definitions for std::vector bound constraints.
RiskBoundConstraint(const Ptr< BoundConstraint< Real > > &bc)
void pruneLowerActive(Vector< Real > &v, const Vector< Real > &x, Real eps=0)
Set variables to zero if they correspond to the lower -active set.
void activate(void)
Turn on bounds.
bool buildConStatBnd(std::vector< ROL::Ptr< ROL::ParameterList > > &parlist)
Contains definitions of custom data types in ROL.
ROL::Ptr< RiskVector< Real > > lo_
ROL::Ptr< StdBoundConstraint< Real > > statObj_bc_
Defines the linear algebra or vector space interface.
Definition: ROL_Vector.hpp:80
ROL::Ptr< RiskVector< Real > > hi_
const ROL::Ptr< const Vector< Real > > getUpperBound(void) const
Return the ref count pointer to the upper bound vector.
std::vector< std::vector< Real > > lowerCon_
void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Update bounds.
void pruneUpperActive(Vector< Real > &v, const Vector< Real > &x, Real eps=0)
Set variables to zero if they correspond to the upper -active set.
const ROL::Ptr< const Vector< Real > > getLowerBound(void) const
Return the ref count pointer to the lower bound vector.
bool buildObjStatBnd(ROL::Ptr< ROL::ParameterList > &parlist)
void pruneUpperActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x, Real eps=0)
Set variables to zero if they correspond to the upper -binding set.
RiskBoundConstraint(ROL::Ptr< ROL::ParameterList > &parlist, const ROL::Ptr< BoundConstraint< Real > > &bc=ROL::nullPtr)
std::vector< std::vector< Real > > upperCon_
bool isFeasible(const Vector< Real > &v)
Check if the vector, v, is feasible.
std::vector< ROL::Ptr< StdBoundConstraint< Real > > > statCon_bc_
Provides the interface to apply upper and lower bound constraints.
void projectInterior(Vector< Real > &x)
Project optimization variables into the interior of the feasible set.
ROL::Ptr< BoundConstraint< Real > > bc_
void setBoundInfo(ROL::ParameterList &parlist, int &nStat, std::vector< Real > &lower, std::vector< Real > &upper, bool &augmented, bool &activated)
void deactivate(void)
Turn off bounds.
void project(Vector< Real > &x)
Project optimization variables onto the bounds.
RiskBoundConstraint(ROL::Ptr< ROL::ParameterList > &parlistObj, std::vector< ROL::Ptr< ROL::ParameterList > > &parlistCon, const ROL::Ptr< BoundConstraint< Real > > &bc=ROL::nullPtr)
void pruneLowerActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x, Real eps=0)
Set variables to zero if they correspond to the -binding set.
RiskBoundConstraint(std::vector< ROL::Ptr< ROL::ParameterList > > &parlist, const ROL::Ptr< BoundConstraint< Real > > &bc=ROL::nullPtr)