FPS is a solver for equality-constrained nonlinear problems, i.e., optimization problems of the form
min f(x) s.t. c(x) = 0.
It uses other JuliaSmoothOptimizers packages for development.
In particular, NLPModels.jl is used for defining the problem, and SolverCore.jl for the output.
If a general inequality-constrained problem is given to the solver, it solves the problem reformulated as a SlackModel
from NLPModelsModifiers.jl.
For equality-constrained problems, the method iteratively solves an unconstrained problem. For bound and equality-constrained problems, the subproblems are bound-constrained problems. Any solver compatible with Stopping.jl can be used.
By default, we use ipopt
from NLPModelsIpopt.jl to solve the subproblem, but other solvers can be used such as knitro
from NLPModelsKnitro.jl or any solvers from JSOSolvers.jl. The Stopping version of these solvers is available in StoppingInterface.jl.
It uses LDLFactorizations.jl by default to evaluate the derivatives of the penalized subproblem, but one can also use a matrix-free version with Krylov.jl.
Estrin, R., Friedlander, M. P., Orban, D., & Saunders, M. A. (2020). Implementing a smooth exact penalty function for equality-constrained nonlinear optimization. SIAM Journal on Scientific Computing, 42(3), A1809-A1835. 10.1137/19M1238265
If you use FletcherPenaltySolver.jl in your work, please cite using the format given in CITATION.cff.
pkg> add FletcherPenaltySolver
using FletcherPenaltySolver, ADNLPModels
# Rosenbrock
nlp = ADNLPModel(x -> 100 * (x[2] - x[1]^2)^2 + (x[1] - 1)^2, [-1.2; 1.0])
stats = fps_solve(nlp)
# Constrained
nlp = ADNLPModel(
x -> 100 * (x[2] - x[1]^2)^2 + (x[1] - 1)^2,
[-1.2; 1.0],
x->[x[1] * x[2] - 1],
[0.0],[1.0],
)
stats = fps_solve(nlp)
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.