47 Real
random(
const Teuchos::RCP<
const Teuchos::Comm<int> > &comm) {
49 if ( Teuchos::rank<int>(*comm)==0 ) {
50 val = (Real)rand()/(Real)RAND_MAX;
52 Teuchos::broadcast<int,Real>(*comm,0,1,&val);
56 int main(
int argc,
char* argv[]) {
58 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
59 Teuchos::RCP<const Teuchos::Comm<int> > comm
60 = Teuchos::DefaultComm<int>::getComm();
63 int iprint = argc - 1;
64 Teuchos::RCP<std::ostream> outStream;
65 Teuchos::oblackholestream bhs;
66 if (iprint > 0 && Teuchos::rank<int>(*comm)==0)
67 outStream = Teuchos::rcp(&std::cout,
false);
69 outStream = Teuchos::rcp(&bhs,
false);
78 std::string filename =
"input.xml";
79 Teuchos::RCP<Teuchos::ParameterList> parlist = Teuchos::rcp(
new Teuchos::ParameterList() );
80 Teuchos::updateParametersFromXmlFile( filename, parlist.ptr() );
82 parlist->sublist(
"Status Test").set(
"Gradient Tolerance",1.e-8);
83 parlist->sublist(
"Status Test").set(
"Step Tolerance",1.e-14);
84 parlist->sublist(
"Status Test").set(
"Iteration Limit",100);
85 Teuchos::RCP<ROL::Algorithm<double> > algo;
91 Teuchos::RCP<std::vector<double> > x1_rcp = Teuchos::rcp(
new std::vector<double>(nx+2,0.0) );
93 Teuchos::RCP<std::vector<double> > x2_rcp = Teuchos::rcp(
new std::vector<double>(nx+2,0.0) );
95 Teuchos::RCP<std::vector<double> > x3_rcp = Teuchos::rcp(
new std::vector<double>(nx+2,0.0) );
97 Teuchos::RCP<std::vector<double> > z_rcp = Teuchos::rcp(
new std::vector<double>(nx+2,0.0) );
99 Teuchos::RCP<std::vector<double> > xr_rcp = Teuchos::rcp(
new std::vector<double>(nx+2,0.0) );
101 Teuchos::RCP<std::vector<double> > d_rcp = Teuchos::rcp(
new std::vector<double>(nx+2,0.0) );
103 for (
int i = 0; i < nx+2; i++ ) {
104 (*xr_rcp)[i] = random<double>(comm);
105 (*d_rcp)[i] = random<double>(comm);
108 Teuchos::RCP<std::vector<double> > u_rcp = Teuchos::rcp(
new std::vector<double>(nx,1.0) );
110 Teuchos::RCP<std::vector<double> > p_rcp = Teuchos::rcp(
new std::vector<double>(nx,0.0) );
112 Teuchos::RCP<ROL::Vector<double> > up = Teuchos::rcp(&u,
false);
113 Teuchos::RCP<ROL::Vector<double> > pp = Teuchos::rcp(&p,
false);
120 std::vector<double> tmp(2,0.0); tmp[0] = -1.0; tmp[1] = 1.0;
121 std::vector<std::vector<double> > bounds(dim,tmp);
122 Teuchos::RCP<ROL::BatchManager<double> > bman
124 Teuchos::RCP<ROL::SampleGenerator<double> > sampler
130 double alpha = 1.e-3;
131 Teuchos::RCP<ROL::ParametrizedObjective_SimOpt<double> > pobjSimOpt
133 Teuchos::RCP<ROL::ParametrizedEqualityConstraint_SimOpt<double> > pconSimOpt
135 Teuchos::RCP<ROL::ParametrizedObjective<double> > pObj
137 Teuchos::RCP<ROL::Objective<double> > obj;
139 *outStream <<
"Check Derivatives of Parametrized Objective Function\n";
141 pObj->setParameter(sampler->getMyPoint(0));
142 pObj->checkGradient(x1,d,
true,*outStream);
143 pObj->checkHessVec(x1,d,
true,*outStream);
147 *outStream <<
"\nSOLVE SMOOTHED CONDITIONAL VALUE AT RISK WITH TRUST REGION\n";
149 Teuchos::ParameterList list1;
150 list1.sublist(
"SOL").set(
"Stochastic Optimization Type",
"Risk Averse");
151 list1.sublist(
"SOL").set(
"Store Sampled Value and Gradient",
true);
152 list1.sublist(
"SOL").sublist(
"Risk Measure").set(
"Name",
"CVaR");
153 list1.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Confidence Level",0.99);
154 list1.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Convex Combination Parameter",1.0);
155 list1.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Smoothing Parameter",1.e-2);
156 list1.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").set(
"Name",
"Parabolic");
157 list1.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").sublist(
"Parabolic").set(
"Lower Bound",-0.5);
158 list1.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").sublist(
"Parabolic").set(
"Upper Bound", 0.5);
160 Teuchos::RCP<ROL::Vector<double> > x1p = Teuchos::rcp(&x1,
false);
167 clock_t start = clock();
168 algo->run(optProb1,
true,*outStream);
169 *outStream <<
"Optimization time: " << (double)(clock()-start)/(
double)CLOCKS_PER_SEC <<
" seconds.\n";
173 *outStream <<
"\nSOLVE SMOOTHED CONDITIONAL VALUE AT RISK WITH TRUST REGION\n";
174 Teuchos::ParameterList list2;
175 list2.sublist(
"SOL").set(
"Stochastic Optimization Type",
"Risk Averse");
176 list2.sublist(
"SOL").set(
"Store Sampled Value and Gradient",
true);
177 list2.sublist(
"SOL").sublist(
"Risk Measure").set(
"Name",
"CVaR");
178 list2.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Confidence Level",0.99);
179 list2.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Convex Combination Parameter",1.0);
180 list2.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Smoothing Parameter",1.e-4);
181 list2.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").set(
"Name",
"Parabolic");
182 list2.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").sublist(
"Parabolic").set(
"Lower Bound",-0.5);
183 list2.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").sublist(
"Parabolic").set(
"Upper Bound", 0.5);
185 Teuchos::RCP<ROL::Vector<double> > x2p = Teuchos::rcp(&x2,
false);
194 algo->run(optProb2,
true,*outStream);
195 *outStream <<
"Optimization time: " << (double)(clock()-start)/(
double)CLOCKS_PER_SEC <<
" seconds.\n";
199 *outStream <<
"\nSOLVE SMOOTHED CONDITIONAL VALUE AT RISK WITH TRUST REGION\n";
200 Teuchos::ParameterList list3;
201 list3.sublist(
"SOL").set(
"Stochastic Optimization Type",
"Risk Averse");
202 list3.sublist(
"SOL").set(
"Store Sampled Value and Gradient",
true);
203 list3.sublist(
"SOL").sublist(
"Risk Measure").set(
"Name",
"CVaR");
204 list3.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Confidence Level",0.99);
205 list3.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Convex Combination Parameter",1.0);
206 list3.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Smoothing Parameter",1.e-6);
207 list3.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").set(
"Name",
"Parabolic");
208 list3.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").sublist(
"Parabolic").set(
"Lower Bound",-0.5);
209 list3.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").sublist(
"Parabolic").set(
"Upper Bound", 0.5);
211 Teuchos::RCP<ROL::Vector<double> > x3p = Teuchos::rcp(&x3,
false);
220 algo->run(optProb3,
true,*outStream);
221 *outStream <<
"Optimization time: " << (double)(clock()-start)/(
double)CLOCKS_PER_SEC <<
" seconds.\n";
225 *outStream <<
"\nSOLVE NONSMOOTH CVAR PROBLEM WITH BUNDLE TRUST REGION\n";
226 Teuchos::ParameterList list;
227 list.sublist(
"SOL").set(
"Stochastic Optimization Type",
"Risk Averse");
228 list.sublist(
"SOL").set(
"Store Sampled Value and Gradient",
true);
229 list.sublist(
"SOL").sublist(
"Risk Measure").set(
"Name",
"CVaR");
230 list.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Confidence Level",0.99);
231 list.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Convex Combination Parameter",1.0);
232 list.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").set(
"Smoothing Parameter",0.);
233 list.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").set(
"Name",
"Dirac");
234 list.sublist(
"SOL").sublist(
"Risk Measure").sublist(
"CVaR").sublist(
"Distribution").sublist(
"Dirac").set(
"Location",0.);
236 Teuchos::RCP<ROL::Vector<double> > zp = Teuchos::rcp(&z,
false);
243 parlist->sublist(
"Status Test").set(
"Iteration Limit",1000);
244 parlist->sublist(
"Step").sublist(
"Bundle").set(
"Epsilon Solution Tolerance",1.e-8);
247 algo->run(optProb,
true,*outStream);
248 *outStream <<
"Optimization time: " << (double)(clock()-start)/(
double)CLOCKS_PER_SEC <<
" seconds.\n";
252 *outStream <<
"\nSUMMARY:\n";
253 *outStream <<
" ---------------------------------------------\n";
255 *outStream <<
" ---------------------------------------------\n";
257 Teuchos::RCP<ROL::Vector<double> > cErr = x1.
clone();
258 cErr->set(x1); cErr->axpy(-1.0,z);
259 double CTRLerror = cErr->norm();
260 double TOTerror1 = std::sqrt(std::pow(VARerror,2)+std::pow(CTRLerror,2));
262 *outStream <<
" Value-At-Risk Error = " << VARerror <<
"\n";
263 *outStream <<
" Control Error = " << CTRLerror <<
"\n";
264 *outStream <<
" Total Error = " << TOTerror1 <<
"\n";
265 *outStream <<
" ---------------------------------------------\n";
268 cErr->set(x2); cErr->axpy(-1.0,z);
269 CTRLerror = cErr->norm();
270 double TOTerror2 = std::sqrt(std::pow(VARerror,2)+std::pow(CTRLerror,2));
272 *outStream <<
" Value-At-Risk Error = " << VARerror <<
"\n";
273 *outStream <<
" Control Error = " << CTRLerror <<
"\n";
274 *outStream <<
" Total Error = " << TOTerror2 <<
"\n";
275 *outStream <<
" ---------------------------------------------\n";
278 cErr->set(x3); cErr->axpy(-1.0,z);
279 CTRLerror = cErr->norm();
280 double TOTerror3 = std::sqrt(std::pow(VARerror,2)+std::pow(CTRLerror,2));
282 *outStream <<
" Value-At-Risk Error = " << VARerror <<
"\n";
283 *outStream <<
" Control Error = " << CTRLerror <<
"\n";
284 *outStream <<
" Total Error = " << TOTerror3 <<
"\n";
285 *outStream <<
" ---------------------------------------------\n\n";
287 errorFlag += ((TOTerror1 < 90.*TOTerror2) && (TOTerror2 < 90.*TOTerror3)) ? 1 : 0;
289 catch (std::logic_error err) {
290 *outStream << err.what() <<
"\n";
295 std::cout <<
"End Result: TEST FAILED\n";
297 std::cout <<
"End Result: TEST PASSED\n";
int main(int argc, char *argv[])
Real random(const Teuchos::RCP< const Teuchos::Comm< int > > &comm)
Provides the std::vector implementation of the ROL::Vector interface.
std::vector< std::vector< Real > > checkObjectiveGradient(const Vector< Real > &d, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
Provides an interface to run optimization algorithms.
virtual Teuchos::RCP< Vector< Real > > clone() const
Clone to make a new (uninitialized) vector.
std::vector< std::vector< Real > > checkObjectiveHessVec(const Vector< Real > &v, const bool printToStream=true, std::ostream &outStream=std::cout, const int numSteps=ROL_NUM_CHECKDERIV_STEPS, const int order=1)
void set(const Vector< Real > &x)
Set where .
void setSolutionStatistic(const Real stat)
Real getSolutionStatistic(void)