Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

NonlinearInequalityConstraint

Overview

NonlinearInequalityConstraint defines constraints of the form g(x)<=0 and supports direct violation computation plus conversion into penalty terms.

Open In Colab

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:

g(x)0.g(x)\le 0.

The default violation mapping uses a ramp on each component:

ramp(u)=max(u,0),ϕ(x;μ)=μ2ramp(g(x))2.\text{ramp}(u)=\max(u,0),\quad \phi(x;\mu)=\frac{\mu}{2}\|\text{ramp}(g(x))\|^2.

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) and penaltyFactorCustom(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);