56#include "Teuchos_GlobalMPISession.hpp"
60int 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";
Contains definitions for W. Hock and K. Schittkowski 41th test function.
Contains definitions for W. Hock and K. Schittkowski 53th test function.
Contains definitions for W. Hock and K. Schittkowski 55th test function.
Defines a no-output stream class ROL::NullStream and a function makeStreamPtr which either wraps a re...
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Ptr< Constraint< Real > > getEqualityConstraint(void) const
Ptr< Vector< Real > > getInitialGuess(void) const
Ptr< Objective< Real > > getObjective(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Ptr< Objective< Real > > getObjective(void) const
Ptr< Constraint< Real > > getEqualityConstraint(void) const
Ptr< Vector< Real > > getInitialGuess(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Constraint< Real > > getEqualityConstraint(void) const
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Objective< Real > > getObjective(void) const
Ptr< Vector< Real > > getInitialGuess(void) const
int main(int argc, char *argv[])