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 #53" << 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",
"Dykstra");
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] <<
" x4 = " << data[3]
186 <<
" x5 = " << data[4] << std::endl;
187 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
188 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
189 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
190 <<
" x5 = " << data[4] << std::endl;
191 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
192 *outStream <<
" Multiplier: l1 = " << data[0] <<
" l2 = " << data[1]
193 <<
" l3 = " << data[2] << std::endl;
195 *outStream << std::endl;
196 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
197 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
199 errorFlag += !bnd->isFeasible(*x);
200 errorFlag += (cnorm > tol);
202 *outStream << std::endl <<
"Hock and Schittkowski Problem #55" << std::endl << std::endl;
216 lam = mul->clone(); lam->set(*mul);
217 x = sol->clone(); x->set(*sol);
218 l = sol->clone(); l->zero();
219 u = sol->clone(); u->setScalar(
static_cast<RealT>(1));
220 c = mul->dual().clone();
222 list.sublist(
"General").sublist(
"Polyhedral Projection").set(
"Type",
"Semismooth Newton");
223 proj = ROL::PolyhedralProjectionFactory<RealT>(*sol,sol->dual(),bnd,con,*lam,*c,list);
224 proj->project(*x,*outStream);
226 con->value(*c,*x,tol);
229 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(sol)->getVector();
230 *outStream <<
" Initial: x1 = " << data[0] <<
" x2 = " << data[1]
231 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
232 <<
" x5 = " << data[4] <<
" x6 = " << data[5] << std::endl;
233 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(x)->getVector();
234 *outStream <<
" Result: x1 = " << data[0] <<
" x2 = " << data[1]
235 <<
" x3 = " << data[2] <<
" x4 = " << data[3]
236 <<
" x5 = " << data[4] <<
" x6 = " << data[5] << std::endl;
237 data = *ROL::staticPtrCast<ROL::StdVector<RealT>>(lam)->getVector();
238 *outStream <<
" Multiplier: l1 = " << data[0] <<
" l2 = " << data[1]
239 <<
" l3 = " << data[2] <<
" l4 = " << data[3]
240 <<
" l5 = " << data[4] <<
" l6 = " << data[5] << std::endl;
242 *outStream << std::endl;
243 *outStream <<
" is equality feasible = " << (cnorm<=tol) << std::endl
244 <<
" are bounds feasible = " << bnd->isFeasible(*x) << std::endl;
245 *outStream << std::endl;
247 errorFlag += !bnd->isFeasible(*x);
248 errorFlag += (cnorm > tol);
251 catch (std::logic_error& err) {
252 *outStream << err.what() <<
"\n";
257 std::cout <<
"End Result: TEST FAILED\n";
259 std::cout <<
"End Result: TEST PASSED\n";