Overview¶
ConstrainedOptProblem represents a nonlinear constrained optimization problem by combining objective terms, equality constraints, and inequality constraints into one object.
Key Concepts¶
Objective terms are stored as a NonlinearFactorGraph.
Equality constraints enforce h(x)=0 through NonlinearEqualityConstraints.
Inequality constraints enforce g(x)<=0 through NonlinearInequalityConstraints.
The evaluate method reports cost and both constraint-violation norms.
auxiliaryProblem can transform inequality constraints into an equivalent equality-constrained form with auxiliary variables.
Mathematical Formulation¶
A constrained problem is modeled as:
ConstrainedOptProblem stores exactly these three components: costs , equality constraints , and inequality constraints . Its evaluate method reports objective cost plus equality/inequality violation magnitudes.
Key User API¶
ConstrainedOptProblem(costs, eqConstraints, ineqConstraints)EqConstrainedOptProblem(costs, eqConstraints)costs(),eConstraints(),iConstraints()evaluate(values)dim()auxiliaryProblem(values, generator)for inequality-to-equality reformulation
Concise C++ Example¶
#include <gtsam/constrained/ConstrainedOptProblem.h>
#include <gtsam/nonlinear/expressions.h>
using namespace gtsam;
Symbol x1('x', 1), x2('x', 2);
Double_ X1(x1), X2(x2);
NonlinearFactorGraph costs;
auto noise = noiseModel::Isotropic::Sigma(1, 1.0);
costs.addPrior(x1, 1.0, noise);
costs.addPrior(x2, 1.0, noise);
NonlinearEqualityConstraints eq;
eq.emplace_shared<ExpressionEqualityConstraint<double>>(
X1 * X1 + X2 * X2, 1.0, Vector1(1.0));
NonlinearInequalityConstraints ineq;
ineq.emplace_shared<ScalarExpressionInequalityConstraint>(
4 * X1 * X1 + 0.25 * X2 * X2 - Double_(1.0), 1.0);
ConstrainedOptProblem problem(costs, eq, ineq);