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.

ConstrainedOptProblem

Overview

ConstrainedOptProblem represents a nonlinear constrained optimization problem by combining objective terms, equality constraints, and inequality constraints into one object.

Open In Colab

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 ff, equality constraints hh, and inequality constraints gg. 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);