44 #ifndef ROL_SROMGENERATOR_HPP 45 #define ROL_SROMGENERATOR_HPP 71 std::vector<Teuchos::RCP<Distribution<Real> > >
dist_;
86 std::vector<std::vector<Real> > pts;
87 std::vector<Real> wts;
90 pts.push_back(*(atom.
getAtom(i)));
94 numMySamples_ = wts.size();
100 pt = pts[i]; ind.clear();
104 err += std::pow(pt[d] - pts[j][d],2);
106 err = std::sqrt(err);
110 pts[i][d] += pts[j][d];
115 if ( ind.size() > 0 ) {
117 pts[i][d] /= (Real)(ind.size()+1);
119 for (
int k = ind.size()-1; k >= 0; k--) {
120 pts.erase(pts.begin()+ind[k]);
121 wts.erase(wts.begin()+ind[k]);
124 numMySamples_ = wts.size();
127 Real psum = 0.0, sum = 0.0;
146 dimension_(dist.size()) {
148 Teuchos::ParameterList list = parlist.sublist(
"SOL").sublist(
"Sample Generator").sublist(
"SROM");
149 numSamples_ = list.get(
"Number of Samples",50);
150 adaptive_ = list.get(
"Adaptive Sampling",
false);
151 numNewSamples_ = list.get(
"Number of New Samples Per Adaptation",0);
152 print_ = list.get(
"Output to Screen",
false);
153 ptol_ = list.get(
"Probability Tolerance",1.e2*std::sqrt(
ROL_EPSILON));
154 atol_ = list.get(
"Atom Tolerance",1.e2*std::sqrt(
ROL_EPSILON));
159 int frac = numSamples_ / nProc;
160 int rem = numSamples_ % nProc;
161 numMySamples_ = frac + ((rank < rem) ? 1 : 0);
163 Teuchos::RCP<ProbabilityVector<Real> > prob, prob_lo, prob_hi, prob_eq;
164 Teuchos::RCP<AtomVector<Real> > atom, atom_lo, atom_hi, atom_eq;
165 Teuchos::RCP<Vector<Real> > x, x_lo, x_hi, x_eq;
166 initialize_vectors(prob,prob_lo,prob_hi,prob_eq,atom,atom_lo,atom_hi,atom_eq,x,x_lo,x_hi,x_eq,bman);
167 Teuchos::RCP<Vector<Real> > l
168 = Teuchos::rcp(
new StdVector<Real>(Teuchos::rcp(
new std::vector<Real>(1,0.))));
169 bool optProb =
false, optAtom =
true;
170 for (
int i = 0; i < 2; i++ ) {
171 if ( i == 0 ) { optProb =
false; optAtom =
true; }
172 if ( i == 1 ) { optProb =
true; optAtom =
true; }
174 std::vector<Teuchos::RCP<Objective<Real> > > obj_vec;
175 Teuchos::RCP<Objective<Real> > obj;
178 Teuchos::RCP<BoundConstraint<Real> > bnd
180 Teuchos::RCP<EqualityConstraint<Real> > con
183 if ( print_ ) { std::cout <<
"\nCheck derivatives of CDFObjective\n"; }
185 if ( print_ ) { std::cout <<
"\nCheck derivatives of MomentObjective\n"; }
187 if ( print_ ) { std::cout <<
"\nCheck derivatives of LinearCombinationObjective\n"; }
189 if ( print_ && optProb ) { std::cout <<
"\nCheck ScalarLinearEqualityConstraint\n"; }
192 Teuchos::RCP<Algorithm<Real> > algo;
195 Teuchos::RCP<Teuchos::ParameterList> plist = Teuchos::rcp(&list,
false);
197 algo->run(optProblem,print_);
200 algo->run(*x,*obj,*bnd,print_);
212 typw.clear(); typx.clear();
213 typw.resize(numMySamples_,(Real)(numSamples_*numSamples_));
214 typx.resize(numMySamples_*dimension_,0.);
215 Real mean = 1., var = 1.;
217 mean = std::abs(dist_[j]->moment(1));
218 var = dist_[j]->moment(2) - mean*mean;
219 mean = ((mean >
ROL_EPSILON) ? mean : std::sqrt(var));
221 typx[i*dimension_ + j] = 1./(mean*mean);
240 std::vector<Real> typx, typw;
243 std::vector<Real> pt(dimension_*numMySamples_,0.), wt(numMySamples_,1./(Real)numSamples_);
244 std::vector<Real> pt_lo(dimension_*numMySamples_,0.), pt_hi(dimension_*numMySamples_,0.);
245 std::vector<Real> wt_lo(numMySamples_,0.), wt_hi(numMySamples_,1.);
246 std::vector<Real> pt_eq(dimension_*numMySamples_,0.), wt_eq(numMySamples_,1.);
247 Real lo = 0., hi = 0.;
250 lo = dist_[j]->lowerBound();
251 hi = dist_[j]->upperBound();
253 pt[i*dimension_ + j] = dist_[j]->invertCDF((Real)rand()/(Real)RAND_MAX);
255 pt_lo[i*dimension_ + j] = lo;
256 pt_hi[i*dimension_ + j] = hi;
261 Teuchos::rcp(
new std::vector<Real>(wt)),
262 Teuchos::rcp(
new std::vector<Real>(typw)),bman));
264 Teuchos::rcp(
new std::vector<Real>(pt)),numMySamples_,dimension_,
265 Teuchos::rcp(
new std::vector<Real>(typx)),bman));
269 Teuchos::rcp(
new std::vector<Real>(wt_lo)),
270 Teuchos::rcp(
new std::vector<Real>(typw)),bman));
272 Teuchos::rcp(
new std::vector<Real>(wt_hi)),
273 Teuchos::rcp(
new std::vector<Real>(typw)),bman));
276 Teuchos::rcp(
new std::vector<Real>(pt_lo)),numMySamples_,dimension_,
277 Teuchos::rcp(
new std::vector<Real>(typx)),bman));
279 Teuchos::rcp(
new std::vector<Real>(pt_hi)),numMySamples_,dimension_,
280 Teuchos::rcp(
new std::vector<Real>(typx)),bman));
286 Teuchos::rcp(
new std::vector<Real>(wt_eq)),
287 Teuchos::rcp(
new std::vector<Real>(typw)), bman));
289 Teuchos::rcp(
new std::vector<Real>(pt_eq)),numMySamples_,dimension_,
290 Teuchos::rcp(
new std::vector<Real>(typx)), bman));
298 const bool optProb,
const bool optAtom,
299 Teuchos::ParameterList &list)
const {
301 Real scale = list.get(
"CDF Smoothing Parameter",1.e-2);
302 obj_vec.push_back(Teuchos::rcp(
new CDFObjective<Real>(dist,bman,scale,optProb,optAtom)));
304 Teuchos::Array<int> tmp_order
305 = Teuchos::getArrayFromStringParameter<int>(list,
"Moments");
306 std::vector<int> order(tmp_order.size(),0);
307 for (
int i = 0; i < tmp_order.size(); i++) {
308 order[i] =
static_cast<int>(tmp_order[i]);
312 Teuchos::Array<Real> tmp_coeff
313 = Teuchos::getArrayFromStringParameter<Real>(list,
"Coefficients");
314 std::vector<Real> coeff(2,0.);
315 coeff[0] = tmp_coeff[0]; coeff[1] = tmp_coeff[1];
320 Teuchos::ParameterList &parlist,
321 const bool optProb)
const {
322 std::string type = parlist.sublist(
"Step").get(
"Type",
"Trust Region");
324 if ( type ==
"Moreau Yosida" ) {
325 algo = Teuchos::rcp(
new Algorithm<Real>(
"Moreau-Yosida Penalty",parlist,
false));
327 else if ( type ==
"Augmented Lagrangian" ) {
328 algo = Teuchos::rcp(
new Algorithm<Real>(
"Augmented Lagrangian",parlist,
false));
331 algo = Teuchos::rcp(
new Algorithm<Real>(
"Interior Point",parlist,
false));
335 algo = Teuchos::rcp(
new Algorithm<Real>(
"Trust Region",parlist,
false));
342 const bool optProb,
const bool optAtom) {
344 std::vector<Real> typx, typw;
347 std::vector<Real> pt(dimension_*numMySamples_,0.), wt(numMySamples_,0.);
349 wt[i] = (optProb ? (Real)rand()/(Real)RAND_MAX : 0);
351 pt[i*dimension_ + j] = (optAtom ? dist_[j]->invertCDF((Real)rand()/(Real)RAND_MAX) : 0);
354 Teuchos::RCP<ProbabilityVector<Real> > dprob
356 Teuchos::rcp(
new std::vector<Real>(wt)),
357 Teuchos::rcp(
new std::vector<Real>(typw)),bman));
358 Teuchos::RCP<AtomVector<Real> > datom
360 Teuchos::rcp(
new std::vector<Real>(pt)),numMySamples_,dimension_,
361 Teuchos::rcp(
new std::vector<Real>(typx)),bman));
364 obj->checkGradient(x,d,print_);
365 obj->checkHessVec(x,d,print_);
371 const bool optProb) {
375 std::vector<Real> typx, typw;
378 std::vector<Real> pt(dimension_*numMySamples_,0.), wt(numMySamples_,0.);
380 wt[i] = (Real)rand()/(Real)RAND_MAX;
382 pt[i*dimension_ + j] = dist_[j]->invertCDF((Real)rand()/(Real)RAND_MAX);
385 Teuchos::RCP<ProbabilityVector<Real> > dprob
387 Teuchos::rcp(
new std::vector<Real>(wt)),
388 Teuchos::rcp(
new std::vector<Real>(typw)),bman));
389 Teuchos::RCP<AtomVector<Real> > datom
391 Teuchos::rcp(
new std::vector<Real>(pt)),numMySamples_,dimension_,
392 Teuchos::rcp(
new std::vector<Real>(typx)),bman));
395 con->checkApplyJacobian(x,d,c,print_);
396 con->checkAdjointConsistencyJacobian(c,d,x,print_);
Provides the interface to evaluate objective functions.
Provides the std::vector implementation of the ROL::Vector interface.
const Real getProbability(const int i) const
This equality constraint defines an affine hyperplane.
void check_objective(const Vector< Real > &x, const Teuchos::RCP< Objective< Real > > &obj, const Teuchos::RCP< BatchManager< Real > > &bman, const bool optProb, const bool optAtom)
void check_constraint(const Vector< Real > &x, const Teuchos::RCP< EqualityConstraint< Real > > &con, const Teuchos::RCP< BatchManager< Real > > &bman, const bool optProb)
Defines the linear algebra or vector space interface.
void sumAll(Real *input, Real *output, int dim) const
Defines the equality constraint operator interface.
Teuchos::RCP< const std::vector< Real > > getAtom(const int i) const
void initialize_optimizer(Teuchos::RCP< Algorithm< Real > > &algo, Teuchos::ParameterList &parlist, const bool optProb) const
void get_scaling_vectors(std::vector< Real > &typw, std::vector< Real > &typx) const
Provides an interface to run optimization algorithms.
Teuchos::ParameterList parlist_
Provides the std::vector implementation of the ROL::Vector interface.
Provides the std::vector implementation of the ROL::Vector interface.
void initialize_vectors(Teuchos::RCP< ProbabilityVector< Real > > &prob, Teuchos::RCP< ProbabilityVector< Real > > &prob_lo, Teuchos::RCP< ProbabilityVector< Real > > &prob_hi, Teuchos::RCP< ProbabilityVector< Real > > &prob_eq, Teuchos::RCP< AtomVector< Real > > &atom, Teuchos::RCP< AtomVector< Real > > &atom_lo, Teuchos::RCP< AtomVector< Real > > &atom_hi, Teuchos::RCP< AtomVector< Real > > &atom_eq, Teuchos::RCP< Vector< Real > > &vec, Teuchos::RCP< Vector< Real > > &vec_lo, Teuchos::RCP< Vector< Real > > &vec_hi, Teuchos::RCP< Vector< Real > > &vec_eq, const Teuchos::RCP< BatchManager< Real > > &bman) const
SROMGenerator(Teuchos::ParameterList &parlist, const Teuchos::RCP< BatchManager< Real > > &bman, const std::vector< Teuchos::RCP< Distribution< Real > > > &dist)
Provides the interface to apply upper and lower bound constraints.
void initialize_objective(std::vector< Teuchos::RCP< Objective< Real > > > &obj_vec, Teuchos::RCP< Objective< Real > > &obj, const std::vector< Teuchos::RCP< Distribution< Real > > > &dist, const Teuchos::RCP< BatchManager< Real > > &bman, const bool optProb, const bool optAtom, Teuchos::ParameterList &list) const
std::vector< Teuchos::RCP< Distribution< Real > > > dist_
void setPoints(std::vector< std::vector< Real > > &p)
void setWeights(std::vector< Real > &w)
void pruneSamples(const ProbabilityVector< Real > &prob, const AtomVector< Real > &atom)
static const double ROL_EPSILON
Platform-dependent machine epsilon.