multivariate_optimization/
testfuncs.rs1use crate::optimize::SearchRange;
4
5pub fn rastrigin(args: &[f64]) -> f64 {
9 const A: f64 = 10.0;
10 const PI: f64 = std::f64::consts::PI;
11 let n = args.len() as f64;
12 A * n
13 + args
14 .iter()
15 .copied()
16 .map(|x| x * x - A * (2.0 * PI * x).cos())
17 .sum::<f64>()
18}
19
20pub fn rosenbrock(mut args: &[f64]) -> f64 {
25 const A: f64 = 1.0;
26 const B: f64 = 100.0;
27 let mut sum: f64 = 0.0;
28 while args.len() >= 2 {
29 let x = args[0];
30 let y = args[1];
31 sum += (A - x).powi(2) + B * (y - x.powi(2)).powi(2);
32 args = &args[2..];
33 }
34 sum
35}
36
37pub const SCHWEFEL_TARGET: f64 = 420.968746;
39
40pub const SCHWEFEL_RANGE: SearchRange = SearchRange::Finite {
42 low: -500.0,
43 high: 500.0,
44};
45
46pub fn schwefel(args: &[f64]) -> f64 {
48 let dim = args.len() as f64;
49 let sum: f64 = args.iter().copied().map(|x| x * x.abs().sqrt().sin()).sum();
50 dim - sum / 418.982887272433800
51}