56 #include "Teuchos_GlobalMPISession.hpp"
60 int main(
int argc,
char *argv[]) {
62 Teuchos::GlobalMPISession mpiSession(&argc, &argv);
66 int iprint = argc - 1;
67 ROL::Ptr<std::ostream> outStream;
70 outStream = ROL::makePtrFromRef(std::cout);
72 outStream = ROL::makePtrFromRef(bhs);
77 RealT tol = std::sqrt(ROL::ROL_EPSILON<RealT>());
79 ROL::Ptr<ROL::Vector<RealT>> sol, mul, x, lam, l, u, c;
80 ROL::Ptr<ROL::Objective<RealT>> obj;
81 ROL::Ptr<ROL::Constraint<RealT>> con;
82 ROL::Ptr<ROL::BoundConstraint<RealT>> bnd;
83 ROL::Ptr<ROL::PolyhedralProjection<RealT>> proj;
84 ROL::ParameterList list;
85 list.sublist(
"General").set(
"Output Level",2);
86 std::vector<RealT> data;
88 *outStream << std::endl <<
"Hock and Schittkowski Problem #41" << std::endl << std::endl;
96 lam = mul->clone(); lam->set(*mul);
97 x = sol->clone(); x->set(*sol);
98 l = sol->clone(); l->zero();
99 u = sol->clone(); u->setScalar(static_cast<RealT>(1));
100 c = mul->dual().clone();
102 list.sublist(
"General").sublist(
"Polyhedral Projection").set(
"Type",
"Dai-Fletcher");
103 proj = ROL::PolyhedralProjectionFactory<RealT>(*sol,sol->dual(),bnd,con,*lam,*c,list);
104 proj->project(*x,*outStream);
106 con->value(*c,*x,tol);
109 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(sol)->getVector();
110 *outStream <<
" Initial: x1 = " << data[0] <<
" x2 = " << data[1]
111 <<
" x3 = " << data[2] << std::endl;
112 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
113 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
114 <<
" x3 = " << data[2] << std::endl;
115 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
116 *outStream <<
" Multiplier: l1 = " << data[0] << std::endl;
118 *outStream << std::endl;
119 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
120 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
122 errorFlag += !bnd->isFeasible(*x);
123 errorFlag += (cnorm > tol);
125 *outStream << std::endl <<
"Hock and Schittkowski Problem #41" << std::endl << std::endl;
133 lam = mul->clone(); lam->set(*mul);
134 x = sol->clone(); x->set(*sol);
135 l = sol->clone(); l->zero();
136 u = sol->clone(); u->setScalar(static_cast<RealT>(1));
137 c = mul->dual().clone();
139 list.sublist(
"General").sublist(
"Polyhedral Projection").set(
"Type",
"Ridders");
140 proj = ROL::PolyhedralProjectionFactory<RealT>(*sol,sol->dual(),bnd,con,*lam,*c,list);
141 proj->project(*x,*outStream);
143 con->value(*c,*x,tol);
146 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(sol)->getVector();
147 *outStream <<
" Initial: x1 = " << data[0] <<
" x2 = " << data[1]
148 <<
" x3 = " << data[2] << std::endl;
149 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
150 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
151 <<
" x3 = " << data[2] << std::endl;
152 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
153 *outStream <<
" Multiplier: l1 = " << data[0] << std::endl;
155 *outStream << std::endl;
156 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
157 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
159 errorFlag += !bnd->isFeasible(*x);
160 errorFlag += (cnorm > tol);
162 *outStream << std::endl <<
"Hock and Schittkowski Problem #41" << std::endl << std::endl;
170 lam = mul->clone(); lam->set(*mul);
171 x = sol->clone(); x->set(*sol);
172 l = sol->clone(); l->zero();
173 u = sol->clone(); u->setScalar(static_cast<RealT>(1));
174 c = mul->dual().clone();
176 list.sublist(
"General").sublist(
"Polyhedral Projection").set(
"Type",
"Brents");
177 proj = ROL::PolyhedralProjectionFactory<RealT>(*sol,sol->dual(),bnd,con,*lam,*c,list);
178 proj->project(*x,*outStream);
180 con->value(*c,*x,tol);
183 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(sol)->getVector();
184 *outStream <<
" Initial: x1 = " << data[0] <<
" x2 = " << data[1]
185 <<
" x3 = " << data[2] << std::endl;
186 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
187 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
188 <<
" x3 = " << data[2] << std::endl;
189 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
190 *outStream <<
" Multiplier: l1 = " << data[0] << std::endl;
192 *outStream << std::endl;
193 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
194 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
196 errorFlag += !bnd->isFeasible(*x);
197 errorFlag += (cnorm > tol);
199 *outStream << std::endl <<
"Hock and Schittkowski Problem #53" << std::endl << std::endl;
207 lam = mul->clone(); lam->set(*mul);
208 x = sol->clone(); x->set(*sol);
209 l = sol->clone(); l->zero();
210 u = sol->clone(); u->setScalar(static_cast<RealT>(1));
211 c = mul->dual().clone();
213 list.sublist(
"General").sublist(
"Polyhedral Projection").set(
"Type",
"Dykstra");
214 proj = ROL::PolyhedralProjectionFactory<RealT>(*sol,sol->dual(),bnd,con,*lam,*c,list);
215 proj->project(*x,*outStream);
217 con->value(*c,*x,tol);
220 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(sol)->getVector();
221 *outStream <<
" Initial: x1 = " << data[0] <<
" x2 = " << data[1]
222 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
223 <<
" x5 = " << data[4] << std::endl;
224 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
225 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
226 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
227 <<
" x5 = " << data[4] << std::endl;
228 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
229 *outStream <<
" Multiplier: l1 = " << data[0] <<
" l2 = " << data[1]
230 <<
" l3 = " << data[2] << std::endl;
232 *outStream << std::endl;
233 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
234 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
236 errorFlag += !bnd->isFeasible(*x);
237 errorFlag += (cnorm > tol);
239 *outStream << std::endl <<
"Hock and Schittkowski Problem #53" << std::endl << std::endl;
247 lam = mul->clone(); lam->set(*mul);
248 x = sol->clone(); x->set(*sol);
249 l = sol->clone(); l->zero();
250 u = sol->clone(); u->setScalar(static_cast<RealT>(1));
251 c = mul->dual().clone();
253 list.sublist(
"General").sublist(
"Polyhedral Projection").set(
"Type",
"Douglas-Rachford");
254 proj = ROL::PolyhedralProjectionFactory<RealT>(*sol,sol->dual(),bnd,con,*lam,*c,list);
255 proj->project(*x,*outStream);
257 con->value(*c,*x,tol);
260 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(sol)->getVector();
261 *outStream <<
" Initial: x1 = " << data[0] <<
" x2 = " << data[1]
262 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
263 <<
" x5 = " << data[4] << std::endl;
264 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
265 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
266 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
267 <<
" x5 = " << data[4] << std::endl;
268 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
269 *outStream <<
" Multiplier: l1 = " << data[0] <<
" l2 = " << data[1]
270 <<
" l3 = " << data[2] << std::endl;
272 *outStream << std::endl;
273 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
274 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
276 errorFlag += !bnd->isFeasible(*x);
277 errorFlag += (cnorm > tol);
279 *outStream << std::endl <<
"Hock and Schittkowski Problem #55" << std::endl << std::endl;
293 lam = mul->clone(); lam->set(*mul);
294 x = sol->clone(); x->set(*sol);
295 l = sol->clone(); l->zero();
296 u = sol->clone(); u->setScalar(static_cast<RealT>(1));
297 c = mul->dual().clone();
299 list.sublist(
"General").sublist(
"Polyhedral Projection").set(
"Type",
"Semismooth Newton");
300 proj = ROL::PolyhedralProjectionFactory<RealT>(*sol,sol->dual(),bnd,con,*lam,*c,list);
301 proj->project(*x,*outStream);
303 con->value(*c,*x,tol);
306 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(sol)->getVector();
307 *outStream <<
" Initial: x1 = " << data[0] <<
" x2 = " << data[1]
308 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
309 <<
" x5 = " << data[4] <<
" x6 = " << data[5] << std::endl;
310 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
311 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
312 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
313 <<
" x5 = " << data[4] <<
" x6 = " << data[5] << std::endl;
314 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
315 *outStream <<
" Multiplier: l1 = " << data[0] <<
" l2 = " << data[1]
316 <<
" l3 = " << data[2] <<
" l4 = " << data[3]
317 <<
" l5 = " << data[4] <<
" l6 = " << data[5] << std::endl;
319 *outStream << std::endl;
320 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
321 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
322 *outStream << std::endl;
324 errorFlag += !bnd->isFeasible(*x);
325 errorFlag += (cnorm > tol);
328 catch (std::logic_error& err) {
329 *outStream << err.what() <<
"\n";
334 std::cout <<
"End Result: TEST FAILED\n";
336 std::cout <<
"End Result: TEST PASSED\n";
Ptr< Vector< Real > > getInitialGuess(void) const
Contains definitions for W. Hock and K. Schittkowski 55th test function.
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Ptr< Constraint< Real > > getEqualityConstraint(void) const
Contains definitions for W. Hock and K. Schittkowski 41th test function.
Contains definitions for W. Hock and K. Schittkowski 53th test function.
Defines a no-output stream class ROL::NullStream and a function makeStreamPtr which either wraps a re...
Ptr< Constraint< Real > > getEqualityConstraint(void) const
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Ptr< Objective< Real > > getObjective(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Vector< Real > > getInitialGuess(void) const
Ptr< Objective< Real > > getObjective(void) const
basic_nullstream< char, char_traits< char >> nullstream
int main(int argc, char *argv[])
Ptr< Objective< Real > > getObjective(void) const
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Ptr< Vector< Real > > getInitialGuess(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Constraint< Real > > getEqualityConstraint(void) const