argmin_testfunctions

Website | Book | Docs (latest release) | Docs (main branch)

Crates.io version Crates.io downloads GitHub Actions workflow status License argmin Discord

A collection of two- and multidimensional test functions (and their derivatives and Hessians) for optimization algorithms. For two-dimensional test functions, the derivate and Hessian calculation does not allocate. For multi-dimensional tes functions, the derivative and Hessian calculation comes in two variants. One variant returns `Vec`s and hence does allocate. This is needed for cases, where the number of parameters is only known at run time. In case the number of parameters are known at compile-time, the `_const` variants can be used, which return fixed size arrays and hence do not allocate. The derivative and Hessian calculation is always named `_derivative` and `_hessian`, respectively. The const generics variants are defined as `_derivative_const` and `_hessian_const`. Some functions, such as `ackley`, `rosenbrock` and `rastrigin` come with additional optional parameters which change the shape of the functions. These additional parameters are exposed in `ackley_abc`, `rosenbrock_ab` and `rastrigin_a`. All functions are generic over their inputs and work with `[f64]` and `[f32]`. For a list of all implemented functions see the documentation linked above. ## Python wrapper Thanks to the python module [`argmin-testfunctions-py`](https://pypi.org/project/argmin-testfunctions-py/), it is possible to use the functions in Python as well. Note that the derivative and Hessian calculation used in the wrapper will always allocate. ## Running the tests and benchmarks The tests can be run with ```bash cargo test ``` The test functions derivatives and Hessians are tested against [finitediff](https://crates.io/crates/finitediff) using [proptest](https://crates.io/crates/proptest) to sample the functions at various points. All functions are benchmarked using [criterion.rs](https://crates.io/crates/criterion). Run the benchmarks with ```bash cargo bench ``` The report is available in `target/criterion/report/index.html`. ## Contributing This library is the most useful the more test functions it contains, therefore any contributions are highly welcome. For inspiration on what to implement and how to proceed, feel free to have a look at this [issue](https://github.com/argmin-rs/argmin/issues/450). While most of the implemented functions are probably already quite efficient, there are probably a few which may profit from performance improvements. ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) * MIT License ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT) at your option. ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.