Overview¶
NonlinearInequalityConstraint defines constraints of the form g(x)<=0 and supports direct violation computation plus conversion into penalty terms.
Key Concepts¶
ScalarExpressionInequalityConstraint is a scalar expression-based implementation.
penaltyFactor and penaltyFactorCustom map inequality violations into optimization costs.
createEqualityConstraint provides the corresponding boundary equality g(x)=0 when needed.
NonlinearInequalityConstraints aggregates multiple inequality constraints and builds combined penalty graphs.
Mathematical Formulation¶
Inequality constraints enforce:
The default violation mapping uses a ramp on each component:
This keeps inactive constraints from contributing cost while penalizing violated constraints.
Key User API¶
ScalarExpressionInequalityConstraint::LeqZero(expression, sigma)ScalarExpressionInequalityConstraint::GeqZero(expression, sigma)feasible(values, tolerance)active(values)penaltyFactor(mu)andpenaltyFactorCustom(func, mu)createEqualityConstraint()NonlinearInequalityConstraints::penaltyGraph(mu)
Concise C++ Example¶
#include <gtsam/constrained/NonlinearInequalityConstraint.h>
#include <gtsam/nonlinear/expressions.h>
using namespace gtsam;
Symbol x1('x', 1), x2('x', 2);
Double_ X1(x1), X2(x2);
Double_ g = X1 + X1 * X1 * X1 + X2 + X2 * X2;
auto c = ScalarExpressionInequalityConstraint::LeqZero(g, 0.1);
Values values;
values.insert(x1, 1.0);
values.insert(x2, 1.0);
bool ok = c->feasible(values);
bool isActive = c->active(values);
auto p = c->penaltyFactor(9.0);