use crate::configuration::{LimitConfiguration, ProblemSolving};
use crate::error::GaError;
use crate::extension::configuration::ExtensionConfiguration;
use crate::operations::mutation::ValueMutable;
use crate::traits::ChromosomeT;
pub trait SelectionOperator {
fn select<U>(
&self,
chromosomes: &[U],
number_of_couples: usize,
number_of_threads: usize,
) -> Vec<(usize, usize)>
where
U: ChromosomeT + Sync + Send + 'static + Clone;
}
pub trait CrossoverOperator {
fn crossover<U: ChromosomeT>(&self, parent_1: &U, parent_2: &U) -> Result<Vec<U>, GaError>;
}
pub trait MutationOperator {
fn mutate<U>(
&self,
individual: &mut U,
step: Option<f64>,
sigma: Option<f64>,
) -> Result<(), GaError>
where
U: ChromosomeT + ValueMutable + 'static;
}
pub trait SurvivorOperator {
fn select_survivors<U: ChromosomeT>(
&self,
chromosomes: &mut Vec<U>,
population_size: usize,
limit_configuration: LimitConfiguration,
) -> Result<(), GaError>;
}
pub trait ExtensionOperator {
fn apply_extension<U: ChromosomeT>(
&self,
chromosomes: &mut Vec<U>,
population_size: usize,
problem_solving: ProblemSolving,
config: &ExtensionConfiguration,
) -> Result<(), GaError>;
}