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 #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";
Ptr< Constraint< Real > > getEqualityConstraint(void) const
basic_nullstream< char, char_traits< char > > nullstream
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Contains definitions for W. Hock and K. Schittkowski 55th test function.
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< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Vector< Real > > getInitialGuess(void) const
Ptr< Objective< Real > > getObjective(void) const
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
int main(int argc, char *argv[])
Ptr< Objective< Real > > getObjective(void) const
Ptr< Vector< Real > > getEqualityMultiplier(void) const
Ptr< Constraint< Real > > getEqualityConstraint(void) const
Ptr< Constraint< Real > > getEqualityConstraint(void) const
Ptr< Objective< Real > > getObjective(void) const
Ptr< Vector< Real > > getInitialGuess(void) const
Ptr< BoundConstraint< Real > > getBoundConstraint(void) const
Ptr< Vector< Real > > getInitialGuess(void) const