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);
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);
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);
130 values[0] =
std::sqrt(100) * (x[1] - x[0] * x[0]);
131 values[1] = 1 - x[0];
133 optim.setObjectiveFunction(objective, 2,
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);
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);
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);
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);
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);
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);
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);
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);
TEST_F(TestLevenbergMarquardtSparse, solve_unconstr_1)
StandardOptimizationProblemWithCallbacks optim
void setIterations(int iterations)
Define the number of solver iterations.
EIGEN_DEVICE_FUNC const SqrtReturnType sqrt() const
Levenberg-Marquardt Solver (Sparse matrices version).
LevenbergMarquardtSparse solver
void setWeightAdapation(double factor_eq, double factor_ineq, double factor_bounds, double max_eq, double max_ineq, double max_bounds)
Set parameters for weight adaptation (refer to the class description); set factors to 1 in order to d...
virtual ~TestLevenbergMarquardtSparse()
A matrix or vector expression mapping an existing expression.
TestLevenbergMarquardtSparse()
SolverStatus solve(OptimizationProblemInterface &problem, bool new_structure=true, bool new_run=true, double *obj_value=nullptr) override
Solve the provided optimization problem.
void setPenaltyWeights(double weight_eq, double weight_ineq, double weight_bounds)
Define penalty weights (equality constraints, inequality constraints, bounds)
bool initialize(OptimizationProblemInterface *problem=nullptr) override
Initialize the solver w.r.t. a given optimization problem.