use crate::{
traits::{CostFunction, Gradient},
DVector, Float, PI,
};
use std::convert::Infallible;
pub struct Rastrigin {
pub n: usize,
}
impl CostFunction for Rastrigin {
fn evaluate(&self, x: &DVector<Float>, _args: &()) -> Result<Float, Infallible> {
#[allow(clippy::suboptimal_flops)]
Ok(10.0 * self.n as Float
+ (0..self.n)
.map(|i| x[i].powi(2) - 10.0 * Float::cos(2.0 * PI * x[i]))
.sum::<Float>())
}
}
impl Gradient for Rastrigin {}