Recent Releases of optimagic
optimagic - v0.5.2
Summary
This minor release adds support for two additional optimizer libraries:
- Nevergrad: A library for gradient-free optimization developed by Facebook Research.
- Bayesian Optimization: A library for constrained bayesian global optimization with Gaussian processes.
In addition, this release includes several bug fixes and improvements to the documentation. Many contributions in this release were made by Google Summer of Code (GSoC) 2025 applicants, with @gauravmanmode and @spline2hg being the accepted contributors.
Pull Requests
- #620 Uses interactive plotly figures in documentation (@timmens).
- #618 Improves bounds processing when no bounds are specified (@timmens).
- #615 Adds pre-commit hook that checks mypy version consistency (@timmens).
- #613 Exposes converter functionality (@spline2hg).
- #612 Fixes results processing to work with new cobyla optimizer (@janosg).
- #610 Adds
needs_boundsandsupports_infinite_boundsfields to algorithm info (@gauravmanmode). - #608 Adds support for plotly >= 6 (@hmgaudecker, @timmens).
- #607 Returns
run_explorationsresults in a dataclass (@r3kste). - #605 Enhances batch evaluator checking and processing, introduces the internal
BatchEvaluatorLiteralliteral, and updates CHANGES.md (@janosg, @timmens). - #602 Adds optimizer wrapper for bayesian-optimization package (@spline2hg).
- #601 Updates pre-commit hooks and fixes mypy issues (@janosg).
- #598 Fixes and adds links to GitHub in the documentation (@hamogu).
- #594 Refines newly added optimizer wrappers (@janosg).
- #591 Adds multiple optimizers from the nevergrad package (@gauravmanmode).
- #589 Rewrites the algorithm selection pre-commit hook in pure Python to address issues with bash scripts on Windows (@timmens).
- #586 and #592 Ensure the SciPy
dispparameter is exposed for the following SciPy algorithms: slsqp, neldermead, powell, conjugategradient, newtoncg, cobyla, truncatednewton, trustconstr (@sefmef, @TimBerti). - #585 Exposes all parameters of SciPy's BFGS optimizer in optimagic (@TimBerti).
- #582 Adds support for handling infinite gradients during optimization (@Aziz-Shameem).
- #579 Implements a wrapper for the PSO optimizer from the nevergrad package (@r3kste).
- #578 Integrates the
intersphinx-registrypackage into the documentation for automatic linking to up-to-date external documentation (@Schefflera-Arboricola). - #576 Wraps oneplusone optimizer from nevergrad (@gauravmanmode, @gulshan-123).
- #572 and #573 Fix bugs in error handling for parameter selector processing and constraints checking (@hmgaudecker).
- #570 Adds a how-to guide for adding algorithms to optimagic and improves internal documentation (@janosg).
- #569 Implements a threading batch evaluator (@spline2hg).
- #568 Introduces an initial wrapper for the migrad optimizer from the iminuit package (@spline2hg).
- #567 Makes the
funargument optional whenfun_and_jacis provided (@gauravmanmode). - #563 Fixes a bug in input harmonization for history plotting (@gauravmanmode).
- #552 Refactors and extends the
Historyclass, removing the internalHistoryArraysclass (@timmens). - #485 Adds bootstrap weights functionality (@alanlujan91).
- Python
Published by timmens 7 months ago
optimagic - v0.5.1
Summary
This is a minor release that introduces the new algorithm selection tool and several small improvements.
To learn more about the algorithm selection feature check out the following resources:
Pull Requests
- #549 Add support for Python 3.13 (@timmens)
- #550 and #534 implement the new algorithm selection tool (@janosg)
- #548 and #531 improve the documentation (@ChristianZimpelmann)
- #544 Adjusts the results processing of the nag optimizers to be compatible with the latest releases (@timmens)
- #543 Adds support for numpy 2.x (@timmens)
- #536 Adds a how-to guide for choosing local optimizers (@mpetrosian)
- #535 Allows algorithm classes and instances in estimation functions (@timmens)
- #532 Makes several small improvements to the documentation (@janosg)
- Python
Published by timmens over 1 year ago
optimagic - v0.5.0
Summary
This is a major release with several breaking changes and deprecations. In this
release we started implementing two major enhancement proposals and renamed the package
from estimagic to optimagic (while keeping the estimagic namespace for the estimation
capabilities).
The implementation of the two enhancement proposals is not complete and will likely
take until version 0.6.0. However, all breaking changes and deprecations (with the
exception of a minor change in benchmarking) are already implemented such that updating
to version 0.5.0 is future proof.
Pull Requests
- #500 removes the dashboard, the support for simopt optimizers and the
derivative_plot(@janosg) - #502 renames estimagic to optimagic (@janosg)
- #504 aligns
maximizeandminimizemore closely with scipy. All related deprecations and breaking changes are listed below. As a result, scipy code that uses minimize with the argumentsx0,fun,jacandmethodwill run without changes in optimagic. Similarly, toOptimizeResultgets some aliases so it behaves more like SciPy's. - #506 introduces the new
Boundsobject and deprecateslower_bounds,upper_bounds,soft_lower_boundsandsoft_upper_bounds(@janosg) - #507 updates the infrastructure so we can make parallel releases under the names
optimagicandestimagic(@timmens) - #508 introduces the new
ScalingOptionsobject and deprecates thescaling_optionsargument ofmaximizeandminimize(@timmens) - #512 implements the new interface for objective functions and derivatives (@janosg)
- #513 implements the new
optimagic.MultistartOptionsobject and deprecates themultistart_optionsargument ofmaximizeandminimize(@timmens) - #514 and #516 introduce the
NumdiffResultobject that is returned fromfirst_derivativeandsecond_derivative. It also fixes several bugs in the pytree handling infirst_derivativeandsecond_derivativeand deprecates Richardson Extrapolation and thekey(@timmens) - #517 introduces the new
NumdiffOptionsobject for configuring numerical differentiation during optimization or estimation (@timmens) - #519 rewrites the logging code and introduces new
LogOptionsobjects (@schroedk) - #521 introduces the new internal algorithm interface. (@janosg and @mpetrosian)
- #522 introduces the new
Constraintobjects and deprecates passing dictionaries or lists of dictionaries as constraints (@timmens)
Breaking changes
- When providing a path for the argument
loggingof the functionsmaximizeandminimizeand the file already exists, the default behavior is to raise an error now. Replacement or extension of an existing file must be explicitly configured. - The argument
if_table_existsinlog_optionshas no effect anymore and a corresponding warning is raised. OptimizeResult.historyis now aoptimagic.Historyobject instead of a dictionary. Dictionary style access is implemented but deprecated. Other dictionary methods might not work.- The result of
first_derivativeandsecond_derivativeis now aoptimagic.NumdiffResultobject instead of a dictionary. Dictionary style access is implemented but other dictionary methods might not work. - The dashboard is removed
- The
derivative_plotis removed. - Optimizers from Simopt are removed.
- Passing callables with the old internal algorithm interface as
algorithmtominimizeandmaximizeis not supported anymore. Use the newAlgorithmobjects instead. For examples see: https://tinyurl.com/24a5cner
Deprecations
- The
criterionargument ofmaximizeandminimizeis renamed tofun(as in SciPy). - The
derivativeargument ofmaximizeandminimizeis renamed tojac(as in SciPy) - The
criterion_and_derivativeargument ofmaximizeandminimizeis renamed tofun_and_jacto align it with the other names. - The
criterion_kwargsargument ofmaximizeandminimizeis renamed tofun_kwargsto align it with the other names. - The
derivative_kwargsargument ofmaximizeandminimizeis renamed tojac_kwargsto align it with the other names. - The
criterion_and_derivative_kwargsargument ofmaximizeandminimizeis renamed tofun_and_jac_kwargsto align it with the other names. - Algorithm specific convergence and stopping criteria are renamed to align them more
with NlOpt and SciPy names.
convergence_relative_criterion_tolerance->convergence_ftol_relconvergence_absolute_criterion_tolerance->convergence_ftol_absconvergence_relative_params_tolerance->convergence_xtol_relconvergence_absolute_params_tolerance->convergence_xtol_absconvergence_relative_gradient_tolerance->convergence_gtol_relconvergence_absolute_gradient_tolerance->convergence_gtol_absconvergence_scaled_gradient_tolerance->convergence_gtol_scaledstopping_max_criterion_evaluations->stopping_maxfunstopping_max_iterations->stopping_maxiter
- The arguments
lower_bounds,upper_bounds,soft_lower_boundsandsoft_upper_boundsare deprecated and replaced byoptimagic.Bounds. This affectsmaximize,minimize,estimate_ml,estimate_msm,slice_plotand several other functions. - The
log_optionsargument ofminimizeandmaximizeis deprecated. Instead,LogOptionsobjects can be passed under theloggingargument. - The class
OptimizeLogReaderis deprecated and redirects toSQLiteLogReader. - The
scaling_optionsargument ofmaximizeandminimizeis deprecated. Instead aScalingOptionsobject can be passed under thescalingargument that was previously just a bool. - Objective functions that return a dictionary with the special keys "value",
"contributions" and "rootcontributions" are deprecated. Instead, likelihood and
least-squares functions are marked with a
mark.likelihoodor `mark.leastsquaresdecorator. There is a detailed how-to guide that shows the new behavior. This affectsmaximize,minimize,slice_plot` and other functions that work with objective functions. - The
multistart_optionsargument ofminimizeandmaximizeis deprecated. Instead, aMultistartOptionsobject can be passed under themultistartargument. - Richardson Extrapolation is deprecated in
first_derivativeandsecond_derivative - The
keyargument is deprecated infirst_derivativeandsecond_derivative - Passing dictionaries or lists of dictionaries as
constraintstomaximizeorminimizeis deprecated. Use the newConstraintobjects instead.
- Python
Published by timmens over 1 year ago
optimagic - v0.5.0rc1
First release candidate for version 0.5.0
Summary
This is a major release with several breaking changes and deprecations. In this
release we started implementing two major enhancement proposals and renamed the package
from estimagic to optimagic (while keeping the estimagic namespace for the estimation
capabilities).
The implementation of the two enhancement proposals is not complete and will likely
take until version 0.6.0. However, all breaking changes and deprecations (with the
exception of a minor change in benchmarking) are already implemented such that updating
to version 0.5.0 is future proof.
Pull Requests
- #500 removes the dashboard, the support for simopt optimizers and the
derivative_plot(@janosg) - #502 renames estimagic to optimagic (@janosg)
- #504 aligns
maximizeandminimizemore closely with scipy. All related deprecations and breaking changes are listed below. As a result, scipy code that uses minimize with the argumentsx0,fun,jacandmethodwill run without changes in optimagic. Similarly, toOptimizeResultgets some aliases so it behaves more like SciPy's. - #506 introduces the new
Boundsobject and deprecateslower_bounds,upper_bounds,soft_lower_boundsandsoft_upper_bounds(@janosg) - #507 updates the infrastructure so we can make parallel releases under the names
optimagicandestimagic(@timmens) - #508 introduces the new
ScalingOptionsobject and deprecates thescaling_optionsargument ofmaximizeandminimize(@timmens) - #512 implements the new interface for objective functions and derivatives (@janosg)
- #513 implements the new
optimagic.MultistartOptionsobject and deprecates themultistart_optionsargument ofmaximizeandminimize(@timmens) - #514 and #516 introduce the
NumdiffResultobject that is returned fromfirst_derivativeandsecond_derivative. It also fixes several bugs in the pytree handling infirst_derivativeandsecond_derivativeand deprecates Richardson Extrapolation and thekey(@timmens) - #517 introduces the new
NumdiffOptionsobject for configuring numerical differentiation during optimization or estimation (@timmens) - #519 rewrites the logging code and introduces new
LogOptionsobjects ({ghuser}schroedk) - #521 introduces the new internal algorithm interface. (@janosg and @mpetrosian)
- #522 introduces the new
Constraintobjects and deprecates passing dictionaries or lists of dictionaries as constraints (@timmens)
Breaking changes
- When providing a path for the argument
loggingof the functionsmaximizeandminimizeand the file already exists, the default behavior is to raise an error now. Replacement or extension of an existing file must be explicitly configured. - The argument
if_table_existsinlog_optionshas no effect anymore and a corresponding warning is raised. OptimizeResult.historyis now aoptimagic.Historyobject instead of a dictionary. Dictionary style access is implemented but deprecated. Other dictionary methods might not work.- The result of
first_derivativeandsecond_derivativeis now aoptimagic.NumdiffResultobject instead of a dictionary. Dictionary style access is implemented but other dictionary methods might not work. - The dashboard is removed
- The
derivative_plotis removed. - Optimizers from Simopt are removed.
- Passing callables with the old internal algorithm interface as
algorithmtominimizeandmaximizeis not supported anymore. Use the newAlgorithmobjects instead. For examples see: https://tinyurl.com/24a5cner
Deprecations
- The
criterionargument ofmaximizeandminimizeis renamed tofun(as in SciPy). - The
derivativeargument ofmaximizeandminimizeis renamed tojac(as in SciPy) - The
criterion_and_derivativeargument ofmaximizeandminimizeis renamed tofun_and_jacto align it with the other names. - The
criterion_kwargsargument ofmaximizeandminimizeis renamed tofun_kwargsto align it with the other names. - The
derivative_kwargsargument ofmaximizeandminimizeis renamed tojac_kwargsto align it with the other names. - The
criterion_and_derivative_kwargsargument ofmaximizeandminimizeis renamed tofun_and_jac_kwargsto align it with the other names. - Algorithm specific convergence and stopping criteria are renamed to align them more
with NlOpt and SciPy names.
convergence_relative_criterion_tolerance->convergence_ftol_relconvergence_absolute_criterion_tolerance->convergence_ftol_absconvergence_relative_params_tolerance->convergence_xtol_relconvergence_absolute_params_tolerance->convergence_xtol_absconvergence_relative_gradient_tolerance->convergence_gtol_relconvergence_absolute_gradient_tolerance->convergence_gtol_absconvergence_scaled_gradient_tolerance->convergence_gtol_scaledstopping_max_criterion_evaluations->stopping_maxfunstopping_max_iterations->stopping_maxiter
- The arguments
lower_bounds,upper_bounds,soft_lower_boundsandsoft_upper_boundsare deprecated and replaced byoptimagic.Bounds. This affectsmaximize,minimize,estimate_ml,estimate_msm,slice_plotand several other functions. - The
log_optionsargument ofminimizeandmaximizeis deprecated. Instead,LogOptionsobjects can be passed under theloggingargument. - The class
OptimizeLogReaderis deprecated and redirects toSQLiteLogReader. - The
scaling_optionsargument ofmaximizeandminimizeis deprecated. Instead aScalingOptionsobject can be passed under thescalingargument that was previously just a bool. - Objective functions that return a dictionary with the special keys "value",
"contributions" and "rootcontributions" are deprecated. Instead, likelihood and
least-squares functions are marked with a
mark.likelihoodor `mark.leastsquaresdecorator. There is a detailed how-to guide that shows the new behavior. This affectsmaximize,minimize,slice_plot` and other functions that work with objective functions. - The
multistart_optionsargument ofminimizeandmaximizeis deprecated. Instead, aMultistartOptionsobject can be passed under themultistartargument. - Richardson Extrapolation is deprecated in
first_derivativeandsecond_derivative - The
keyargument is deprecated infirst_derivativeandsecond_derivative - Passing dictionaries or lists of dictionaries as
constraintstomaximizeorminimizeis deprecated. Use the newConstraintobjects instead.
- Python
Published by janosg over 1 year ago
optimagic - v0.4.7
v0.4.7
This release contains minor improvements and bug fixes. It is the last release before the package will be renamed to optimagic and two large enhancement proposals will be implemented.
- #490 adds the attribute
optimize_resultto theMomentsResultclass (@timmens) - #483 fixes a bug in the handling of keyword arguments in
bootstrap(@alanlujan91) - #477 allows to use an identity weighting matrix in MSM estimation (@sidd3888)
- #473 fixes a bug where bootstrap keyword arguments were ignored
get_moments_cov(@timmens) - #467, #478, #479 and #480 improve the documentation (@mpetrosian, @segsell, and @timmens)
- Python
Published by janosg over 1 year ago
optimagic - v0.4.6
This release drastically improves the optimizer benchmarking capabilities, especially with noisy functions and parallel optimizers. It makes tranquilo and numba optional dependencies and is the first version of estimagic to be compatible with Python 3.11.
- #464 Makes tranquilo and numba optional dependencies (@janosg)
- #461 Updates docstrings for procssbenchmarkresults (@segsell)
- #460 Fixes several bugs in the processing of benchmark results with noisy functions (@janosg)
- #459 Prepares benchmarking functionality for parallel optimizers (@mpetrosian and @janosg)
- #457 Removes some unused files (@segsell)
- #455 Improves a local pre-commit hook (@ChristianZimpelmann)
- Python
Published by janosg over 2 years ago
optimagic - v0.4.5
- #379 Improves the estimation table (@ChristianZimpelmann)
- #445 fixes line endings in local pre-commit hook (@ChristianZimpelmann)
- #443, #444, #445, #446, #448 and #449 are a major refactoring of tranquilo (@timmens and @janosg)
- #441 Adds an aggregated convergence plot for benchmarks (@mpetrosian)
- #435 Completes the cartis-roberts benchmark set (@segsell)
- Python
Published by janosg almost 3 years ago
optimagic - v0.4.4
- #437 removes fuzzywuzzy as dependency (@aidatak97)
- #432 makes logging compatible with sqlalchemy 2.x (@janosg)
- #430 refactors the getter functions in Tranquilo (@janosg)
- #427 improves pre-commit setup (@timmens and @hmgaudecker)
- #425 improves handling of notebooks in documentation (@baharcos)
- #423 and #399 add code to calculate poisdeness constants (@segsell)
- #420 improve CI infrastructure (@hmgaudecker, @janosg)
- #407 adds global optimizers from scipy (@baharcos)
- Python
Published by janosg about 3 years ago
optimagic - v0.4.2
This realease contains a bugfix and several improvements
If you have used multistart optimizations with a least squares optimizer you should update as quickly as possible.
412 Improves the output of the fides optimizer among other small changes (@janosg)
411 Fixes a bug in multistart optimizations with least squares optimizers. See #410 for details (@janosg)
404 speeds up the gqtpar subsolver (@mpetrosian )
400 refactors subsolvers (@mpetrosian)
398, #397, #395, #390, #389, #388 continue with the implementation of tranquilo (@segsell, @timmens, @mpetrosian, @janosg)
391 speeds up the bntr subsolver
- Python
Published by janosg over 3 years ago
optimagic - v0.4.1
This is a minor polishing release.
- #307 Adopts a code of condact and governance model
- #384 384 Polish documentation @janosg and @mpetrosian
- #374 Moves the documentation to MyST @baharcos
- #365 Adds copybuttos to documentation @amageh
- #371 Refactors the pounders algorithm @segsell
- #369 Fixes CI @janosg
- #367 Fixes the linux environment @timmens
- #294 Adds the very first experimental version of tranquilo @janosg, @timmens, @segsell, @mpetrosian
- Python
Published by janosg over 3 years ago
optimagic - v0.3.3
First release with full jax support (i.e. jax arrays do not have to be hidden from estimagic)
- #357 Adds jax support @janosg
- #359 Improves error handling with violated constaints @timmens
- #358 Improves cartis roberts set of test functions and improves the default latex rendering of MultiIndex tables @mpetrosian
- Python
Published by janosg over 3 years ago
optimagic - v0.3.1
This is the first version of estimagic with experimental support for nonlinear constraints. Moreover, we fix some bugs and improve test coverage.
- #349 fixes bugs introduced in the transition to pytrees and custom results objects. Details are described in the PR comments.
- #346 Adds experimental support for nonlinear constraints
- Python
Published by janosg over 3 years ago
optimagic - v0.3.0
Summary
Fist release with pytree support in optimization, estimation and differentiation and much better result objects in optimization and estimation.
Breaking changes
- New
OptimizeResultobject is returned bymaximizeandminimize. This breaks all code that expects the old result dictionary. Usage of the new result is explained in the getting started tutorial on optimization. - New internal optimizer interface that can break optimization with custom optimizers
- The inferface of
process_constraintschanged quite drastically. This breaks code that usedprocess_constraintsto get the number of free parameters or check if constraints are valid. There are new high level functionsestimagic.check_constraintsandestimagic.count_free_paramsinstead. - Some functions from
estimagic.logging.read_logare removed and replaced byestimagic.OptimizeLogReader. - Convenience functions to create namedtuples are removed from
estimagic.utilities.
PRs
- #345 Moves estimation_table to new latex functionality of pandas
(
mpetrosian) - #344 Adds pytree support to slice_plot (
janosg) - #343 Improves the result object of estimation functions and makes msm estimation
pytree compatible (
janosg) - #342 Improves default options of the fides optimizer, allows single constraints
and polishes the documentation (
janosg) - #340 Enables history collection for optimizers that evaluate the criterion
function in parallel (
janosg) - #339 Incorporates user feedback and polishes the documentation (
janosg) - #338 Improves log reading functions (
janosg) - #336 Adds pytree support to the dashboard (
roecla). - #335 Introduces an
OptimizeResultobject and functionality for history plotting (janosg). - #333 Uses new history collection feature to speed up benchmarking
(
segsell). - #330 Is a major rewrite of the estimation code (
timmens). - #328 Improves quadratic surrogate solvers used in pounders and tranquilo
(
segsell). - #326 Improves documentation of numerical derivatives (
timmens). - #325 Improves the slice_plot (
mpetrosian) - #324 Adds ability to collect optimization histories without logging
(
janosg). - #311 and #288 rewrite all plotting code in plotly (
timmensandaidatak97). - #306 improves quadratic surrogate solvers used in pounders and tranquilo
(
segsell). - #305 allows pytrees during optimization and rewrites large parts of the
constraints processing (
janosg). - #303 introduces a new optimizer interface that makes it easier to add optimizers
and makes it possible to access optimizer specific information outside of the
intrenalcriterionand_derivative (
janosgandroecla).
- Python
Published by janosg over 3 years ago
optimagic - v0.2.2
First release with own optimization algorithms. - parallel Nelder-Mead by Jacek Barszczewski - parallel Pounders by Sebastian Gsell
The algorithms are still work in progress and will get more convergence criteria, support for bounds, etc. in the future.
- Python
Published by janosg about 4 years ago
optimagic - v0.2.0
Release 0.2.0
Add a lot of new functionality with a few minor breaking changes. We have more optimizers, better error handling, bootstrap and inference for method of simulated moments.
Breaking changes
- logging is disabled by default during optimization.
- the logoption "ifexists" was renamed to "iftableexists"
- The comparison plot function is removed.
- first_derivative now returns a dictionary, independent of arguments.
- structure of the logging database has changed
- there is an additional boolean flag named
scalingin minimize and maximize
New features
- Optimizer benchmarking
- Multistart optimization
- More optimizers (fides, ipopt, nlopt, pygmo)
estimate_msmandestimate_mlfunctions- More diagnostic tools for numerical derivatives
- Python
Published by janosg about 4 years ago