TAOALMM#
Augmented Lagrangian multiplier method for solving nonlinear optimization problems with general constraints.
Options Database Keys#
-tao_almm_mu_init real - initial penalty parameter (default: 10.)
-tao_almm_mu_factor real - increase factor for the penalty parameter (default: 100.)
-tao_almm_mu_max real - maximum safeguard for penalty parameter updates (default: 1.e20)
-tao_almm_mu_power_good real - exponential for penalty parameter when multiplier update is accepted (default: 0.9)
-tao_almm_mu_power_bad real - exponential for penalty parameter when multiplier update is rejected (default: 0.1)
-tao_almm_ye_min real - minimum safeguard for equality multiplier updates (default: -1.e20)
-tao_almm_ye_max real - maximum safeguard for equality multiplier updates (default: 1.e20)
-tao_almm_yi_min real - minimum safeguard for inequality multiplier updates (default: -1.e20)
-tao_almm_yi_max real - maximum safeguard for inequality multiplier updates (default: 1.e20)
-tao_almm_type (phr|classic) - change formulation of the augmented Lagrangian merit function for the subproblem (default: phr)
Notes#
This method converts a constrained problem into a sequence of unconstrained problems via the augmented Lagrangian merit function. Bound constraints are pushed down to the subproblem without any modifications.
Two formulations are offered for the subproblem: canonical Hestenes-Powell augmented Lagrangian with slack variables for inequality constraints, and a slack-less Powell-Hestenes-Rockafellar (PHR) formulation utilizing a pointwise max() penalty on inequality constraints. The canonical augmented Lagrangian formulation may converge faster for smaller problems but is highly susceptible to poor step lengths in the subproblem due to the positivity constraint on slack variables. PHR avoids this issue by eliminating the slack variables entirely, and is highly desirable for problems with a large number of inequality constraints.
The subproblem is solved using a nested first-order TAO solver (default: TAOBQNLS). The user can retrieve a
pointer to the subsolver via TaoALMMGetSubsolver() or pass command line arguments to it using the
“-tao_almm_subsolver_” prefix. Currently, TAOALMM does not support second-order methods for the subproblem.
while unconverged
solve argmin_x L(x) s.t. l <= x <= u
if ||c|| <= y_tol
if ||c|| <= c_tol && ||Lgrad|| <= g_tol:
problem converged, return solution
else
constraints sufficiently improved
update multipliers and tighten tolerances
endif
else
constraints did not improve
update penalty and loosen tolerances
endif
endwhile
See Also#
TAOALMM, Tao, TaoALMMGetType(), TaoALMMSetType(), TaoALMMSetSubsolver(), TaoALMMGetSubsolver(),
TaoALMMGetMultipliers(), TaoALMMSetMultipliers(), TaoALMMGetPrimalIS(), TaoALMMGetDualIS()
Level#
beginner
Location#
Examples#
src/tao/constrained/tutorials/ex1.c
Index of all Tao routines
Table of Contents for all manual pages
Index of all manual pages