44#ifndef ROL_RISK_BOUND_CONSTRAINT_H
45#define ROL_RISK_BOUND_CONSTRAINT_H
56 Ptr<BoundConstraint<Real>>
bc_;
72 mutable Ptr<RiskVector<Real>>
lo_,
hi_;
76 std::vector<Real> &lower,
77 std::vector<Real> &upper,
80 lower.clear(); upper.clear();
82 std::string optType = parlist.sublist(
"SOL").get(
"Type",
"Risk Averse");
83 if ( optType ==
"Risk Averse" ||
84 optType ==
"Deviation" ||
85 optType ==
"Regret" ||
87 optType ==
"Probability" ) {
89 RandVarFunctionalInfo<Real>(parlist,name,nStat,lower,upper,activated);
90 augmented = (nStat > 0) ?
true :
false;
92 else if ( optType ==
"Risk Neutral" || optType ==
"Mean Value" ) {
98 ROL_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
99 ">>> (ROL::RiskBoundConstraint): Invalid stochastic optimization type!" << optType);
105 if (parlist != nullPtr) {
129 int size = parlist.size();
135 bool activated =
false;
136 for (
int i = 0; i < size; ++i) {
137 if ( parlist[i] != nullPtr ) {
138 bool augmented =
false;
140 std::vector<Real> lo, up;
180 if ( !activatedObj ) {
181 if ( bc == nullPtr || (bc != nullPtr && !bc->isActivated()) ) {
197 if ( !activatedCon ) {
198 if ( bc == nullPtr || (bc != nullPtr && !bc->isActivated()) ) {
206 std::vector<Ptr<ParameterList>> &parlistCon,
216 if ( !activatedObj && !activatedCon ) {
217 if ( bc == nullPtr || (bc != nullPtr && !bc->isActivated()) ) {
238 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(0);
243 for (
int i = 0; i < size; ++i) {
245 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(1,i);
250 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
251 Ptr<const Vector<Real>> xv =
dynamic_cast<const RiskVector<Real>&
>(x).getVector();
252 bc_->update(*xv,flag,iter);
258 Ptr<StdVector<Real>> xs =
dynamic_cast<RiskVector<Real>&
>(x).getStatisticVector(0);
263 for (
int i = 0; i < size; ++i) {
265 Ptr<StdVector<Real>> xs =
dynamic_cast<RiskVector<Real>&
>(x).getStatisticVector(1,i);
270 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
278 Ptr<StdVector<Real>> xs =
dynamic_cast<RiskVector<Real>&
>(x).getStatisticVector(0);
283 for (
int i = 0; i < size; ++i) {
285 Ptr<StdVector<Real>> xs =
dynamic_cast<RiskVector<Real>&
>(x).getStatisticVector(1,i);
290 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
292 bc_->projectInterior(*xvec);
298 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(0);
299 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(0);
304 for (
int i = 0; i < size; ++i) {
306 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(1,i);
307 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(1,i);
312 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
314 Ptr<const Vector<Real>> xv =
dynamic_cast<const RiskVector<Real>&
>(x).getVector();
315 bc_->pruneUpperActive(*vv,*xv,eps);
321 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(0);
322 Ptr<const StdVector<Real>> gs =
dynamic_cast<const RiskVector<Real>&
>(g).getStatisticVector(0);
323 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(0);
324 statObj_bc_->pruneUpperActive(*vs,*gs,*xs,xeps,geps);
328 for (
int i = 0; i < size; ++i) {
330 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(1,i);
331 Ptr<const StdVector<Real>> gs =
dynamic_cast<const RiskVector<Real>&
>(g).getStatisticVector(1,i);
332 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(1,i);
333 statCon_bc_[i]->pruneUpperActive(*vs,*gs,*xs,xeps,geps);
337 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
339 Ptr<const Vector<Real>> gv =
dynamic_cast<const RiskVector<Real>&
>(g).getVector();
340 Ptr<const Vector<Real>> xv =
dynamic_cast<const RiskVector<Real>&
>(x).getVector();
341 bc_->pruneUpperActive(*vv,*gv,*xv,xeps,geps);
347 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(0);
348 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(0);
353 for (
int i = 0; i < size; ++i) {
355 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(1,i);
356 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(1,i);
361 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
363 Ptr<const Vector<Real>> xv =
dynamic_cast<const RiskVector<Real>&
>(x).getVector();
364 bc_->pruneLowerActive(*vv,*xv,eps);
370 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(0);
371 Ptr<const StdVector<Real>> gs =
dynamic_cast<const RiskVector<Real>&
>(g).getStatisticVector(0);
372 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(0);
373 statObj_bc_->pruneLowerActive(*vs,*gs,*xs,xeps,geps);
377 for (
int i = 0; i < size; ++i) {
379 Ptr<StdVector<Real>> vs =
dynamic_cast<RiskVector<Real>&
>(v).getStatisticVector(1,i);
380 Ptr<const StdVector<Real>> gs =
dynamic_cast<const RiskVector<Real>&
>(g).getStatisticVector(1,i);
381 Ptr<const StdVector<Real>> xs =
dynamic_cast<const RiskVector<Real>&
>(x).getStatisticVector(1,i);
382 statCon_bc_[i]->pruneLowerActive(*vs,*gs,*xs,xeps,geps);
386 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
388 Ptr<const Vector<Real>> gv =
dynamic_cast<const RiskVector<Real>&
>(g).getVector();
389 Ptr<const Vector<Real>> xv =
dynamic_cast<const RiskVector<Real>&
>(x).getVector();
390 bc_->pruneLowerActive(*vv,*gv,*xv,xeps,geps);
396 const Ptr<const Vector<Real>> vlo =
bc_->getLowerBound();
397 Ptr<std::vector<Real>> lowerObj = makePtr<std::vector<Real>>(
lowerObj_);
399 std::vector<Ptr<std::vector<Real>>> lowerCon(size);
400 for (
int i = 0; i < size; ++i) {
401 lowerCon[i] = makePtr<std::vector<Real>>(
lowerCon_[i]);
403 lo_ = makePtr<RiskVector<Real>>(constPtrCast<Vector<Real>>(vlo),
412 const Ptr<const Vector<Real>> vhi =
bc_->getUpperBound();
413 Ptr<std::vector<Real>> upperObj = makePtr<std::vector<Real>>(
upperObj_);
415 std::vector<Ptr<std::vector<Real>>> upperCon(size);
416 for (
int i = 0; i < size; ++i) {
417 upperCon[i] = makePtr<std::vector<Real>>(
upperCon_[i]);
419 hi_ = makePtr<RiskVector<Real>>(constPtrCast<Vector<Real>>(vhi),
427 bool flagstat =
true, flagcon =
true, flagvec =
true;
429 Ptr<const StdVector<Real>> vs =
dynamic_cast<const RiskVector<Real>&
>(v).getStatisticVector(0);
434 for (
int i = 0; i < size; ++i) {
436 Ptr<const StdVector<Real>> vs =
dynamic_cast<const RiskVector<Real>&
>(v).getStatisticVector(1,i);
437 flagcon = (!
statCon_bc_[i]->isFeasible(*vs) ? false : flagcon);
441 if (
bc_ != nullPtr &&
bc_->isActivated() ) {
442 Ptr<const Vector<Real>> vv =
dynamic_cast<const RiskVector<Real>&
>(v).getVector();
443 flagvec =
bc_->isFeasible(*vv);
445 return (flagstat && flagcon && flagvec);
Contains definitions for std::vector bound constraints.
Contains definitions of custom data types in ROL.
Provides the interface to apply upper and lower bound constraints.
void deactivate(void)
Turn off bounds.
void activate(void)
Turn on bounds.
std::vector< bool > activatedCon_
RiskBoundConstraint(const Ptr< BoundConstraint< Real > > &bc)
bool isFeasible(const Vector< Real > &v)
Check if the vector, v, is feasible.
const Ptr< const Vector< Real > > getLowerBound(void) const
Return the ref count pointer to the lower bound vector.
void setBoundInfo(ParameterList &parlist, int &nStat, std::vector< Real > &lower, std::vector< Real > &upper, bool &augmented, bool &activated)
Ptr< RiskVector< Real > > hi_
std::vector< std::vector< Real > > upperCon_
RiskBoundConstraint(std::vector< Ptr< ParameterList > > &parlist, const Ptr< BoundConstraint< Real > > &bc=nullPtr)
std::vector< Real > upperObj_
std::vector< std::vector< Real > > lowerCon_
RiskBoundConstraint(Ptr< ParameterList > &parlist, const Ptr< BoundConstraint< Real > > &bc=nullPtr)
void project(Vector< Real > &x)
Project optimization variables onto the bounds.
void pruneLowerActive(Vector< Real > &v, const Vector< Real > &x, Real eps=Real(0))
Set variables to zero if they correspond to the lower -active set.
std::vector< Ptr< StdBoundConstraint< Real > > > statCon_bc_
const Ptr< const Vector< Real > > getUpperBound(void) const
Return the ref count pointer to the upper bound vector.
bool buildObjStatBnd(Ptr< ParameterList > &parlist)
Ptr< StdBoundConstraint< Real > > statObj_bc_
bool buildConStatBnd(std::vector< Ptr< ParameterList > > &parlist)
void pruneLowerActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x, Real xeps=Real(0), Real geps=Real(0))
Set variables to zero if they correspond to the -binding set.
Ptr< BoundConstraint< Real > > bc_
void pruneUpperActive(Vector< Real > &v, const Vector< Real > &x, Real eps=Real(0))
Set variables to zero if they correspond to the upper -active set.
std::vector< Real > lowerObj_
RiskBoundConstraint(Ptr< ParameterList > &parlistObj, std::vector< Ptr< ParameterList > > &parlistCon, const Ptr< BoundConstraint< Real > > &bc=nullPtr)
void pruneUpperActive(Vector< Real > &v, const Vector< Real > &g, const Vector< Real > &x, Real xeps=Real(0), Real geps=Real(0))
Set variables to zero if they correspond to the upper -binding set.
void projectInterior(Vector< Real > &x)
Project optimization variables into the interior of the feasible set.
void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Ptr< RiskVector< Real > > lo_
std::vector< int > nStatCon_
Defines the linear algebra or vector space interface.