27 #include "gtest/gtest.h"
60 EXPECT_TRUE(solver.initialize(&optim));
61 solver.setIterations(1000);
62 solver.setRelTolerance(1e-8);
68 SimpleOptimizationProblemWithCallbacks optim;
76 optim.resizeParameterVector(1);
84 optim.setObjectiveFunction(objective, 1,
true);
86 EXPECT_TRUE(solver.initialize(&optim));
90 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
93 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-3);
99 optim.resizeParameterVector(3);
100 Eigen::VectorXd
x(3);
106 values[0] =
x[0] - 5;
107 values[1] =
x[1] + 3;
110 optim.setObjectiveFunction(objective, 3,
true);
112 EXPECT_TRUE(solver.initialize(&optim));
116 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
118 EXPECT_TRUE(success);
119 EXPECT_NEAR(optim.getX()[0], 5.0, 1e-3);
120 EXPECT_NEAR(optim.getX()[1], -3.0, 1e-3);
121 EXPECT_NEAR(optim.getX()[2], 0.0, 1e-3);
127 optim.resizeParameterVector(2);
128 Eigen::VectorXd
x(2);
136 values[1] = 1 -
x[0];
138 optim.setObjectiveFunction(objective, 2,
true);
140 EXPECT_TRUE(solver.initialize(&optim));
145 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
147 EXPECT_TRUE(success);
148 EXPECT_NEAR(optim.getX()[0], 1.0, 1e-3);
149 EXPECT_NEAR(optim.getX()[1], 1.0, 1e-3);
155 optim.resizeParameterVector(1);
156 Eigen::VectorXd
x(1);
162 optim.setObjectiveFunction(objective, 1,
true);
166 optim.setEqualityConstraint(equality, 1);
168 EXPECT_TRUE(solver.initialize(&optim));
172 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
174 EXPECT_TRUE(success);
175 EXPECT_NEAR(optim.getX()[0], 3.0, 1e-3);
181 optim.resizeParameterVector(1);
182 Eigen::VectorXd
x(1);
188 optim.setObjectiveFunction(objective, 1,
true);
192 optim.setInequalityConstraint(inequality, 1);
194 EXPECT_TRUE(solver.initialize(&optim));
198 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
200 EXPECT_TRUE(success);
201 EXPECT_NEAR(optim.getX()[0], 3.0, 1e-3);
207 optim.resizeParameterVector(1);
208 Eigen::VectorXd
x(1);
213 Eigen::VectorXd lb(1);
215 optim.setLowerBounds(lb);
219 optim.setObjectiveFunction(objective, 1,
true);
221 EXPECT_TRUE(solver.initialize(&optim));
225 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
227 EXPECT_TRUE(success);
228 EXPECT_NEAR(optim.getX()[0], 5.0, 1e-3);
234 optim.resizeParameterVector(1);
235 Eigen::VectorXd
x(1);
240 Eigen::VectorXd ub(1);
242 optim.setUpperBounds(ub);
246 optim.setObjectiveFunction(objective, 1,
true);
248 EXPECT_TRUE(solver.initialize(&optim));
252 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
254 EXPECT_TRUE(success);
255 EXPECT_NEAR(optim.getX()[0], -1.0, 1e-3);
261 optim.resizeParameterVector(2);
264 optim.setLowerBound(0, 2);
265 optim.setUpperBound(0, 50);
266 optim.setLowerBound(1, -50);
267 optim.setUpperBound(1, 50);
281 optim.setObjectiveFunction(objective, 2,
true);
286 values[0] =
x[1] - 10.0 *
x[0] + 10.0;
288 optim.setInequalityConstraint(inequality, 1);
291 optim.setParameterValue(0, 5);
292 optim.setParameterValue(0, -5);
294 EXPECT_TRUE(solver.initialize(&optim));
299 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
301 EXPECT_TRUE(success);
302 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
303 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);
306 optim.setParameterValue(0, -1);
307 optim.setParameterValue(0, -1);
309 solver.setIterations(5000);
310 EXPECT_TRUE(solver.initialize(&optim));
313 status = solver.solve(optim,
true);
315 success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
317 EXPECT_TRUE(success);
318 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
319 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);
325 optim.resizeParameterVector(2);
328 optim.setLowerBound(0, 2);
329 optim.setUpperBound(0, 50);
330 optim.setLowerBound(1, -50);
331 optim.setUpperBound(1, 50);
345 optim.setObjectiveFunction(objective, 2,
true);
350 values[0] =
x[1] - 10.0 *
x[0] + 10.0;
352 optim.setInequalityConstraint(inequality, 1);
355 optim.setParameterValue(0, 5);
356 optim.setParameterValue(0, -5);
358 EXPECT_TRUE(solver.initialize(&optim));
362 for (
int i = 0; i < 5; ++i)
364 status = solver.solve(optim,
true, i == 0 ?
true :
false);
366 bool success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
367 EXPECT_TRUE(success);
369 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
370 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);
373 optim.setParameterValue(0, -1);
374 optim.setParameterValue(0, -1);
377 for (
int i = 0; i < 5; ++i)
379 status = solver.solve(optim,
true, i == 0 ?
true :
false);
381 success = (status == SolverStatus::Converged || status == SolverStatus::EarlyTerminated);
382 EXPECT_TRUE(success);
384 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
385 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);