~ruther/ctu-fee-eoa

b0db23c78cb1b0291b645b87dae9d47faf9082ca — Rutherther a month ago 0047990
feat: add best selection
1 files changed, 24 insertions(+), 0 deletions(-)

M codes/eoa_lib/src/selection.rs
M codes/eoa_lib/src/selection.rs => codes/eoa_lib/src/selection.rs +24 -0
@@ 11,6 11,30 @@ pub trait Selection<TChromosome, TResult> {
    ) -> impl Iterator<Item = usize>;
}

pub struct BestSelection;
impl BestSelection {
    pub fn new() -> Self {
        Self
    }
}

impl<TChromosome, TResult: Copy> Selection<TChromosome, TResult> for BestSelection {
    fn select(&mut self,
              count: usize,
              evaluations: &EvaluatedPopulation<TChromosome, TResult>,
              better_than: &dyn BetterThanOperator<TResult>
    ) -> impl Iterator<Item = usize> {
        let mut idxs = (0..evaluations.population.len())
            .collect::<Vec<_>>();
        idxs.sort_unstable_by(|&i, &j| better_than.ordering(
            &evaluations.population[i].evaluation,
            &evaluations.population[j].evaluation)
        );

        idxs.into_iter().take(count)
    }
}

pub struct TournamentSelection {
    rng: Box<dyn RngCore>,
    p: f64,