Changes

This is a record of all past optimagic releases and what went into them in reverse chronological order. We follow semantic versioning and all releases are available on Anaconda.org.

0.5.2

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.

  • 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_bounds and supports_infinite_bounds fields to algorithm info (gauravmanmode).

  • 608 Adds support for plotly >= 6 (hmgaudecker, timmens).

  • 607 Returns run_explorations results in a dataclass (r3kste).

  • 605 Enhances batch evaluator checking and processing, introduces the internal BatchEvaluatorLiteral literal, 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 disp parameter is exposed for the following SciPy algorithms: slsqp, neldermead, powell, conjugate_gradient, newton_cg, cobyla, truncated_newton, trust_constr (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-registry package 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 fun argument optional when fun_and_jac is provided (gauravmanmode).

  • 563 Fixes a bug in input harmonization for history plotting (gauravmanmode).

  • 552 Refactors and extends the History class, removing the internal HistoryArrays class (timmens).

  • 485 Adds bootstrap weights functionality (alanlujan91).

0.5.1

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:

0.5.0

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.

  • 500 removes the dashboard, the support for simopt optimizers and the derivative_plot (janosg)

  • 502 renames estimagic to optimagic (janosg)

  • 504 aligns maximize and minimize more closely with scipy. All related deprecations and breaking changes are listed below. As a result, scipy code that uses minimize with the arguments x0, fun, jac and method will run without changes in optimagic. Similarly, to OptimizeResult gets some aliases so it behaves more like SciPy’s.

  • 506 introduces the new Bounds object and deprecates lower_bounds, upper_bounds, soft_lower_bounds and soft_upper_bounds (janosg)

  • 507 updates the infrastructure so we can make parallel releases under the names optimagic and estimagic (timmens)

  • 508 introduces the new ScalingOptions object and deprecates the scaling_options argument of maximize and minimize (timmens)

  • 512 implements the new interface for objective functions and derivatives (janosg)

  • 513 implements the new optimagic.MultistartOptions object and deprecates the multistart_options argument of maximize and minimize (timmens)

  • 514 and 516 introduce the NumdiffResult object that is returned from first_derivative and second_derivative. It also fixes several bugs in the pytree handling in first_derivative and second_derivative and deprecates Richardson Extrapolation and the key (timmens)

  • 517 introduces the new NumdiffOptions object for configuring numerical differentiation during optimization or estimation (timmens)

  • 519 rewrites the logging code and introduces new LogOptions objects (schroedk)

  • 521 introduces the new internal algorithm interface. (janosg and mpetrosian)

  • 522 introduces the new Constraint objects and deprecates passing dictionaries or lists of dictionaries as constraints (timmens)

Breaking changes

  • When providing a path for the argument logging of the functions maximize and minimize and 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_exists in log_options has no effect anymore and a corresponding warning is raised.

  • OptimizeResult.history is now a optimagic.History object instead of a dictionary. Dictionary style access is implemented but deprecated. Other dictionary methods might not work.

  • The result of first_derivative and second_derivative is now a optimagic.NumdiffResult object instead of a dictionary. Dictionary style access is implemented but other dictionary methods might not work.

  • The dashboard is removed

  • The derivative_plot is removed.

  • Optimizers from Simopt are removed.

  • Passing callables with the old internal algorithm interface as algorithm to minimize and maximize is not supported anymore. Use the new Algorithm objects instead. For examples see: https://tinyurl.com/24a5cner

Deprecations

  • The criterion argument of maximize and minimize is renamed to fun (as in SciPy).

  • The derivative argument of maximize and minimize is renamed to jac (as in SciPy)

  • The criterion_and_derivative argument of maximize and minimize is renamed to fun_and_jac to align it with the other names.

  • The criterion_kwargs argument of maximize and minimize is renamed to fun_kwargs to align it with the other names.

  • The derivative_kwargs argument of maximize and minimize is renamed to jac_kwargs to align it with the other names.

  • The criterion_and_derivative_kwargs argument of maximize and minimize is renamed to fun_and_jac_kwargs to 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_rel

    • convergence_absolute_criterion_tolerance -> convergence_ftol_abs

    • convergence_relative_params_tolerance -> convergence_xtol_rel

    • convergence_absolute_params_tolerance -> convergence_xtol_abs

    • convergence_relative_gradient_tolerance -> convergence_gtol_rel

    • convergence_absolute_gradient_tolerance -> convergence_gtol_abs

    • convergence_scaled_gradient_tolerance -> convergence_gtol_scaled

    • stopping_max_criterion_evaluations -> stopping_maxfun

    • stopping_max_iterations -> stopping_maxiter

  • The arguments lower_bounds, upper_bounds, soft_lower_bounds and soft_upper_bounds are deprecated and replaced by optimagic.Bounds. This affects maximize, minimize, estimate_ml, estimate_msm, slice_plot and several other functions.

  • The log_options argument of minimize and maximize is deprecated. Instead, LogOptions objects can be passed under the logging argument.

  • The class OptimizeLogReader is deprecated and redirects to SQLiteLogReader.

  • The scaling_options argument of maximize and minimize is deprecated. Instead a ScalingOptions object can be passed under the scaling argument that was previously just a bool.

  • Objective functions that return a dictionary with the special keys “value”, “contributions” and “root_contributions” are deprecated. Instead, likelihood and least-squares functions are marked with a mark.likelihood or mark.least_squares decorator. There is a detailed how-to guide that shows the new behavior. This affects maximize, minimize, slice_plot and other functions that work with objective functions.

  • The multistart_options argument of minimize and maximize is deprecated. Instead, a MultistartOptions object can be passed under the multistart argument.

  • Richardson Extrapolation is deprecated in first_derivative and second_derivative

  • The key argument is deprecated in first_derivative and second_derivative

  • Passing dictionaries or lists of dictionaries as constraints to maximize or minimize is deprecated. Use the new Constraint objects instead.

0.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_result to the MomentsResult class (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)

0.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 procss_benchmark_results (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)

0.4.5

0.4.4

0.4.3

  • 416 improves documentation and packaging (janosg)

0.4.2

0.4.1

0.4.0

0.3.4

0.3.3

  • 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)

0.3.2

  • 355 Improves test coverage of contraints processing (janosg)

  • 354 Improves test coverage for bounds processing (timmens)

  • 353 Improves history plots (timmens)

  • 352 Improves scaling and benchmarking (janosg)

  • 351 Improves estimation summaries (timmens)

  • 350 Allow empty queries or selectors in constraints (janosg)

0.3.1

0.3.0

Fist release with pytree support in optimization, estimation and differentiation and much better result objects in optimization and estimation.

Breaking changes

  • New OptimizeResult object is returned by maximize and minimize. 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_constraints changed quite drastically. This breaks code that used process_constraints to get the number of free parameters or check if constraints are valid. There are new high level functions estimagic.check_constraints and estimagic.count_free_params instead.

  • Some functions from estimagic.logging.read_log are removed and replaced by estimagic.OptimizeLogReader.

  • Convenience functions to create namedtuples are removed from estimagic.utilities.

  • 346 Add option to use nonlinear constraints (timmens)

  • 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.

  • 338 Improves log reading functions (janosg)

  • 336 Adds pytree support to the dashboard (roecla).

  • 335 Introduces an OptimizeResult object 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 (timmens and aidatak97).

  • 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 intrenal_criterion_and_derivative (janosg and roecla).

0.2.5

  • 302 Drastically improves error handling during optimization (janosg).

0.2.4

0.2.3

  • 295 Fixes a small bug in estimation_table (mpetrosian).

  • 286 Adds pytree support for first and second derivative (timmens).

  • 285 Allows to use estimation functions with external optimization (janosg).

  • 283 Adds fast solvers for quadratic trustregion subproblems (segsell).

  • 282 Vastly improves estimation tables (mpetrosian).

  • 281 Adds some tools to work with pytrees (janosg and timmens).

  • 278 adds Estimagic Enhancement Proposal 1 for the use of Pytrees in Estimagic (janosg)

0.2.2

0.2.1

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. The breaking changes are: - logging is disabled by default during optimization. - the log_option “if_exists” was renamed to “if_table_exists” - 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 scaling in minimize and maximize

0.1.3 - 2021-06-25

0.1.2 - 2021-02-07

  • 189 Improve documentation and logging (roecla)

0.1.1 - 2021-01-13

This release greatly expands the set of available optimization algorithms, has a better and prettier dashboard and improves the documentation.

  • 187 Implement dot notation in algo_options (roecla)

  • 183 Improve documentation (SofiaBadini)

  • 182 Allow for constraints in likelihood inference (janosg)

  • 181 Add DF-OLS optimizer from Numerical Algorithm Group (roecla)

  • 180 Add pybobyqa optimizer from Numerical Algorithm Group (roecla)

  • 179 Allow base_steps and min_steps to be scalars (tobiasraabe)

  • 178 Refactoring of dashboard code (roecla)

  • 177 Add stride as a new dashboard argument (roecla)

  • 176 Minor fix of plot width in dashboard (janosg)

  • 174 Various dashboard improvements (roecla)

  • 173 Add new color palettes and use them in dashboard (janosg)

  • 172 Add high level log reading functions (janosg)

0.1.0dev1 - 2020-09-08

This release entails a complete rewrite of the optimization code with many breaking changes. In particular, some optimizers that were available before are not anymore. Those will be re-introduced soon. The breaking changes include:

  • The database is restructured. The new version simplifies the code, makes logging faster and avoids the sql column limit.

  • Users can provide closed form derivative and/or criterion_and_derivative where the latter one can exploit synergies in the calculation of criterion and derivative. This is also compatible with constraints.

  • Our own (parallelized) first_derivative function is used to calculate gradients during the optimization when no closed form gradients are provided.

  • Optimizer options like convergence criteria and optimization results are harmonized across optimizers.

  • Users can choose from several batch evaluators whenever we parallelize (e.g. for parallel optimizations or parallel function evaluations for numerical derivatives) or pass in their own batch evaluator function as long as it has a compatible interface. The batch evaluator interface also standardizes error handling.

  • There is a well defined internal optimizer interface. Users can select the pre-implemented optimizers by algorithm=”name_of_optimizer” or their own optimizer by algorithm=custom_minimize_function

  • Optimizers from pygmo and nlopt are no longer supported (will be re-introduced)

  • Greatly improved error handling.

  • 169 Add additional dashboard arguments

  • 168 Rename lower and upper to lower_bound and upper_bound (ChristianZimpelmann)

  • 167 Improve dashboard styling (roecla)

  • 166 Re-add POUNDERS from TAO (tobiasraabe)

  • 165 Re-add the scipy optimizers with harmonized options (roecla)

  • 164 Closed form derivatives for parameter transformations (timmens)

  • 163 Complete rewrite of optimization with breaking changes (janosg)

  • 162 Improve packaging and relax version constraints (tobiasraabe)

  • 160 Generate parameter tables in tex and html (mpetrosian)

0.0.31 - 2020-06-20

  • 130 Improve wrapping of POUNDERS algorithm (mo2561057)

  • 159 Add Richardson Extrapolation to first_derivative (timmens)

0.0.30 - 2020-04-22

  • 158 allows to specify a gradient in maximize and minimize (janosg)

0.0.29 - 2020-04-16

0.0.28 - 2020-03-17