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.

NonlinearConstraint

Overview

NonlinearConstraint is the abstract base for constrained factors in the constrained module, built on top of NoiseModelFactor with constrained noise models.

Open In Colab

Key Concepts

  • violation computes the constraint violation magnitude from factor error.

  • feasible checks whether a Values assignment satisfies a tolerance.

  • penaltyFactor builds an L2 penalty factor for constrained optimization methods.

  • Derived classes specialize behavior for equality and inequality constraints.

Mathematical Formulation

A nonlinear constraint is treated as a residual map c(x)c(x) (with constrained noise scaling). A common penalty used by constrained solvers is:

ϕ(x;μ)=μ2c(x)2.\phi(x;\mu)=\frac{\mu}{2}\|c(x)\|^2.

This class provides the shared interface for evaluating constraint violation and creating a penalty factor used in outer-loop constrained optimization.

Key User API

  • violation(values)

  • feasible(values, tolerance)

  • penaltyFactor(mu)

  • sigmas()

  • unwhitenedHessian(values) (advanced)

Concise C++ Example

#include <gtsam/constrained/NonlinearEqualityConstraint.h>
#include <gtsam/nonlinear/expressions.h>

using namespace gtsam;

Symbol x('x', 0);
Double_ X(x);
ExpressionEqualityConstraint<double> c(X * X, 1.0, Vector1(0.1));

Values values;
values.insert(x, 0.8);

bool ok = c.feasible(values, 1e-3);
double v = c.violation(values);
auto penalty = c.penaltyFactor(10.0);