radiate_rust/engines/
optimize.rs

1use super::genome::{genes::gene::Gene, population::Population};
2
3#[derive(Clone, Copy, Debug, PartialEq)]
4pub enum Optimize {
5    Minimize,
6    Maximize,
7}
8
9impl Optimize {
10    pub fn sort<G, A>(&self, population: &mut Population<G, A>)
11    where
12        G: Gene<G, A>
13    {
14        match self {
15            Optimize::Minimize => population.sort_by(|a, b| a.partial_cmp(&b).unwrap()),
16            Optimize::Maximize => population.sort_by(|a, b| b.partial_cmp(&a).unwrap()),
17        }
18    }
19
20    pub fn is_better<T>(&self, a: &T, b: &T) -> bool
21    where
22        T: PartialOrd
23    {
24        match self {
25            Optimize::Minimize => a < b,
26            Optimize::Maximize => a > b,
27        }
28    }
29}