Skip to content

HALeqO solver for nonlinear equality-constrained optimization

License

Notifications You must be signed in to change notification settings

aldma/HALeqO.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HALeqO.jl

Homotopy Augmented Lagrangian method for EQuality-constrained Optimization

HALeqO.jl is a pure Julia implementation of a solver for continuous nonlinear equality-constrained optimization problems of the form

min f(x)  over x in R^n  subject to c(x) = 0

based on a homotopy augmented Lagrangian method and globalised Newton's steps with Armijo's linesearch. To invoke the haleqo solver, you have to pass it an NLPModel; it returns a GenericExecutionStats.

using NLPModels, HALeqO
out = haleqo(nlp)

You can solve an JuMP model m by using NLPModels to convert it.

using NLPModelsJuMP, HALeqO
nlp = MathOptNLPModel(m)
out = haleqo(nlp)

Linear solver

HALeqO.jl uses the free QDLDL.jl routines as main linear solver and PositiveFactorizations.jl for regularizing the Hessian matrix. These could be replaced by, or complemented with, LDLFactorizations.jl and HSL.jl's MA57 based on HSL.

Citing

If you find this code useful, you can cite the related paper as

@inproceedings{demarchi2021augmented,
    author      = {De~Marchi, Alberto},
    title       = {Augmented {L}agrangian methods as dynamical systems for constrained optimization},
    year        = {2021},
    month       = {12},
    pages       = {6533--6538},
    booktitle   = {2021 60th {IEEE} {C}onference on {D}ecision and {C}ontrol ({CDC})},
    doi         = {10.1109/CDC45484.2021.9683199},
}

Benchmarks

We compared HALeqO against Ipopt, via the wrapper provided by NLPModelsIpopt, and NCL.jl invoking Ipopt. There is also Percival now. See run_benchmarks.jl in the tests folder.

To use the provided test codes (originally compatible with Julia version 1.8.5, tested on Linux x86_64, August 2021):

  • start Julia from this directory with julia --project=. (or with the relative path to the HALeqO directory from somewhere else);

  • do ]instantiate to download all dependencies (only required the first time) and go back to standard Julia prompt with backspace afterwards;

  • load the package with using HALeqO

To run the CUTEst benchmarks:

  • do include("tests/run_benchmarks.jl") to invoke the solvers, generate the results, print statistics and save figures.

Options for benchmarking (e.g., max time and tolerance) can be modified at the beginning of the tests/run_benchmarks.jl file.