Overview¶
AugmentedLagrangianOptimizer combines penalty terms with Lagrange multipliers to improve convergence and conditioning on constrained nonlinear problems. It uses the BCL update policy inspired by Conn, Gould, and Toint by default, while retaining the earlier Aggressive policy as an explicit option.
Key Concepts¶
AugmentedLagrangianStatestores equality and nonnegative inequality multipliers plus stationarity, generalized-feasibility, primal-feasibility, and complementarity diagnostics.augmentedLagrangianFunctionbuilds a fixed-multiplier subproblem with exact Powell--Hestenes--Rockafellar (PHR) terms for scalar inequalities.BCLis the default. It accepts a multiplier update only when generalized feasibility meets its current target; otherwise it increases the common direct penalty.Aggressiveremains available as an explicit option and updates multipliers after every solved subproblem.
Mathematical Formulation¶
For whitened equalities , whitened scalar inequalities , direct penalties , and nonnegative inequality multipliers, the fixed-parameter objective is:
The projected inequality residual gives . BCL uses the full augmented-Lagrangian gradient infinity norm for inner stationarity and for generalized feasibility.
The BCL policy follows the update schedule of Conn, Gould, and Toint Algorithm 1 as closely as possible, but it is not entirely faithful: unconstrained LM replaces their projected bound-constrained inner solver, and direct PHR inequalities replace their bounded slack formulation. Their convergence proof therefore does not apply here.
Key User API¶
AugmentedLagrangianOptimizer(problem, initialValues, params)optimize()progress()augmentedLagrangianFunction(state, epsilon)(advanced inspection;epsilonis retained for source compatibility)AugmentedLagrangianParams:updatePolicy, Aggressive controls, and flat BCL schedule parameters
Concise C++ Example¶
#include <gtsam/constrained/AugmentedLagrangianOptimizer.h>
using namespace gtsam;
auto params = std::make_shared<AugmentedLagrangianParams>();
// BCL is the default update policy.
params->verbose = true;
AugmentedLagrangianOptimizer optimizer(problem, init_values, params);
Values results = optimizer.optimize();References¶
Examples¶
Algorithm reference¶
A. R. Conn, N. I. M. Gould, and Ph. L. Toint, A Globally Convergent Augmented Lagrangian Algorithm for Optimization with General Constraints and Simple Bounds, SIAM Journal on Numerical Analysis 28(2), 1991.
Source code¶
- Conn, A. R., Gould, N. I. M., & Toint, P. (1991). A Globally Convergent Augmented Lagrangian Algorithm for Optimization with General Constraints and Simple Bounds. SIAM Journal on Numerical Analysis, 28(2), 545–572. 10.1137/0728030