sefar/benchmarks/
functions.rsuse crate::core::problem::Problem;
#[derive(Debug, Clone)]
pub struct SumAbsFunction {}
impl Problem for SumAbsFunction {
#[cfg(not(feature = "parallel"))]
fn objectivefunction(&mut self, genome: &[f64]) -> f64 {
let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
fitness
}
#[cfg(feature = "parallel")]
fn objectivefunction(&self, genome: &[f64]) -> f64 {
let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
fitness
}
}
#[derive(Debug, Clone)]
pub struct Sphere {}
impl Problem for Sphere {
#[cfg(not(feature = "parallel"))]
fn objectivefunction(&mut self, genome: &[f64]) -> f64 {
let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.powi(2));
fitness
}
#[cfg(feature = "parallel")]
fn objectivefunction(&self, genome: &[f64]) -> f64 {
let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.powi(2));
fitness
}
}
#[derive(Debug, Clone)]
pub struct F2 {}
impl Problem for F2 {
#[cfg(not(feature = "parallel"))]
fn objectivefunction(&mut self, genome: &[f64]) -> f64 {
let sum = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
let prod = genome.iter().fold(1.0f64, |prod, g| prod * f64::abs(*g));
sum + prod
}
#[cfg(feature = "parallel")]
fn objectivefunction(&self, genome: &[f64]) -> f64 {
let sum = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
let prod = genome.iter().fold(1.0f64, |prod, g| prod * f64::abs(*g));
sum + prod
}
}