31 #include <corbo-optimization/standard_optimization_problem.h>
41 #include "gtest/gtest.h"
44 using corbo::StandardOptimizationProblemWithCallbacks;
67 StandardOptimizationProblemWithCallbacks
optim;
75 optim.resizeParameterVector(1);
83 optim.setObjectiveFunction(objective, 1,
true);
85 EXPECT_TRUE(solver.initialize(optim));
87 bool success = solver.solve(optim,
true);
90 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-6);
96 optim.resizeParameterVector(3);
103 values[0] =
x[0] - 5;
104 values[1] =
x[1] + 3;
107 optim.setObjectiveFunction(objective, 3,
true);
109 EXPECT_TRUE(solver.initialize(optim));
111 bool success = solver.solve(optim,
true);
113 EXPECT_TRUE(success);
114 EXPECT_NEAR(optim.getX()[0], 5.0, 1e-6);
115 EXPECT_NEAR(optim.getX()[1], -3.0, 1e-6);
116 EXPECT_NEAR(optim.getX()[2], 0.0, 1e-6);
122 optim.resizeParameterVector(2);
123 Eigen::VectorXd
x(2);
131 values[1] = 1 -
x[0];
133 optim.setObjectiveFunction(objective, 2,
true);
135 EXPECT_TRUE(solver.initialize(optim));
138 bool success = solver.solve(optim,
true);
140 EXPECT_TRUE(success);
141 EXPECT_NEAR(optim.getX()[0], 1.0, 1e-3);
142 EXPECT_NEAR(optim.getX()[1], 1.0, 1e-3);
148 optim.resizeParameterVector(1);
149 Eigen::VectorXd
x(1);
155 optim.setObjectiveFunction(objective, 1,
true);
159 optim.setEqualityConstraint(equality, 1);
161 solver.setPenaltyWeights(100, 100, 100);
163 EXPECT_TRUE(solver.initialize(optim));
165 bool success = solver.solve(optim,
true);
167 EXPECT_TRUE(success);
168 EXPECT_NEAR(optim.getX()[0], 3.0, 1e-4);
174 optim.resizeParameterVector(1);
175 Eigen::VectorXd
x(1);
181 optim.setObjectiveFunction(objective, 1,
true);
185 optim.setInequalityConstraint(inequality, 1);
187 solver.setPenaltyWeights(100, 100, 100);
189 EXPECT_TRUE(solver.initialize(optim));
191 bool success = solver.solve(optim,
true);
193 EXPECT_TRUE(success);
194 EXPECT_NEAR(optim.getX()[0], 3.0, 1e-4);
200 optim.resizeParameterVector(1);
201 Eigen::VectorXd
x(1);
206 Eigen::VectorXd lb(1);
208 optim.setLowerBounds(lb);
212 optim.setObjectiveFunction(objective, 1,
true);
214 solver.setPenaltyWeights(100, 100, 100);
216 EXPECT_TRUE(solver.initialize(optim));
218 bool success = solver.solve(optim,
true);
220 EXPECT_TRUE(success);
221 EXPECT_NEAR(optim.getX()[0], 5.0, 1e-3);
227 optim.resizeParameterVector(1);
228 Eigen::VectorXd
x(1);
233 Eigen::VectorXd ub(1);
235 optim.setUpperBounds(ub);
239 optim.setObjectiveFunction(objective, 1,
true);
241 solver.setPenaltyWeights(100, 100, 100);
243 EXPECT_TRUE(solver.initialize(optim));
245 bool success = solver.solve(optim,
true);
247 EXPECT_TRUE(success);
248 EXPECT_NEAR(optim.getX()[0], -1.0, 1e-3);
254 optim.resizeParameterVector(2);
257 optim.setLowerBound(0, 2);
258 optim.setUpperBound(0, 50);
259 optim.setLowerBound(1, -50);
260 optim.setUpperBound(1, 50);
274 optim.setObjectiveFunction(objective, 2,
true);
279 values[0] =
x[1] - 10.0 *
x[0] + 10.0;
281 optim.setInequalityConstraint(inequality, 1);
284 optim.setParameterValue(0, 5);
285 optim.setParameterValue(0, -5);
288 bool success = solver.solve(optim,
true);
290 EXPECT_TRUE(success);
291 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
292 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);
295 optim.setParameterValue(0, -1);
296 optim.setParameterValue(0, -1);
298 solver.setPenaltyWeights(1, 10, 10);
299 solver.setIterations(5000);
300 EXPECT_TRUE(solver.initialize(optim));
303 success = solver.solve(optim,
true);
305 EXPECT_TRUE(success);
306 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
307 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);
313 optim.resizeParameterVector(2);
316 optim.setLowerBound(0, 2);
317 optim.setUpperBound(0, 50);
318 optim.setLowerBound(1, -50);
319 optim.setUpperBound(1, 50);
333 optim.setObjectiveFunction(objective, 2,
true);
338 values[0] =
x[1] - 10.0 *
x[0] + 10.0;
340 optim.setInequalityConstraint(inequality, 1);
343 optim.setParameterValue(0, 5);
344 optim.setParameterValue(0, -5);
347 solver.setPenaltyWeights(2, 2, 2);
348 solver.setWeightAdapation(5, 5, 5, 500, 500, 500);
349 solver.setIterations(5);
351 EXPECT_TRUE(solver.initialize(optim));
355 for (
int i = 0; i < 5; ++i) success = solver.solve(optim,
true, i == 0 ?
true :
false);
357 EXPECT_TRUE(success);
358 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
359 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);
362 optim.setParameterValue(0, -1);
363 optim.setParameterValue(0, -1);
366 for (
int i = 0; i < 5; ++i) success = solver.solve(optim,
true, i == 0 ?
true :
false);
368 EXPECT_TRUE(success);
369 EXPECT_NEAR(optim.getX()[0], 2.0, 1e-2);
370 EXPECT_NEAR(optim.getX()[1], 0.0, 1e-2);