use crate::optimize::SearchRange;
pub fn rastrigin(args: &[f64]) -> f64 {
const A: f64 = 10.0;
const PI: f64 = std::f64::consts::PI;
let n = args.len() as f64;
A * n
+ args
.iter()
.copied()
.map(|x| x * x - A * (2.0 * PI * x).cos())
.sum::<f64>()
}
pub fn rosenbrock(mut args: &[f64]) -> f64 {
const A: f64 = 1.0;
const B: f64 = 100.0;
let mut sum: f64 = 0.0;
while args.len() >= 2 {
let x = args[0];
let y = args[1];
sum += (A - x).powi(2) + B * (y - x.powi(2)).powi(2);
args = &args[2..];
}
sum
}
pub const SCHWEFEL_TARGET: f64 = 420.968746;
pub const SCHWEFEL_RANGE: SearchRange = SearchRange::Finite {
low: -500.0,
high: 500.0,
};
pub fn schwefel(args: &[f64]) -> f64 {
let dim = args.len() as f64;
let sum: f64 = args.iter().copied().map(|x| x * x.abs().sqrt().sin()).sum();
dim - sum / 418.982887272433800
}