- The new API now only exports the
ALTROSolver
type, no longer exportingAugmentedLagrangianSolver
,iLQRSolver
, andProjectedNewtonSolver
. - Use the
projected_newton
solver option to turn off to get the same behavior asAugmentedLagrangianSolver
. Passing an unconstrained problem is equivalent to solving withiLQRSolver
. - Solver options are now shared between all solvers, and implemented as
SolverOptions
. Usesolver.opts
orset_options!(solver; opts...)
to change solver options. Solver options can also be passed into the solver constructor. - Solver stats have also been improved, and contains a single log for all iteration types. Accessible via
solver.stats
orAltro.stats(solver)
.
- iLQR iterations now provide a brief description for why they terminate.
- The
show_summary
option can be used to display a brief summary of the solve upon completion.
- Each solve now saves a solver status in
solver.stats.status
, accessible viastatus(solver)
, which provides some information about how the solver exited. - Runtime errors in Altro.jl were removed in favor of exiting the solver with a specific solver status. Runtime errors are still possible if they originate from TrajetoryOptimization.jl or bugs (nothing is wrapped in
try/catch
loops). - Changed convergence criteria for the iLQR solver: it must satisfy both the change in cost tolerance and the gradient tolerance at the same time.
- The
ProjectedNewtonSolver
now does a projection of the dual variables in order to accurately calculation the residual of dual optimality (gradient of the Lagrangian). Can be disabled via themultiplier_projection
option.