44 #ifndef ROL_RISKVECTOR_HPP 45 #define ROL_RISKVECTOR_HPP 49 #include "ROL_ParameterList.hpp" 61 std::vector<ROL::Ptr<std::vector<Real> > >
statCon_;
66 ROL::Ptr<Vector<Real> >
vec_;
70 mutable std::vector<ROL::Ptr<std::vector<Real> > >
dualCon_;
75 const Real stat = 1) {
77 if (parlist != ROL::nullPtr) {
79 std::vector<Real> lower, upper;
80 bool activated(
false);
81 RandVarFunctionalInfo<Real>(*parlist,name,
nStatObj_,lower,upper,activated);
82 augmentedObj_ = (nStatObj_ > 0) ?
true :
false;
85 statObj_ = ROL::makePtr<std::vector<Real>>(
nStatObj_,stat);
86 statObj_vec_ = ROL::makePtr<StdVector<Real>>(
statObj_);
90 augmentedObj_ =
false;
96 const Real stat = 1) {
97 int size = parlist.size();
98 statCon_.resize(size); statCon_vec_.resize(size); nStatCon_.resize(size);
99 for (
int i = 0; i < size; ++i) {
100 if (parlist[i] != ROL::nullPtr) {
103 std::vector<Real> lower, upper;
104 bool activated(
false);
105 RandVarFunctionalInfo<Real>(*parlist[i],name,nStatCon_[i],lower,upper,activated);
106 augmentedCon_ = (nStatCon_[i] > 0) ?
true : augmentedCon_;
108 if (nStatCon_[i] > 0) {
109 statCon_[i] = ROL::makePtr<std::vector<Real>>(nStatCon_[i],stat);
110 statCon_vec_[i] = ROL::makePtr<StdVector<Real>>(statCon_[i]);
113 statCon_[i] = ROL::nullPtr;
114 statCon_vec_[i] = ROL::nullPtr;
118 statCon_[i] = ROL::nullPtr;
119 statCon_vec_[i] = ROL::nullPtr;
129 const Real stat = 0 )
130 : statObj_(
ROL::nullPtr), statObj_vec_(
ROL::nullPtr),
131 augmentedObj_(false), nStatObj_(0),
132 augmentedCon_(false),
133 vec_(vec), isDualInitialized_(false) {
138 RiskVector( std::vector<ROL::Ptr<ROL::ParameterList> > &parlist,
140 const Real stat = 0 )
141 : statObj_(
ROL::nullPtr), statObj_vec_(
ROL::nullPtr),
142 augmentedObj_(false), nStatObj_(0),
143 augmentedCon_(false),
144 vec_(vec), isDualInitialized_(false) {
150 std::vector<ROL::Ptr<ROL::ParameterList> > &parlistCon,
152 const Real stat = 0 )
153 : statObj_(
ROL::nullPtr), statObj_vec_(
ROL::nullPtr),
154 augmentedObj_(false), nStatObj_(0),
155 augmentedCon_(false),
156 vec_(vec), isDualInitialized_(false) {
163 const ROL::Ptr<std::vector<Real> > &statObj,
164 const std::vector<ROL::Ptr<std::vector<Real> > > &statCon )
165 : statObj_(
ROL::nullPtr), statObj_vec_(
ROL::nullPtr),
166 augmentedObj_(false), nStatObj_(0), augmentedCon_(false),
167 vec_(vec), isDualInitialized_(false) {
168 if (statObj != ROL::nullPtr) {
170 statObj_vec_ = ROL::makePtr<StdVector<Real>>(
statObj_);
171 augmentedObj_ =
true;
172 nStatObj_ = statObj->size();
174 int size = statCon.size();
175 statCon_.clear(); statCon_vec_.clear(); nStatCon_.clear();
176 statCon_.resize(size,ROL::nullPtr);
177 statCon_vec_.resize(size,ROL::nullPtr);
178 nStatCon_.resize(size,0);
179 for (
int i = 0; i < size; ++i) {
180 if (statCon[i] != ROL::nullPtr) {
181 statCon_[i] = statCon[i];
182 statCon_vec_[i] = ROL::makePtr<StdVector<Real>>(statCon_[i]);
183 augmentedCon_ =
true;
184 nStatCon_[i] = statCon[i]->size();
191 : statObj_(
ROL::nullPtr), statObj_vec_(
ROL::nullPtr),
192 augmentedObj_(false), nStatObj_(0), augmentedCon_(false),
193 vec_(vec), isDualInitialized_(false) {}
198 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
202 int size = statCon_vec_.size();
203 for (
int i = 0; i < size; ++i) {
204 if (statCon_vec_[i] != ROL::nullPtr) {
214 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
218 int size = statCon_vec_.size();
219 for (
int i = 0; i < size; ++i) {
220 if (statCon_vec_[i] != ROL::nullPtr) {
229 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
230 statObj_vec_->scale(alpha);
233 int size = statCon_vec_.size();
234 for (
int i = 0; i < size; ++i) {
235 if (statCon_vec_[i] != ROL::nullPtr) {
236 statCon_vec_[i]->scale(alpha);
245 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
249 int size = statCon_vec_.size();
250 for (
int i = 0; i < size; ++i) {
251 if (statCon_vec_[i] != ROL::nullPtr) {
261 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
265 int size = statCon_vec_.size();
266 for (
int i = 0; i < size; ++i) {
267 if (statCon_vec_[i] != ROL::nullPtr) {
276 return sqrt(
dot(*
this) );
279 ROL::Ptr<Vector<Real> >
clone(
void)
const {
280 ROL::Ptr<std::vector<Real> > e2 = ROL::nullPtr;
281 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
282 e2 = ROL::makePtr<std::vector<Real>>(
nStatObj_,
static_cast<Real
>(0));
284 int size = statCon_vec_.size();
285 std::vector<ROL::Ptr<std::vector<Real> > > e3(size, ROL::nullPtr);
286 for (
int j = 0; j < size; ++j) {
287 if (statCon_vec_[j] != ROL::nullPtr) {
288 e3[j] = ROL::makePtr<std::vector<Real>>(nStatCon_[j],
static_cast<Real
>(0));
291 return ROL::makePtr<RiskVector>(vec_->clone(),e2,e3);
296 if ( !isDualInitialized_ ) {
297 dual_vec1_ = vec_->dual().clone();
298 dualObj_ = ROL::nullPtr;
299 if (statObj_ != ROL::nullPtr) {
300 dualObj_ = ROL::makePtr<std::vector<Real>>(statObj_->size());
302 int size = statCon_.size();
303 dualCon_.clear(); dualCon_.resize(size,ROL::nullPtr);
304 for (
int i = 0; i < size; ++i) {
305 if (statCon_[i] != ROL::nullPtr) {
306 dualCon_[i] = ROL::makePtr<std::vector<Real>>(statCon_[i]->size());
310 isDualInitialized_ =
true;
313 dual_vec1_->set(vec_->dual());
315 if ( augmentedObj_ && statObj_vec_ != ROL::nullPtr ) {
318 if ( augmentedCon_ ) {
319 int size = statCon_.size();
320 for (
int i = 0; i < size; ++i) {
321 if (statCon_[i] != ROL::nullPtr) {
330 ROL::Ptr<Vector<Real> >
basis(
const int i )
const {
331 ROL::Ptr<Vector<Real> > e1;
332 ROL::Ptr<std::vector<Real> > e2 = ROL::nullPtr;
333 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
334 e2 = ROL::makePtr<std::vector<Real>>(
nStatObj_,
static_cast<Real
>(0));
336 int size = statCon_vec_.size();
337 std::vector<ROL::Ptr<std::vector<Real> > > e3(size);
338 for (
int j = 0; j < size; ++j) {
339 if (statCon_vec_[j] != ROL::nullPtr) {
340 e3[j] = ROL::makePtr<std::vector<Real>>(nStatCon_[j],
static_cast<Real
>(0));
343 int n1 = vec_->dimension(), n2 = 0;
344 if (statObj_vec_ != ROL::nullPtr) {
345 n2 = statObj_vec_->dimension();
350 else if (i >= n1 && i < n1+n2) {
351 e1 = vec_->clone(); e1->zero();
352 (*e2)[i-n1] =
static_cast<Real
>(1);
354 else if (i >= n1+n2) {
355 e1 = vec_->clone(); e1->zero();
356 int sum = n1+n2, sum0 = sum;
357 for (
int j = 0; j < size; ++j) {
358 if (statCon_vec_[j] != ROL::nullPtr) {
361 (*e3[j])[i-sum0] = static_cast<Real>(1);
371 return ROL::makePtr<RiskVector<Real>>(e1,e2,e3);
374 void applyUnary(
const Elementwise::UnaryFunction<Real> &f ) {
376 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
377 statObj_vec_->applyUnary(f);
380 int size = statCon_vec_.size();
381 for (
int i = 0; i < size; ++i) {
382 if (statCon_vec_[i] != ROL::nullPtr) {
383 statCon_vec_[i]->applyUnary(f);
392 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
396 int size = statCon_vec_.size();
397 for (
int i = 0; i < size; ++i) {
398 if (statCon_vec_[i] != ROL::nullPtr) {
405 Real
reduce(
const Elementwise::ReductionOp<Real> &r )
const {
406 Real result = r.initialValue();
407 r.reduce(vec_->reduce(r),result);
408 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
409 r.reduce(statObj_vec_->reduce(r),result);
412 int size = statCon_vec_.size();
413 for (
int i = 0; i < size; ++i) {
414 if (statCon_vec_[i] != ROL::nullPtr) {
415 r.reduce(statCon_vec_[i]->
reduce(r),result);
424 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
425 statObj_vec_->setScalar(C);
428 int size = statCon_vec_.size();
429 for (
int i = 0; i < size; ++i) {
430 if (statCon_vec_[i] != ROL::nullPtr) {
431 statCon_vec_[i]->setScalar(C);
438 vec_->randomize(l,u);
439 if (augmentedObj_ && statObj_vec_ != ROL::nullPtr) {
440 statObj_vec_->randomize(l,u);
443 int size = statCon_vec_.size();
444 for (
int i = 0; i < size; ++i) {
445 if (statCon_vec_[i] != ROL::nullPtr) {
446 statCon_vec_[i]->randomize(l,u);
453 int dim = vec_->dimension();
455 dim += statObj_vec_->dimension();
458 int size = statCon_vec_.size();
459 for (
int i = 0; i < size; ++i) {
460 if (statCon_vec_[i] != ROL::nullPtr) {
461 dim += statCon_vec_[i]->dimension();
471 ROL::Ptr<const StdVector<Real>>
476 else if (comp == 1) {
477 return statCon_vec_[index];
485 ROL::Ptr<StdVector<Real>>
490 else if (comp == 1) {
491 return statCon_vec_[index];
510 ROL::Ptr<std::vector<Real>>
517 else if (comp == 1) {
519 return statCon_[index];
528 ROL::Ptr<const std::vector<Real>>
535 else if (comp == 1) {
537 return statCon_[index];
546 void setStatistic(
const Real stat,
const int comp = 0,
const int index = 0) {
548 if ( augmentedObj_ ) {
549 statObj_->assign(nStatObj_,stat);
552 else if ( comp == 1 ) {
553 if ( augmentedCon_ ) {
554 statCon_[index]->assign(nStatCon_[index],stat);
562 void setStatistic(
const std::vector<Real> &stat,
const int comp = 0,
const int index = 0) {
564 if ( augmentedObj_ ) {
565 if ( nStatObj_ != static_cast<int>(stat.size()) ) {
568 statObj_->assign(stat.begin(),stat.end());
571 else if ( comp == 1) {
572 if ( augmentedCon_ ) {
573 if ( nStatCon_[index] != static_cast<int>(stat.size()) ) {
576 statCon_[index]->assign(stat.begin(),stat.end());
ROL::Ptr< std::vector< Real > > dualObj_
Real norm(void) const
Returns where .
ROL::Ptr< std::vector< Real > > getStatistic(const int comp=0, const int index=0)
RiskVector(ROL::Ptr< ROL::ParameterList > &parlist, const ROL::Ptr< Vector< Real > > &vec, const Real stat=0)
void set(const Vector< Real > &x)
Set where .
ROL::Ptr< Vector< Real > > clone(void) const
Clone to make a new (uninitialized) vector.
std::vector< int > nStatCon_
std::vector< ROL::Ptr< std::vector< Real > > > dualCon_
void scale(const Real alpha)
Compute where .
RiskVector(std::vector< ROL::Ptr< ROL::ParameterList > > &parlist, const ROL::Ptr< Vector< Real > > &vec, const Real stat=0)
void setStatistic(const std::vector< Real > &stat, const int comp=0, const int index=0)
ROL::Ptr< Vector< Real > > dual_vec1_
void setScalar(const Real C)
Set where .
ROL::Ptr< StdVector< Real > > getStatisticVector(const int comp, const int index=0)
int dimension(void) const
Return dimension of the vector space.
RiskVector(ROL::Ptr< ROL::ParameterList > &parlistObj, std::vector< ROL::Ptr< ROL::ParameterList > > &parlistCon, const ROL::Ptr< Vector< Real > > &vec, const Real stat=0)
void axpy(const Real alpha, const Vector< Real > &x)
Compute where .
void setStatistic(const Real stat, const int comp=0, const int index=0)
Defines the linear algebra or vector space interface.
ROL::Ptr< const Vector< Real > > getVector(void) const
void setVector(const Vector< Real > &vec)
void plus(const Vector< Real > &x)
Compute , where .
ROL::Ptr< std::vector< Real > > statObj_
RiskVector(const ROL::Ptr< Vector< Real > > &vec, const ROL::Ptr< std::vector< Real > > &statObj, const std::vector< ROL::Ptr< std::vector< Real > > > &statCon)
void initializeCon(std::vector< ROL::Ptr< ROL::ParameterList > > &parlist, const Real stat=1)
std::vector< ROL::Ptr< StdVector< Real > > > statCon_vec_
void randomize(const Real l=0.0, const Real u=1.0)
Set vector to be uniform random between [l,u].
void applyBinary(const Elementwise::BinaryFunction< Real > &f, const Vector< Real > &x)
Real dot(const Vector< Real > &x) const
Compute where .
Real reduce(const Elementwise::ReductionOp< Real > &r) const
ROL::Ptr< Vector< Real > > getVector(void)
ROL::Ptr< const StdVector< Real > > getStatisticVector(const int comp, const int index=0) const
ROL::Ptr< RiskVector< Real > > dual_vec_
void applyUnary(const Elementwise::UnaryFunction< Real > &f)
ROL::Ptr< const std::vector< Real > > getStatistic(const int comp=0, const int index=0) const
RiskVector(const ROL::Ptr< Vector< Real > > &vec)
ROL::Ptr< StdVector< Real > > statObj_vec_
void initializeObj(ROL::Ptr< ROL::ParameterList > &parlist, const Real stat=1)
ROL::Ptr< Vector< Real > > vec_
ROL::Ptr< Vector< Real > > basis(const int i) const
Return i-th basis vector.
const Vector< Real > & dual(void) const
Return dual representation of , for example, the result of applying a Riesz map, or change of basis...
std::vector< ROL::Ptr< std::vector< Real > > > statCon_