radiate_engines/builder/
species.rs1use crate::GeneticEngineBuilder;
2use radiate_core::{Chromosome, Diversity};
3use std::sync::Arc;
4
5#[derive(Clone)]
6pub struct SpeciesParams<C: Chromosome> {
7 pub diversity: Option<Arc<dyn Diversity<C>>>,
8 pub species_threshold: f32,
9 pub max_species_age: usize,
10}
11
12impl<C, T> GeneticEngineBuilder<C, T>
13where
14 C: Chromosome + PartialEq + Clone,
15 T: Clone + Send,
16{
17 pub fn boxed_diversity(mut self, diversity: Option<Box<dyn Diversity<C>>>) -> Self {
18 self.params.species_params.diversity = diversity.map(|d| d.into());
19 self
20 }
21
22 pub fn diversity<D: Diversity<C> + 'static>(mut self, diversity: D) -> Self {
23 self.params.species_params.diversity = Some(Arc::new(diversity));
24 self
25 }
26
27 pub fn species_threshold(mut self, threshold: f32) -> Self {
28 self.add_error_if(
29 || threshold < 0.0,
30 "species_threshold must be greater than 0",
31 );
32
33 self.params.species_params.species_threshold = threshold;
34 self
35 }
36
37 pub fn max_species_age(mut self, max_species_age: usize) -> Self {
38 self.add_error_if(
39 || max_species_age < 1,
40 "max_species_age must be greater than 0",
41 );
42
43 self.params.species_params.max_species_age = max_species_age;
44 self
45 }
46}