{"id":17113028,"url":"https://github.com/emmt/optimpacknextgen.jl","last_synced_at":"2025-04-09T20:33:46.851Z","repository":{"id":50928373,"uuid":"88184609","full_name":"emmt/OptimPackNextGen.jl","owner":"emmt","description":"An almost pure Julia version of OptimPack for numerical optimization with particular focus on large scale problems","archived":false,"fork":false,"pushed_at":"2025-03-10T14:33:52.000Z","size":1173,"stargazers_count":12,"open_issues_count":2,"forks_count":6,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-23T22:34:46.743Z","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/emmt.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-13T16:24:19.000Z","updated_at":"2025-03-10T14:33:54.000Z","dependencies_parsed_at":"2023-12-13T10:27:05.397Z","dependency_job_id":"aee59550-a0ef-456a-8beb-f2e0413c1f88","html_url":"https://github.com/emmt/OptimPackNextGen.jl","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FOptimPackNextGen.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FOptimPackNextGen.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FOptimPackNextGen.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmt%2FOptimPackNextGen.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emmt","download_url":"https://codeload.github.com/emmt/OptimPackNextGen.jl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248107871,"owners_count":21049024,"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":"2024-10-14T17:02:24.397Z","updated_at":"2025-04-09T20:33:46.828Z","avatar_url":"https://github.com/emmt.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OptimPackNextGen.jl\n\n[![License][license-img]][license-url]\n[![Build Status][travis-img]][travis-url]\n[![Appveyor][appveyor-img]][appveyor-url]\n[![Coveralls][coveralls-img]][coveralls-url]\n[![Codecov.io][codecov-img]][codecov-url]\n\n\n`OptimPackNextGen` is a [Julia](http://julialang.org/) package for numerical\noptimization with particular focus on large scale problems.\n\n\n## Large scale problems\n\n* [Quasi-Newton methods](doc/quasinewton.md) can be used to solve nonlinear\n  large scale optimization problems. Optionally, bounds on the variables can be\n  taken into account. The objective function must be differentiable and the\n  caller must provide means to compute the objective function and its gradient.\n  If the [`Zygote`](https://github.com/FluxML/Zygote.jl) is loaded, the\n  gradient of the objective function may be computed by means of\n  automatic-differentiation.\n\n* *Spectral Projected Gradient* (SPG) method is provided for large-scale\n  optimization problems with a differentiable objective function and convex\n  constraints. The caller of `spg` (or `spg!`) shall provide a couple of\n  functions to compute the objective function and its gradient and to project\n  the variables on the feasible set. If the\n  [`Zygote`](https://github.com/FluxML/Zygote.jl) is loaded, the gradient of\n  the objective function may be computed by means of automatic-differentiation.\n\n* [Line searches methods](doc/linesearches.md) are used to approximately\n  minimize the objective function along a given search direction.\n\n* [Algebra](doc/algebra.md) describes operations on \"vectors\" (that is to say\n  the \"variables\" of the problem to solve).\n\n\n## Small to moderate size problems\n\nFor problems of small to moderate size, `OptimPackNextGen` provides:\n\n* Mike Powell's `COBYLA` (Powell, 1994), `NEWUOA` (Powell, 2006), and `BOBYQA`\n  (Powell, 2009) algorithms for minimizing a function of many variables. These\n  methods are *derivatives free* (only the function values are needed).\n  `NEWUOA` is for unconstrained optimization. `COBYLA` accounts for general\n  inequality constraints. `BOBYQA` accounts for bound constraints on the\n  variables.\n\n* `nllsq` implements non-linear (weighted) least squares fit. Powell's NEWUOA\n  method is exploited to find the best fit parameters of given data by a user\n  defined model function.\n\n\n## Univariate functions\n\nThe following methods are provided for univariate functions:\n\n* `Brent.fzero` implements van Wijngaarden–Dekker–Brent method for finding a\n  zero of a function (Brent, 1973).\n\n* `Brent.fmin` implements Brent's method for finding a minimum of a function\n  (Brent, 1973).\n\n* `Bradi.minimize` (resp. `Bradi.maximize`) implements the BRADI (\"Bracket\"\n  then \"Dig\"; Soulez *et al.*, 2014) method for finding the global minimum\n  (resp. maximum) of a function on an interval.\n\n* `Step.minimize` (resp. `Step.maximize`) implements the STEP method (Swarzberg\n  *et al.*, 1994) for finding the global minimum (resp. maximum) of a function\n  on an interval. The objective function `f(x)` and the variable `x` may have\n  units.\n\n\n## Trust region\n\n* Methods `gqtpar` and `gqtpar!` implement Moré \u0026 Sorensen algorithm for\n  computing a trust region step (Moré \u0026 D.C. Sorensen, 1983).\n\n\n## Installation\n\nThe easiest way to install `OptimPackNextGen` is via Julia registry\n[`EmmtRegistry`](https://github.com/emmt/EmmtRegistry):\n\n```julia\nusing Pkg\npkg\"registry add General\"  # if not yet any registries\npkg\"registry add https://github.com/emmt/EmmtRegistry\"\npkg\"add OptimPackNextGen\"\n```\n\n\n## Rationale and related software\n\nRelated software are the [`OptimPack`](https://github.com/emmt/OptimPack)\nlibrary which implements the C version of the algorithms and the\n[`OptimPack.jl`](https://github.com/emmt/OptimPack.jl) Julia package which is a\nwrapper of this library for Julia. Compared to `OptimPack.jl`, the new\n`OptimPackNextGen.jl` implements in pure Julia the algorithms dedicated to\nlarge scale problems but still relies on the C libraries for a few algorithms\n(notably the Powell methods). Precompiled versions of these libraries are\nprovided by\n[OptimPack_jll](https://github.com/JuliaBinaryWrappers/OptimPack_jll.jl)\npackage. The rationale is to facilitate the integration of exotic types of\nvariables for optimization problems in Julia. Eventually, `OptimPackNextGen.jl`\nwill become the next version of `OptimPack.jl` but, until then, it is more\nflexible to have two separate modules and avoid coping with compatibility and\ndesign issues.\n\n\n## References\n\n* S.J. Benson \u0026 J.J. Moré, \"*A limited memory variable metric method in\n  subspaces and bound constrained optimization problems*\", in Subspaces and\n  Bound Constrained Optimization Problems, (2001).\n\n* E.G. Birgin, J.M. Martínez \u0026 M. Raydan, \"*Nonmonotone Spectral Projected\n  Gradient Methods on Convex Sets*,\" SIAM J. Optim. **10**, 1196-1211 (2000).\n\n* R.P. Brent, \"*Algorithms for Minimization without Derivatives*,\"\n  Prentice-Hall, Inc. (1973).\n\n* W.W. Hager \u0026 H. Zhang, \"*A New Conjugate Gradient Method with Guaranteed\n  Descent and an Efficient Line Search*,\" SIAM J. Optim., Vol. 16, pp. 170-192\n  (2005).\n\n* W.W. Hager \u0026 H. Zhang, \"*A survey of nonlinear conjugate gradient methods*,\"\n  Pacific Journal of Optimization, Vol. 2, pp. 35-58 (2006).\n\n* M.R. Hestenes \u0026 E. Stiefel, \"*Methods of Conjugate Gradients for Solving\n  Linear Systems*,\" Journal of Research of the National Bureau of Standards 49,\n  pp. 409-436 (1952).\n\n* D. Liu and J. Nocedal, \"*On the limited memory BFGS method for large scale\n  optimization*\", Mathematical Programming B **45**, 503-528 (1989).\n\n* J.J. Moré \u0026 D.C. Sorensen, \"*Computing a Trust Region Step*,\" SIAM J. Sci.\n  Stat. Comp. **4**, 553-572 (1983).\n\n* J.J. Moré and D.J. Thuente, \"*Line search algorithms with guaranteed\n  sufficient decrease*\" in ACM Transactions on Mathematical Software (TOMS)\n  Volume 20, Issue 3, Pages 286-307 (1994).\n\n* M.J.D. Powell, \"*A direct search optimization method that models the\n  objective and constraint functions by linear interpolation*\" in Advances in\n  Optimization and Numerical Analysis Mathematics and Its Applications, vol.\n  **275** (eds. Susana Gomez and Jean-Pierre Hennart), Kluwer Academic\n  Publishers, pp. 51-67 (1994).\n\n* M.J.D. Powell, \"*The NEWUOA software for unconstrained minimization without\n  derivatives*\" in Large-Scale Nonlinear Optimization, editors G. Di Pillo and\n  M. Roma, Springer, pp. 255-297 (2006).\n\n* M.J.D. Powell, \"*The BOBYQA Algorithm for Bound Constrained Optimization\n  Without Derivatives*\", Technical report, Department of Applied Mathematics\n  and Theoretical Physics, University of Cambridge (2009).\n\n* F. Soulez, É. Thiébaut, M. Tallon, I. Tallon-Bosc \u0026 P. Garcia, \"*Optimal a\n  posteriori fringe tracking in optical interferometry*\" in Proc. SPIE 9146\n  \"*Optical and Infrared Interferometry IV*\", 91462Y (2014);\n  [doi:10.1117/12.2056590](http://dx.doi.org/10.1117/12.2056590).\n\n* T. Steihaug, \"*The conjugate gradient method and trust regions in large scale\n  optimization*\", SIAM Journal on Numerical Analysis, vol. **20**, pp. 626-637\n  (1983).\n\n* S. Swarzberg, G. Seront \u0026 H. Bersini, \"*S.T.E.P.: the easiest way to optimize\n  a function*\" in IEEE World Congress on Computational Intelligence,\n  Proceedings of the First IEEE Conference on Evolutionary Computation, vol.\n  **1**, pp. 519-524 (1994).\n\n* É. Thiébaut, \"*Optimization issues in blind deconvolution algorithms*,\" in\n  Astronomical Data Analysis II, SPIE Proc. **4847**, 174-183 (2002).\n\n[doc-stable-img]: https://img.shields.io/badge/docs-stable-blue.svg\n[doc-stable-url]: https://emmt.github.io/OptimPackNextGen.jl/stable\n\n[doc-dev-img]: https://img.shields.io/badge/docs-dev-blue.svg\n[doc-dev-url]: https://emmt.github.io/OptimPackNextGen.jl/dev\n\n[license-url]: ./LICENSE.md\n[license-img]: http://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat\n\n[travis-img]: https://travis-ci.org/emmt/OptimPackNextGen.jl.svg?branch=master\n[travis-url]: https://travis-ci.org/emmt/OptimPackNextGen.jl\n\n[appveyor-img]: https://ci.appveyor.com/api/projects/status/github/emmt/OptimPackNextGen.jl?branch=master\n[appveyor-url]: https://ci.appveyor.com/project/emmt/OptimPackNextGen-jl/branch/master\n\n[coveralls-img]: https://coveralls.io/repos/emmt/OptimPackNextGen.jl/badge.svg?branch=master\u0026service=github\n[coveralls-url]: https://coveralls.io/github/emmt/OptimPackNextGen.jl?branch=master\n\n[codecov-img]: http://codecov.io/github/emmt/OptimPackNextGen.jl/coverage.svg?branch=master\n[codecov-url]: http://codecov.io/github/emmt/OptimPackNextGen.jl?branch=master\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmt%2Foptimpacknextgen.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femmt%2Foptimpacknextgen.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmt%2Foptimpacknextgen.jl/lists"}