use crate::configuration::ProblemSolving;
#[derive(Debug, Clone)]
pub struct EdaConfiguration {
pub population_size: usize,
pub max_generations: usize,
pub problem_solving: ProblemSolving,
pub fitness_target: Option<f64>,
pub selection_ratio: f64,
pub fitness_cache_size: Option<usize>,
}
impl Default for EdaConfiguration {
fn default() -> Self {
Self {
population_size: 100,
max_generations: 500,
problem_solving: ProblemSolving::Maximization,
fitness_target: None,
selection_ratio: 0.5,
fitness_cache_size: None,
}
}
}
impl EdaConfiguration {
pub fn with_population_size(mut self, n: usize) -> Self {
self.population_size = n;
self
}
pub fn with_max_generations(mut self, n: usize) -> Self {
self.max_generations = n;
self
}
pub fn with_problem_solving(mut self, ps: ProblemSolving) -> Self {
self.problem_solving = ps;
self
}
pub fn with_fitness_target(mut self, t: f64) -> Self {
self.fitness_target = Some(t);
self
}
pub fn with_selection_ratio(mut self, ratio: f64) -> Self {
self.selection_ratio = ratio.clamp(f64::MIN_POSITIVE, 1.0);
self
}
pub fn with_fitness_cache_size(mut self, size: usize) -> Self {
self.fitness_cache_size = Some(size);
self
}
}