Crate argmin_testfunctions

Source
Expand description

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 test functions, the derivative and Hessian calculation comes in two variants. One variant returns Vecs 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 <test function name>_derivative and <test function name>_hessian, respectively. The const generics variants are defined as <test function name>_derivative_const and <test function name>_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.

§Python wrapper

Thanks to the python module 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

cargo test

The test functions derivatives and Hessians are tested against finitediff using proptest to sample the functions at various points.

All functions are benchmarked using criterion.rs. Run the benchmarks with

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.

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

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.

Functions§

ackley
Ackley test function
ackley_abc
Ackley test function
ackley_abc_derivative
Derivative of Ackley test function
ackley_abc_derivative_const
Derivative of Ackley test function
ackley_abc_hessian
Hessian of Ackley test function
ackley_abc_hessian_const
Hessian of Ackley test function
ackley_derivative
Derivative of Ackley test function
ackley_derivative_const
Derivative of Ackley test function
ackley_hessian
Hessian of Ackley test function
ackley_hessian_const
Hessian of Ackley test function
beale
Beale test function
beale_derivative
Derivative of Beale test function
beale_hessian
Hessian of Beale test function
booth
Booth test function
booth_derivative
Derivative of Booth test function
booth_hessian
Hessian of Booth test function
bukin_n6
Bukin test function No. 6
bukin_n6_derivative
Derivative of Bukin test function No. 6
bukin_n6_hessian
Hessian of Bukin test function No. 6
cross_in_tray
Cross-in-tray test function
cross_in_tray_derivative
Derivative of Cross-in-tray test function
cross_in_tray_hessian
Hessian of Cross-in-tray test function
easom
Easom test function
easom_derivative
Derivative of Easom test function
easom_hessian
Hessian of Easom test function
eggholder
Eggholder test function.
eggholder_derivative
Derivative of Eggholder test function.
eggholder_hessian
Hessian of Eggholder test function.
goldsteinprice
Goldstein-Price test function.
goldsteinprice_derivative
Derivative of Goldstein-Price test function.
goldsteinprice_hessian
Hessian of Goldstein-Price test function.
himmelblau
Himmelblau’s test function.
himmelblau_derivative
Derivative of Himmelblau’s test function.
himmelblau_hessian
Hessian of Himmelblau’s test function.
holder_table
Holder table test function.
holder_table_derivative
Derivative of the Holder table test function.
holder_table_hessian
Hessian of the Holder table test function.
levy
Levy test function.
levy_derivative
Derivative of Levy test function.
levy_derivative_const
Derivative of Levy test function.
levy_hessian
Hessian of Levy test function.
levy_hessian_const
Hessian of Levy test function.
levy_n13
Levy test function No. 13.
levy_n13_derivative
Derivative of Levy test function No. 13.
levy_n13_hessian
Hessian of Levy test function No. 13.
matyas
Matyas test function.
matyas_derivative
Derivative of Matyas test function.
matyas_hessian
Hessian of Matyas test function.
mccorminck
McCormick test function.
mccorminck_derivative
Derivative of McCormick test function.
mccorminck_hessian
Hessian of McCormick test function.
picheny
Picheny test function.
picheny_derivative
Derivative of Picheny test function.
picheny_hessian
Hessian of Picheny test function.
rastrigin
Rastrigin test function.
rastrigin_a
Rastrigin test function.
rastrigin_a_derivative
Derivative of Rastrigin test function where the parameter a can be chosen freely.
rastrigin_a_derivative_const
Derivative of Rastrigin test function where the parameter a can be chosen freely.
rastrigin_a_hessian
Hessian of Rastrigin test function where the parameter a can be chosen freely.
rastrigin_a_hessian_const
Hessian of Rastrigin test function where a can be chosen freely.
rastrigin_derivative
Derivative of Rastrigin test function with a = 10.
rastrigin_derivative_const
Derivative of Rastrigin test function with a = 10.
rastrigin_hessian
Hessian of Rastrigin test function with a = 10.
rastrigin_hessian_const
Hessian of Rastrigin test function with a = 10.
rosenbrock
Multidimensional Rosenbrock test function.
rosenbrock_ab
Multidimensional Rosenbrock test function.
rosenbrock_ab_derivative
Derivative of the multidimensional Rosenbrock test function.
rosenbrock_ab_derivative_const
Derivative of the multidimensional Rosenbrock test function.
rosenbrock_ab_hessian
Hessian of the multidimensional Rosenbrock test function.
rosenbrock_ab_hessian_const
Hessian of the multidimensional Rosenbrock test function.
rosenbrock_derivative
Derivative of the multidimensional Rosenbrock test function.
rosenbrock_derivative_const
Derivative of the multidimensional Rosenbrock test function.
rosenbrock_hessian
Hessian of the multidimensional Rosenbrock test function.
rosenbrock_hessian_const
Hessian of the multidimensional Rosenbrock test function.
schaffer_n2
Schaffer test function No. 2.
schaffer_n4
Schaffer test function No. 4
schaffer_n2_derivative
Derivative of Schaffer test function No. 2
schaffer_n2_hessian
Hessian of Schaffer test function No. 2
schaffer_n4_derivative
Derivative of Schaffer test function No. 4
schaffer_n4_hessian
Hessian of Schaffer test function No. 4
sphere
Sphere test function.
sphere_derivative
Derivative of sphere test function.
sphere_derivative_const
Derivative of sphere test function.
sphere_hessian
Hessian of sphere test function.
sphere_hessian_const
Hessian of sphere test function.
styblinski_tang
Styblinski-Tang test function.
styblinski_tang_derivative
Derivative of Styblinski-Tang test function.
styblinski_tang_derivative_const
Derivative of Styblinski-Tang test function.
styblinski_tang_hessian
Hessian of Styblinski-Tang test function.
styblinski_tang_hessian_const
Hessian of Styblinski-Tang test function.
threehumpcamel
Three-hump camel test function.
threehumpcamel_derivative
Derivative of Three-hump camel test function.
threehumpcamel_hessian
Hessian of Three-hump camel test function.
zero
Zero test function.
zero_derivative
Derivative of zero test function.
zero_derivative_const
Derivative of zero test function (const version).
zero_hessian
Hessian of zero test function.
zero_hessian_const
Hessian of zero test function (const version).