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.
std::vector< bool > activatedCon_
RiskBoundConstraint(const Ptr< BoundConstraint< Real >> &bc)
RiskBoundConstraint(Ptr< ParameterList > &parlistObj, std::vector< Ptr< ParameterList >> &parlistCon, const Ptr< BoundConstraint< Real >> &bc=nullPtr)
void activate(void)
Turn on bounds.
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.
Contains definitions of custom data types in ROL.
const Ptr< const Vector< Real > > getLowerBound(void) const
Return the ref count pointer to the lower bound vector.
std::vector< Real > lowerObj_
Defines the linear algebra or vector space interface.
bool buildObjStatBnd(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.
std::vector< std::vector< Real > > lowerCon_
void update(const Vector< Real > &x, bool flag=true, int iter=-1)
Ptr< RiskVector< Real > > lo_
RiskBoundConstraint(std::vector< Ptr< ParameterList >> &parlist, const Ptr< BoundConstraint< Real >> &bc=nullPtr)
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.
void setBoundInfo(ParameterList &parlist, int &nStat, std::vector< Real > &lower, std::vector< Real > &upper, bool &augmented, bool &activated)
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.
RiskBoundConstraint(Ptr< ParameterList > &parlist, const Ptr< BoundConstraint< Real >> &bc=nullPtr)
std::vector< int > nStatCon_
std::vector< std::vector< Real > > upperCon_
bool isFeasible(const Vector< Real > &v)
Check if the vector, v, is feasible.
Ptr< StdBoundConstraint< Real > > statObj_bc_
Provides the interface to apply upper and lower bound constraints.
bool buildConStatBnd(std::vector< Ptr< ParameterList >> &parlist)
std::vector< Real > upperObj_
void projectInterior(Vector< Real > &x)
Project optimization variables into the interior of the feasible set.
const Ptr< const Vector< Real > > getUpperBound(void) const
Return the ref count pointer to the upper bound vector.
void deactivate(void)
Turn off bounds.
void project(Vector< Real > &x)
Project optimization variables onto the bounds.
Ptr< BoundConstraint< Real > > bc_
Ptr< RiskVector< Real > > hi_
std::vector< Ptr< StdBoundConstraint< Real > > > statCon_bc_