radiate_core/fitness/
mod.rs1mod composite;
2mod novelty;
3
4pub use composite::CompositeFitnessFn;
5pub use novelty::{Novelty, NoveltySearch};
6
7use crate::Score;
8
9pub trait FitnessFunction<T, S = f32>: Send + Sync
10where
11 S: Into<Score>,
12{
13 fn evaluate(&self, individual: T) -> S;
14}
15
16pub trait BatchFitnessFunction<T, S = f32>: Send + Sync
20where
21 S: Into<Score>,
22{
23 fn evaluate(&self, individuals: &[T]) -> Vec<S>;
24}
25
26impl<T, S, F> FitnessFunction<T, S> for F
29where
30 F: Fn(T) -> S + Send + Sync,
31 S: Into<Score>,
32{
33 fn evaluate(&self, individual: T) -> S {
34 self(individual)
35 }
36}
37
38impl<T, S, F> BatchFitnessFunction<T, S> for F
41where
42 F: for<'a> Fn(&'a [T]) -> Vec<S> + Send + Sync,
43 S: Into<Score>,
44{
45 fn evaluate(&self, individuals: &[T]) -> Vec<S> {
46 self(individuals)
47 }
48}