an Augmented Lagrangian method


This package implements a JSO-compliant augmented Lagrangian method based on the paper

S. Arreckx, A. Lambe, Martins, J. R. R. A., & Orban, D. (2016).
A Matrix-Free Augmented Lagrangian Algorithm with Application to Large-Scale Structural Design Optimization.
Optimization And Engineering, 17, 359–384. doi:10.1007/s11081-015-9287-9

It was implemented as part of the Master's dissertation of Egmara Antunes.

JSO-compliant solver

The percival method expects a single mandatory argument - an AbstractNLPModel - and returns a GenericExecutionStats from SolverCore.jl.

We refer to for tutorials on the NLPModel API. This framework allows the usage of models from Ampl (using AmplNLReader.jl), CUTEst (using CUTEst.jl), JuMP (using NLPModelsJuMP.jl), PDE-constrained optimization problems (using PDENLPModels.jl) and models defined with automatic differentiation (using ADNLPModels.jl).


Percival is a registered package. To install this package, open the Julia REPL (i.e., execute the julia binary), type ] to enter package mode, and install Percival as follows

add Percival

Main exported functions and types

  • percival: The function to call the method. Pass an NLPModel to it.
  • AugLagModel: A model representing the bound-constrained augmented Lagrangian subproblem. This is a subtype of AbstractNLPModel.


How to solve the simple problem

\[\min_{(x_1,x_2)} \quad (x_1 - 1)^2 + 100 (x_2 - x_1^2)^2 \quad \text{} \quad x_1^2 + x_2^2 \leq 1.\]

The problem is modeled using ADNLPModels.jl with [-1.2; 1.0] as default initial point, and then solved using percival.

using ADNLPModels, Percival

nlp = ADNLPModel(
    x -> (x[1] - 1)^2 + 100 * (x[2] - x[1]^2)^2,
    [-1.2; 1.0],
    x -> [x[1]^2 + x[2]^2],

output = percival(nlp)
Generic Execution stats
  status: first-order stationary
  objective value: 0.04567480871857716
  primal feasibility: 7.597478202114871e-12
  dual feasibility: 1.4085469520214704e-12
  solution: [0.7864151541705857  0.6176983125267961]
  multipliers: [-0.12149655699809614]
  multipliers_L: [0.0  6.93337596719435e-310  6.93325805785085e-310]
  multipliers_U: [0.0  6.9332608361757e-310  6.9333762717846e-310]
  iterations: 6
  elapsed time: 5.518941164016724

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

If you want to ask a question not suited for a bug report, feel free to start a discussion here. This forum is for general discussion about this repository and the JuliaSmoothOptimizers, so questions about any of our packages are welcome.