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 tes 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
Derivative 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 test function
himmelblau_derivative
Derivative of Himmelblau test function
himmelblau_hessian
Hessian of Himmelblau 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
McCorminck test function
mccorminck_derivative
Derivative of McCorminck test function
mccorminck_hessian
Hessian of McCorminck 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 a can be chosen freely
rastrigin_a_derivative_const
Derivative of Rastrigin test function where a can be chosen freely
rastrigin_a_hessian
Hessian of Rastrigin test function where 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
rastrigin_derivative_const
Derivative of Rastrigin test function
rastrigin_hessian
Hessian of Rastrigin test function
rastrigin_hessian_const
Hessian of Rastrigin test function
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)