{"id":28452699,"url":"https://github.com/juliasmoothoptimizers/fletcherpenaltysolver.jl","last_synced_at":"2025-06-27T23:31:45.934Z","repository":{"id":40347074,"uuid":"307797552","full_name":"JuliaSmoothOptimizers/FletcherPenaltySolver.jl","owner":"JuliaSmoothOptimizers","description":"Fletcher's penalty method for nonlinear optimization models","archived":false,"fork":false,"pushed_at":"2025-04-21T18:38:22.000Z","size":3386,"stargazers_count":9,"open_issues_count":14,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-06T18:12:25.493Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JuliaSmoothOptimizers.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-10-27T18:48:46.000Z","updated_at":"2025-04-21T18:09:43.000Z","dependencies_parsed_at":"2024-02-04T17:59:03.251Z","dependency_job_id":"6a1626be-34d1-4c08-a944-1202fe2d1f17","html_url":"https://github.com/JuliaSmoothOptimizers/FletcherPenaltySolver.jl","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/JuliaSmoothOptimizers/FletcherPenaltySolver.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaSmoothOptimizers%2FFletcherPenaltySolver.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaSmoothOptimizers%2FFletcherPenaltySolver.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaSmoothOptimizers%2FFletcherPenaltySolver.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaSmoothOptimizers%2FFletcherPenaltySolver.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JuliaSmoothOptimizers","download_url":"https://codeload.github.com/JuliaSmoothOptimizers/FletcherPenaltySolver.jl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaSmoothOptimizers%2FFletcherPenaltySolver.jl/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262351544,"owners_count":23297633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-06T18:12:25.173Z","updated_at":"2025-06-27T23:31:45.921Z","avatar_url":"https://github.com/JuliaSmoothOptimizers.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FletcherPenaltySolver.jl - Fletcher's Penalty Method\n\n[![docs-stable][docs-stable-img]][docs-stable-url] [![docs-dev][docs-dev-img]][docs-dev-url] [![build-ci][build-ci-img]][build-ci-url] [![codecov][codecov-img]][codecov-url] [![release][release-img]][release-url] [![doi][doi-img]][doi-url]\n\n[docs-stable-img]: https://img.shields.io/badge/docs-stable-blue.svg\n[docs-stable-url]: https://JuliaSmoothOptimizers.github.io/FletcherPenaltySolver.jl/stable\n[docs-dev-img]: https://img.shields.io/badge/docs-dev-purple.svg\n[docs-dev-url]: https://JuliaSmoothOptimizers.github.io/FletcherPenaltySolver.jl/dev\n[build-ci-img]: https://github.com/JuliaSmoothOptimizers/FletcherPenaltySolver.jl/workflows/CI/badge.svg?branch=main\n[build-ci-url]: https://github.com/JuliaSmoothOptimizers/FletcherPenaltySolver.jl/actions\n[codecov-img]: https://codecov.io/gh/JuliaSmoothOptimizers/FletcherPenaltySolver.jl/branch/main/graph/badge.svg\n[codecov-url]: https://codecov.io/gh/JuliaSmoothOptimizers/FletcherPenaltySolver.jl\n[release-img]: https://img.shields.io/github/v/release/JuliaSmoothOptimizers/FletcherPenaltySolver.jl.svg?style=flat-square\n[release-url]: https://github.com/JuliaSmoothOptimizers/FletcherPenaltySolver.jl/releases\n[doi-img]: https://zenodo.org/badge/DOI/10.5281/zenodo.7153564.svg\n[doi-url]: https://doi.org/10.5281/zenodo.7153564\n\nFPS is a solver for equality-constrained nonlinear problems, i.e.,\noptimization problems of the form\n\n    min f(x)     s.t.     c(x) = 0.\n\nIt uses other [JuliaSmoothOptimizers](https://juliasmoothoptimizers.github.io/) packages for development.\nIn particular, [NLPModels.jl](https://github.com/JuliaSmoothOptimizers/NLPModels.jl) is used for defining the problem, and [SolverCore.jl](https://github.com/JuliaSmoothOptimizers/SolverCore.jl) for the output.\nIf a general inequality-constrained problem is given to the solver, it solves the problem reformulated as a `SlackModel` from [NLPModelsModifiers.jl](https://github.com/JuliaSmoothOptimizers/NLPModelsModifiers.jl).\n\n## Algorithm\n\nFor 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](https://github.com/SolverStoppingJulia/Stopping.jl) can be used.\nBy default, we use `ipopt` from [NLPModelsIpopt.jl](https://github.com/JuliaSmoothOptimizers/NLPModelsIpopt.jl) to solve the subproblem, but other solvers can be used such as `knitro` from [NLPModelsKnitro.jl](https://github.com/JuliaSmoothOptimizers/NLPModelsKnitro.jl) or any solvers from [JSOSolvers.jl](https://github.com/JuliaSmoothOptimizers/JSOSolvers.jl). The Stopping version of these solvers is available in [StoppingInterface.jl](https://github.com/SolverStoppingJulia/StoppingInterface.jl).\n\nIt uses [LDLFactorizations.jl](https://github.com/JuliaSmoothOptimizers/LDLFactorizations.jl) by default to evaluate the derivatives of the penalized subproblem, but one can also use a matrix-free version with [Krylov.jl](https://github.com/JuliaSmoothOptimizers/Krylov.jl).\n\n## References\n\n\u003e Estrin, R., Friedlander, M. P., Orban, D., \u0026 Saunders, M. A. (2020).\n\u003e Implementing a smooth exact penalty function for equality-constrained nonlinear optimization.\n\u003e SIAM Journal on Scientific Computing, 42(3), A1809-A1835.\n\u003e [10.1137/19M1238265](https://doi.org/10.1137/19M1238265)\n\n## How to Cite\n\nIf you use FletcherPenaltySolver.jl in your work, please cite using the format given in [CITATION.cff](https://github.com/JuliaSmoothOptimizers/FletcherPenaltySolver.jl/blob/main/CITATION.cff).\n\n## Installation\n\n`pkg\u003e add FletcherPenaltySolver`\n\n## Example\n\n```julia\nusing FletcherPenaltySolver, ADNLPModels\n\n# Rosenbrock\nnlp = ADNLPModel(x -\u003e 100 * (x[2] - x[1]^2)^2 + (x[1] - 1)^2, [-1.2; 1.0])\nstats = fps_solve(nlp)\n\n# Constrained\nnlp = ADNLPModel(\n  x -\u003e 100 * (x[2] - x[1]^2)^2 + (x[1] - 1)^2,\n  [-1.2; 1.0],\n  x-\u003e[x[1] * x[2] - 1],\n  [0.0],[1.0],\n)\nstats = fps_solve(nlp)\n```\n\n# Bug reports and discussions\n\nIf you think you found a bug, feel free to open an [issue](https://github.com/JuliaSmoothOptimizers/FletcherPenaltySolver.jl/issues).\nFocused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.\n\nIf you want to ask a question not suited for a bug report, feel free to start a discussion [here](https://github.com/JuliaSmoothOptimizers/Organization/discussions). This forum is for general discussion about this repository and the [JuliaSmoothOptimizers](https://github.com/JuliaSmoothOptimizers), so questions about any of our packages are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliasmoothoptimizers%2Ffletcherpenaltysolver.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliasmoothoptimizers%2Ffletcherpenaltysolver.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliasmoothoptimizers%2Ffletcherpenaltysolver.jl/lists"}