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 2025Releases
latest 47-
0.11.028 Sep 2025Release notes
Open source →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
- 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 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)
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
Release notes
Open source →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)
-
0.10.027 Feb 2024Release notes
Open source →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, adaptedGaussNewtonaccordingly by @gmilleramilar in #343 - Fixed handling of residuals in
GaussNewtonby @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, removedSerializeAliasandDeserializeOwnedAliasby @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
Executorby @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
KeyboardInterrupttoInterruptby @stefan-k in #413 - Restructured repo: All crates are now in the
cratesdirectory 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
- @jonboh made their first contribution in #383
- @gmilleramilar made their first contribution in #343
Full Changelog: argmin-v0.9.0...argmin-v0.10.0
Release notes
Open source →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
SlogLoggermoved intoargmin-observer-slog(@stefan-k, #311)WriteToFilewas renamed toParamWriterand moved intoargmin-observer-paramwriter(@stefan-k, #395)FileCheckpointmoved intoargmin-checkpointing-file(@stefan-k, #311)
- Added
statetoobserve_initofObservetrait (@stefan-k, #311) - All crates are now in the
cratesdirectory (@stefan-k, #415) - All examples are now crates and are in the
examplesdirectory. (@stefan-k, #387) - Removed
SerializeAliasandDeserializeAliastraits 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,SIGTERMandSIGHUPandKeyboardInterruptwas renamed toInterrupt(@stefan-k, #413) - Error handling in
LBFGSwas slightly improved (@stefan-k, #416) KvValue::get_float(&self)now works for all kinds ofKvValue(@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)
-
0.9.006 Jan 2024Release notes
Open source →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)
-
0.8.120 Feb 2023Release notes
Open source →Added
- Mentioned
cobylain 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)
- Mentioned
-
0.8.028 Jan 2023Release notes
Open source →Added
- Added a
fullfeature which enables all features (@stefan-k) - Added a particle swarm optimization example using the
nalgebramath backend (@stefan-k) - Added a L-BFGS example using the
nalgebramath backend (@stefan-k)
Changed
- Improved termination handling (@relf, #305)
- Introduced
TerminationStatuswhich can either beTerminated(TerminationReason)orNotTerminated - The fields of the
TerminationReasonenum were reduced to cases potentially relevant to any solver. Solver-specific cases can be handled withSolverExit(String). - Added new
TerminationReason::KeyboardInterruptandTerminationReason::Converged
- Introduced
- 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 onlydyn Displayand as such could only be printed) make_kv!renamed tokv!
- KV store is now typed (via
- Solver does not need to be
Serializeanymore whenserde1feature 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)
- Added a
-
0.7.028 Aug 2022Release notes
Open source →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
ArgminL1Normtrait 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 fromArgminNormtoArgminL2Normand thenormmethod was renamed tol2_norm. (#253, @stefan-k)
Fixed
- Version 0.6 accidentally removed the possibility to deactivate the
ndarray-linalgdependency inargmin-math. This leads to problems in downstream crates which do not need the functionality ofndarray-linalgand want to avoid linking angainst a BLAS. In this version, this functionality was added again. Please consult the documentation ofargmin-mathfor 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!)
-
0.6.009 Aug 2022Release notes
Open source →This is a rather large release with many (breaking) changes.
- Code related to the abstraction of math backends was split of into the
argmin-mathcrate. 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
serdedependency is now optional and feature-gated viaserde1. Disabling theserde1feature disables checkpointing and some logging. - The
ArgminOptrait was removed and replaced with more specialized traits such asOperator,CostFunction,Gradient,Jacobian,Hessian,Anneal. All of the above mentioned traits come withbulk_*methods which allow one to compute cost function, gradients,... in parallel as long as therayonfeature 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
Statetrait now which defines the basic functionality that a state must offer. - Many aspects were redesigned to avoid unnecessary cloning
ArgminResultwas renamed toOptimizationResultand also has a more useful API now. It returns the solver, the problem and the final internal state.- The
Solvertrait was redesigned - The solver is now configured/initialized via the
configuremethod onExecutor - 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
OpWrapperwas renamed toProblemand 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 aHashMapnow.- PSO was redesigned and a
PopulationStatewas introduced which replacesIterStatein 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
stdwebdependency was removed - Documentation was improved. The README is now rather short and not created from the
lib.rsfile 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
ArgminErroris nownon_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_reaosnmethod ofStatetoterminate_with - Renamed all
*grad*methods ofIterStateto*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)
- Code related to the abstraction of math backends was split of into the
-
0.6.0-rc.231 Jul 2022 pre-releaseNothing published for this version
-
0.6.0-rc.131 Jul 2022 pre-release withdrawnNothing published for this version
-
0.5.116 Feb 2022Release notes
Open source →What's Changed
- support faer 0.22 and 0.23 by @Ravenslofty in #627
New Contributors
- @Ravenslofty made their first contribution in #627
Full Changelog: argmin-math-v0.5.0...argmin-math-v0.5.1
-
0.5.010 Jan 2022Release notes
Open source →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
- @0e4ef622 made their first contribution in #504
- @geo-ant made their first contribution in #549
- @npatsakula made their first contribution in #546
- @JosiahKane made their first contribution in #603
Full Changelog: argmin-math-v0.4.0...argmin-math-v0.5.0
Release notes
Open source →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)
-
0.4.714 Aug 2021Release notes
Open source →- Moved to Github actions (#130, @stefan-k)
- Updated README.md (#131, @stefan-k)
- Updated nalgebra from 0.28 to 0.29 (#133)
-
0.4.618 Jul 2021Release notes
Open source →- 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
- updated dependencies (#121, #123, #129, @stefan-k):
-
0.4.501 Jun 2021 -
0.4.429 Apr 2021Release notes
Open source →- Finally started writing a changelog.
- Performance improvements (#111, #112, @sdd)
-
0.4.318 Apr 2021 -
0.4.216 Apr 2021Release notes
Open source →- Fix lazy evaluation of gradients in line searches (#101, @w1th0utnam3)
- Various updated dependencies
-
0.4.122 Feb 2021 -
0.4.022 Feb 2021Release notes
Open source →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
*-serdefeatures were removed, as they are not necessary anymore. (@stefan-k, #387)
-
0.3.122 May 2020Release notes
Open source →- remove finitediff from ndarrayl feature (#61, @optozorax)
- MoreThuente: Added error check for NaN or Inf (#57, @MattBurn)
-
0.3.026 Apr 2020Release notes
Open source →What's Changed
- (BREAKING) Fixed typo McCorminck to McCormick (@JosiahKane, #616, typo found by @airwoodix)
- Added LaTeX support and rendering of all Formulas (huge thanks to @airwoodix, #530, #581)
New Contributors
- @airwoodix made their first contribution in #539
- @JosiahKane made their first contribution in #603
Release notes
Open source →PyPI: https://pypi.org/project/argmin-testfunctions-py/
What's Changed
- (BREAKING) Fixed typo McCorminck to McCormick (@JosiahKane, #616, typo found by @airwoodix)
- Added LaTeX support and rendering of all Formulas (huge thanks to @airwoodix, #530, #581)
Release notes
Open source →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)
-
0.2.618 Dec 2019 -
0.2.520 Oct 2019Release notes
Open source →- Particle Swarm Optimization (@jjbayer)
- Derive Clone trait (#14, @rth)
- Test convergence (#13, @rth)
- Lints (#11, @rth)
- Improvements in CG method (@stefan-k)
-
0.2.407 Jul 2019 -
0.2.319 Jun 2019Nothing published for this version
-
0.2.215 May 2019Nothing published for this version
-
0.2.120 Apr 2019Release notes
Open source →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)
-
0.2.027 Mar 2019 -
0.1.823 Feb 2019Nothing published for this version
-
0.1.710 Feb 2019Nothing published for this version
-
0.1.630 Nov 2018Nothing published for this version
-
0.1.511 Nov 2018Nothing published for this version
-
0.1.410 Nov 2018Nothing published for this version
-
0.1.301 Nov 2018Nothing published for this version
-
0.1.227 Oct 2018Nothing published for this version
-
0.1.124 Oct 2018Nothing published for this version
-
0.1.003 Oct 2018 -
0.0.1012 Feb 2018Nothing published for this version
-
0.0.909 Feb 2018Nothing published for this version
-
0.0.808 Feb 2018Nothing published for this version
-
0.0.706 Feb 2018Nothing published for this version
-
0.0.605 Feb 2018Nothing published for this version
-
0.0.504 Feb 2018Nothing published for this version
-
0.0.403 Feb 2018Nothing published for this version
-
0.0.302 Feb 2018Nothing published for this version
-
0.0.201 Feb 2018Nothing published for this version
-
0.0.131 Jan 2018Release notes
Open source →- The first version of a Python wrapper around
argmin_testfunctionswas 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.
- The first version of a Python wrapper around