sefar/benchmarks/
functions.rs1use crate::core::problem::Problem;
2#[derive(Debug, Clone)]
5pub struct SumAbsFunction {}
6impl Problem for SumAbsFunction {
7 #[cfg(not(feature = "parallel"))]
8 fn objectivefunction(&mut self, genome: &mut [f64]) -> f64 {
9 let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
10 fitness
11 }
12
13 #[cfg(feature = "parallel")]
14 fn objectivefunction(&self, genome: &[f64]) -> f64 {
15 let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
16 fitness
17 }
18}
19
20#[derive(Debug, Clone)]
26pub struct Sphere {}
27
28impl Problem for Sphere {
29 #[cfg(not(feature = "parallel"))]
33 fn objectivefunction(&mut self, genome: &mut [f64]) -> f64 {
34 let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.powi(2));
35 fitness
37 }
38
39 #[cfg(feature = "parallel")]
40 fn objectivefunction(&self, genome: &[f64]) -> f64 {
41 let fitness = genome.iter().fold(0.0f64, |sum, g| sum + g.powi(2));
42 fitness
43 }
44}
45
46#[derive(Debug, Clone)]
52pub struct F2 {}
53impl Problem for F2 {
54 #[cfg(not(feature = "parallel"))]
55 fn objectivefunction(&mut self, genome: &mut [f64]) -> f64 {
56 let sum = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
57 let prod = genome.iter().fold(1.0f64, |prod, g| prod * f64::abs(*g));
58 sum + prod
59 }
60
61 #[cfg(feature = "parallel")]
62 fn objectivefunction(&self, genome: &[f64]) -> f64 {
63 let sum = genome.iter().fold(0.0f64, |sum, g| sum + g.abs());
64 let prod = genome.iter().fold(1.0f64, |prod, g| prod * f64::abs(*g));
65 sum + prod
66 }
67}