PackageTrack
Sign in Get early access

argmin

Numerical optimization in pure Rust

0.11.0 4.2M downloads/mo #4913 most downloaded on crates.io argmin-rs/argmin

What this package is like to depend on

Last release 10 months ago

28 Sep 2025

Release timing varies

gaps range from 9 days to 1.6 years

Some releases are documented

notes for 26 of 45 stable releases

1 version withdrawn

withdrawn after publishing

9 years old

47 releases · first in 2018

1 release in the last 12 months

see the full history below

Release timeline

47 releases · Jan 2018 to Sep 2025
2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 47
  1. 0.11.0 28 Sep 2025
    Release notes

    Finally released v0.11.0. Sincere and huge thank you to everyone who contributed, to those who pushed me to make a release, and to those who supported me in getting the release over the finish line.

    This release, together with argmin-math v0.5.0 brings support for new ndarray and algebra versions as well as faer.

    What's Changed

    Even though I tried hard, due to the long time since the last release, I might have overlooked contributions. If that is the case, please get in touch and I'll update the release notes as well as the changelog accordingly.

    Full Changelog: argmin-v0.10.0...argmin-v0.11.0

    Open source →
    Release notes

    Added

    • Added tests to BrentRoot (@GermanHeim)

    Changed

    • Adjust Solver to make it object safe [@jjbayer, #487]
    • Replace use of unmaintained instant crate with web_time (@airwoodix, #539)
    • Support WASM without javascript by making rand an optional dependency (@rikhuijzer, #583)
    • Update the version of rand to address compatibility concerns with future Rust editions (@josiahkane, #607)
    • Minor optimisations and clippy fixes [@pacak, #483; @jjbayer, #488; @0e4ef622, #504; @stefan-k, #531, #596, @josiahkane, #603]
    • Counting and timing of function calls is now turned off by default (@pacak)

    Fixed

    • Fixed the BFGS gradient type parameters to allow more flexible custom types (@dspyz-matician, #508)
    • Small fixes to the documentation (@stefan-k, #476, #610; @GermanHeim, #570)
    • A number of fixes related to cargo-deny (@Tastaturtaste)
    • Use web-time instead of unmaintained instant crate (@airwoodix)
    • Fixed clippy lints and website build (@0e4ef622)
    Open source →
  2. 0.10.0 27 Feb 2024
    Release notes

    What's Changed

    • Fixed argmin-math README badges, added Discord server and download count by @stefan-k in #382
    • allow user to set ParticleSwarm's random number generator by @jonboh in #383
    • Turn examples into crates by @stefan-k in #387
    • Fixed broken example links in blog posts by @stefan-k in #388
    • Update gnuplot requirement from 0.0.39 to 0.0.40 by @dependabot in #390
    • Keep track of residuals in IterState, adapted GaussNewton accordingly by @gmilleramilar in #343
    • Fixed handling of residuals in GaussNewton by @stefan-k in #392
    • Update actions/checkout to v4 by @stefan-k in #393
    • Update gnuplot requirement from 0.0.40 to 0.0.41 by @dependabot in #394
    • Dedicated crate for FileCheckpoint, removed SerializeAlias and DeserializeOwnedAlias by @stefan-k in #395
    • Fixed file checkpointing tests and added crate tests to CI by @stefan-k in #396
    • It's 2024! by @stefan-k in #397
    • Removed unnecessary waiting for 1 sec in examples by @stefan-k in #402
    • Add optional timeout to Executor by @stefan-k in #405
    • Talk about examples in the documentation by @stefan-k in #406
    • Added clippy checks for examples to CI, removed some argmin checks by @stefan-k in #407
    • Use the new residuals handling in CG by @stefan-k in #408
    • Fixed build of main docs, exclude examples by @stefan-k in #410
    • Interrupt handling now includes SIGINT, SIGTERM and SIGHUP, renamed KeyboardInterrupt to Interrupt by @stefan-k in #413
    • Restructured repo: All crates are now in the crates directory by @stefan-k in #415
    • Slightly better error handling in L-BFGS by @stefan-k in #416
    • Update gnuplot requirement from 0.0.41 to 0.0.42 by @dependabot in #464
    • Update slog-term, stop ignoring RUSTSEC-2021-0145 by @stefan-k in #465
    • Remove vulnerable ip package from website by @stefan-k in #466
    • Created READMEs for observers and checkpointing by @stefan-k in #463
    • Don't run CI on win-netlib-fix branch by @stefan-k in #467
    • Removed unnecessary Serialize/Deserialize derives by @stefan-k in #470
    • argmin version 0.10.0 and argmin-math version 0.4.0 by @stefan-k in #462

    New Contributors

    Full Changelog: argmin-v0.9.0...argmin-v0.10.0

    Open source →
    Release notes

    Added

    • Added optional timeout to Executor (@stefan-k, #405)

    Changed

    • Users can now set ParticleSwarms random number generator (@jonboh, #383)
    • Moved all observers and checkpointing into dedicated crates. This led to substantially fewer dependencies for argmin itself
      • SlogLogger moved into argmin-observer-slog (@stefan-k, #311)
      • WriteToFile was renamed to ParamWriter and moved into argmin-observer-paramwriter (@stefan-k, #395)
      • FileCheckpoint moved into argmin-checkpointing-file (@stefan-k, #311)
    • Added state to observe_init of Observe trait (@stefan-k, #311)
    • All crates are now in the crates directory (@stefan-k, #415)
    • All examples are now crates and are in the examples directory. (@stefan-k, #387)
    • Removed SerializeAlias and DeserializeAlias traits since they are not necessary anymore (@stefan-k, #395)
    • Residuals in CG are now handled by IterState (@stefan-k, #408)
    • Interrupt handling now includes SIGINT, SIGTERM and SIGHUP and KeyboardInterrupt was renamed to Interrupt (@stefan-k, #413)
    • Error handling in LBFGS was slightly improved (@stefan-k, #416)
    • KvValue::get_float(&self) now works for all kinds of KvValue (@stefan-k, #311)
    • Updated gnuplot from 0.0.39 to 0.0.4 (#394)

    Fixed

    • Fixed residuals handling in GaussNewton (@gmilleramilar, @stefan-k, #343, #392)
    Open source →
  3. 0.9.0 06 Jan 2024
    Release notes

    Added

    • Added a simple example of Nelder-Mead usage (@cjordan, #359)

    Fixed

    • Clippy lints (@jjbayer, @stefan-k, #341, #376, #380)
    • Fixed wrong example link (@itrumper, #352)
    • Correct line search to search over gradient (@DevonMorris, #354)
    • SteepestDescent now correctly keeps track of prev_param (@DevonMorris, #362)
    • Added a missing feature for testing argmin-math in the docs (@stefan-k, #371)
    • Fixed a typo in argmin book (@imeckler, #373)
    • Fixed crate versions in book (@stefan-k, #375)

    Changed

    • Updated gnuplot to 0.0.39 (@stefan-k, #364)
    • Switched to resolver = 2 for entire workspace (@stefan-k, #372)
    Open source →
  4. 0.8.1 20 Feb 2023
    Release notes

    Added

    • Mentioned cobyla in docs and README (@relf)

    Fixed

    • Restored Serialize/Deserialize derives for ObserverMode (@maoe)

    Changed

    • Updated ctrlc to 3.2.4 (@stefan-k)
    • Updated rayon to 1.6 (@stefan-k)
    • Updated slog to 2.7 (@stefan-k)
    • Updated slog-term to 2.9 (@stefan-k)
    • Updated slog-json to 2.6 (@stefan-k)
    Open source →
  5. 0.8.0 28 Jan 2023
    Release notes

    Added

    • Added a full feature which enables all features (@stefan-k)
    • Added a particle swarm optimization example using the nalgebra math backend (@stefan-k)
    • Added a L-BFGS example using the nalgebra math backend (@stefan-k)

    Changed

    • Improved termination handling (@relf, #305)
      • Introduced TerminationStatus which can either be Terminated(TerminationReason) or NotTerminated
      • The fields of the TerminationReason enum were reduced to cases potentially relevant to any solver. Solver-specific cases can be handled with SolverExit(String).
      • Added new TerminationReason::KeyboardInterrupt and TerminationReason::Converged
    • Changes to KV store used to get values from the solver to observers (@stefan-k)
      • KV store is now typed (via KvValue), which means that observers can now use the actual numbers (in the past those values were only dyn Display and as such could only be printed)
      • make_kv! renamed to kv!
    • Solver does not need to be Serialize anymore when serde1 feature is enabled. This was an oversight reported by @relf and fixed by @stefan-k
    • Better calculation of elapsed time inside Executor (@TheIronBorn)
    • The check whether the target cost is reached is now based on the current best cost function value rather than the current cost function value (@relf)
    Open source →
  6. 0.7.0 28 Aug 2022
    Release notes

    Added

    • L1 regularization added to L-BFGS (also known as OWL-QN). L-BFGS now has more trait bounds, please consult the documentation if this causes problems. (#244, #248, #250, Thanks to @vbkaisetsu)

    Changed

    • The ArgminL1Norm trait was added by @vbkaisetsu for the L1 regularization in L-BFGS. In order to make the L2 norm more consistent, the corresponding trait was renamed from ArgminNorm to ArgminL2Norm and the norm method was renamed to l2_norm. (#253, @stefan-k)

    Fixed

    • Version 0.6 accidentally removed the possibility to deactivate the ndarray-linalg dependency in argmin-math. This leads to problems in downstream crates which do not need the functionality of ndarray-linalg and want to avoid linking angainst a BLAS. In this version, this functionality was added again. Please consult the documentation of argmin-math for details on the available backends and their configuration. (#243, #249, @stefan-k)
    • Fixed type alias names in examples (#245, Thanks to @vbkaisetsu)
    • Fixed a bug in dogleg method (#246, #247, @stefan-k, Thanks to @renato145 for reporting!)
    Open source →
  7. 0.6.0 09 Aug 2022
    Release notes

    This is a rather large release with many (breaking) changes.

    • Code related to the abstraction of math backends was split of into the argmin-math crate. This crate offers now the traits related to math operations as well as their implementations for various backends (vec, ndarray, nalgebra). The backends can be turned on and off as needed. It also supports different versions of the backends.
    • The serde dependency is now optional and feature-gated via serde1. Disabling the serde1 feature disables checkpointing and some logging.
    • The ArgminOp trait was removed and replaced with more specialized traits such as Operator, CostFunction, Gradient, Jacobian, Hessian, Anneal. All of the above mentioned traits come with bulk_* methods which allow one to compute cost function, gradients,... in parallel as long as the rayon feature is enabled. This is so far used in Particle Swarm Optimization.
    • The handling of solver-internal state was redesigned completely to allow for various kinds of state, depending on the solver. There is a State trait now which defines the basic functionality that a state must offer.
    • Many aspects were redesigned to avoid unnecessary cloning
    • ArgminResult was renamed to OptimizationResult and also has a more useful API now. It returns the solver, the problem and the final internal state.
    • The Solver trait was redesigned
    • The solver is now configured/initialized via the configure method on Executor
    • KV does not store Strings anymore but rather dyn Display. This avoids unnecessarily stringifying variables when no observer is used.
    • Checkpointing is now a trait (so everyone can implement their own checkpointing mechanisms). Also the handling of checkpoints was completely redesigned.
    • Made the API surface a bit more consistent.
    • The prelude was removed
    • OpWrapper was renamed to Problem and has now a more consistent interface. It still keeps track of the function evaluations, but to be flexible enough to support future or user-defined traits, these are stored in a HashMap now.
    • PSO was redesigned and a PopulationState was introduced which replaces IterState in PSO
    • Unnecessary trait bounds on solvers were removed
    • Removed many unwraps and instead return errors with meaningful error messages (for instance when something isn't initialized properly)
    • The optional stdweb dependency was removed
    • Documentation was improved. The README is now rather short and not created from the lib.rs file anymore.
    • The website was updated and the "argmin book" was published, which is so far mainly a collection of short tutorials but will be extended in the future.
    • A lot more tests and doc tests were added
    • ArgminError is now non_exhaustive.
    • Added support for nalgebra 0.31
    • Many now useless macros were removed
    • Improved the CI to better test all aspects of the code
    • Renamed termination_reaosn method of State to terminate_with
    • Renamed all *grad* methods of IterState to *gradient*
    • Code of conduct was added
    • Brent's optimization method was added (#77, thanks to @Armavica)
    • Fixed a bug in Nelder-Mead which was reported by @bivhitscar (thanks!)
    • Remove the Default trait bound on TrustRegion and Steihaug impls (#192, thanks to @cfunky)
    Open source →
  8. 0.6.0-rc.2 31 Jul 2022 pre-release

    Nothing published for this version

  9. 0.6.0-rc.1 31 Jul 2022 pre-release withdrawn

    Nothing published for this version

  10. 0.5.1 16 Feb 2022
    Release notes

    What's Changed

    New Contributors

    Full Changelog: argmin-math-v0.5.0...argmin-math-v0.5.1

    Open source →
    Release notes

    Added

    • Support for faer 0.22 and 0.23 (@Ravenslofty, #672)
    Open source →
  11. 0.5.0 10 Jan 2022
    Release notes

    What's Changed

    • Added compatibility with ndarray 0.16 with the ndarray_v0_16 and ndarray_v0_16-nolinalg features, updating latest. [@npatsakula and @amfaber #546]
    • Added compatibility with nalgebra 0.33 and 0.34 with the nalgebra_0_33 and nalgebra_0_34 features, updating latest. [@0e4ef622, #505; @JosiahKane, #614]
    • Added compatibility with faer 0.20 and 0.21. [@geo-ant, #549 and #575]
    • Update the version of rand to address compatibility concerns with future Rust editions (@JosiahKane, #607)

    New Contributors

    Full Changelog: argmin-math-v0.4.0...argmin-math-v0.5.0

    Open source →
    Release notes

    Added

    • Added compatibility with ndarray 0.16 with the ndarray_v0_16 and ndarray_v0_16-nolinalg features, updating latest. [@npatsakula and @amfaber #546]
    • Added compatibility with nalgebra 0.33 and 0.34 with the nalgebra_0_33 and nalgebra_0_34 features, updating latest. [@0e4ef622, #505; @josiahkane, #614]
    • Added compatibility with faer 0.20 and 0.21. [@geo-ant, #549 and #575]

    Changed

    • Update the version of rand to address compatibility concerns with future Rust editions (@josiahkane, #607)
    Open source →
  12. 0.4.7 14 Aug 2021
    Release notes
    • Moved to Github actions (#130, @stefan-k)
    • Updated README.md (#131, @stefan-k)
    • Updated nalgebra from 0.28 to 0.29 (#133)
    Open source →
  13. 0.4.6 18 Jul 2021
    Release notes
    • updated dependencies (#121, #123, #129, @stefan-k):
      • ndarray 0.15
      • ndarray-linalg 0.14
      • appox 0.5
      • nalgebra 0.28
      • ndarray-rand 0.14
      • num-complex 0.4
      • finitediff 0.1.4
    Open source →
  14. 0.4.5 01 Jun 2021
    Release notes
    • Squash warnings for Nalgebra 0.26.x (#118, #117, @CattleProdigy)
    Open source →
  15. 0.4.4 29 Apr 2021
    Release notes
    • Finally started writing a changelog.
    • Performance improvements (#111, #112, @sdd)
    Open source →
  16. 0.4.3 18 Apr 2021
    Release notes
    • Downgraded argmin-rand to 0.13 to match ndarray 0.14
    Open source →
  17. 0.4.2 16 Apr 2021
    Release notes
    • Fix lazy evaluation of gradients in line searches (#101, @w1th0utnam3)
    • Various updated dependencies
    Open source →
  18. 0.4.1 22 Feb 2021
    Release notes
    • Typo
    Open source →
  19. 0.4.0 22 Feb 2021
    Release notes

    Added

    • Implemented ArgminInv for f32/f64 (1D) (@sdrap, #346)
    • Test cases for ArgminMinMax were added (@Shreyan11, #391)

    Changed

    • Default linalg backend for development is now MKL, which makes development on Windows possible. This required all ndarray tests to be moved in dedicated crates (@Tastaturtaste, #369)
    • ArgminRandom::rand_from_range(..) now also takes a random number generator. This allows for setting the seed manually (@jonboh, #383)

    Removed

    • All *-serde features were removed, as they are not necessary anymore. (@stefan-k, #387)
    Open source →
  20. 0.3.1 22 May 2020
    Release notes
    • remove finitediff from ndarrayl feature (#61, @optozorax)
    • MoreThuente: Added error check for NaN or Inf (#57, @MattBurn)
    Open source →
  21. 0.3.0 26 Apr 2020
    Release notes

    What's Changed

    New Contributors

    Open source →
    Release notes

    PyPI: https://pypi.org/project/argmin-testfunctions-py/

    What's Changed

    Open source →
    Release notes

    Added

    • Added LaTeX support and rendering of all Formulas (huge thanks to @airwoodix, #530, #581)

    Changed

    • [BREAKING] Fixed typo McCorminck to McCormick (@JosiahKane, #616, typo found by @airwoodix)
    Open source →
  22. 0.2.6 18 Dec 2019
    Release notes
    • Brent's method (#22, @xemwebe)
    Open source →
  23. 0.2.5 20 Oct 2019
    Release notes
    • Particle Swarm Optimization (@jjbayer)
    • Derive Clone trait (#14, @rth)
    • Test convergence (#13, @rth)
    • Lints (#11, @rth)
    • Improvements in CG method (@stefan-k)
    Open source →
  24. 0.2.4 07 Jul 2019
    Release notes
    • CG improvements (@stefan-k)
    Open source →
  25. 0.2.3 19 Jun 2019

    Nothing published for this version

  26. 0.2.2 15 May 2019

    Nothing published for this version

  27. 0.2.1 20 Apr 2019
    Release notes

    Added

    • Added ArgminMinMax and ArgminSignum implementation for nalgebra types. Now the L-BFGS should work work with the nalgebra backend again. (#257, #258, @stefan-k)
    • Added an L-BFGS example using the nalgebra backend (#258, @stefan-k)
    Open source →
  28. 0.2.0 27 Mar 2019
    Release notes

    What's Changed

    Open source →
    Release notes

    Added

    • Support for argmin 0.11
    Open source →
  29. 0.1.8 23 Feb 2019

    Nothing published for this version

  30. 0.1.7 10 Feb 2019

    Nothing published for this version

  31. 0.1.6 30 Nov 2018

    Nothing published for this version

  32. 0.1.5 11 Nov 2018

    Nothing published for this version

  33. 0.1.4 10 Nov 2018

    Nothing published for this version

  34. 0.1.3 01 Nov 2018

    Nothing published for this version

  35. 0.1.2 27 Oct 2018

    Nothing published for this version

  36. 0.1.1 24 Oct 2018

    Nothing published for this version

  37. 0.1.0 03 Oct 2018
    Release notes

    Initial release.

    Open source →
  38. 0.0.10 12 Feb 2018

    Nothing published for this version

  39. 0.0.9 09 Feb 2018

    Nothing published for this version

  40. 0.0.8 08 Feb 2018

    Nothing published for this version

  41. 0.0.7 06 Feb 2018

    Nothing published for this version

  42. 0.0.6 05 Feb 2018

    Nothing published for this version

  43. 0.0.5 04 Feb 2018

    Nothing published for this version

  44. 0.0.4 03 Feb 2018

    Nothing published for this version

  45. 0.0.3 02 Feb 2018

    Nothing published for this version

  46. 0.0.2 01 Feb 2018

    Nothing published for this version

  47. 0.0.1 31 Jan 2018
    Release notes
    • The first version of a Python wrapper around argmin_testfunctions was released.
    • The fact that this is still experimental is expressed with the version number 0.0.1. Eventually this module's version may end up in lockstep with argmin_testfunctions' version number.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive