pub mod cycle;
pub mod generation;
use crate::constraints::ConstraintConfig;
use crate::crossover::CrossoverConfig;
use crate::fitness::FitnessConfig;
use crate::mutation::MutationConfig;
use crate::tournaments::Tournament;
pub struct Gas<const N: usize, const NSYMS: usize> {
pub fitness: FitnessConfig<N, NSYMS>,
pub constraints: ConstraintConfig<N, NSYMS>,
pub crossovers: CrossoverConfig<N, NSYMS>,
pub mutations: MutationConfig<N, NSYMS>,
pub cycle_tournament: Box<dyn Tournament<N, NSYMS> + Send + Sync>,
pub final_tournament: Box<dyn Tournament<N, NSYMS> + Send + Sync>,
pub taboo_distance: usize,
pub population_size: usize,
}
#[cfg(test)]
impl Gas<5, 3> {
pub fn dut() -> Gas<5, 3> {
use crate::fitness::distance::Distance;
use crate::game::full::Full;
use crate::mutation::mutate::Mutate;
use crate::tournaments::single_elimination::SingleElimination;
Gas {
fitness: FitnessConfig::new(vec![Box::new(Distance::<5, 3>::new(
7, [None; 3], [None; 3], 1.0, 1.0,
))]),
constraints: ConstraintConfig::new(vec![]),
cycle_tournament: Box::new(SingleElimination::new(Full::new())),
final_tournament: Box::new(SingleElimination::new(Full::new())),
crossovers: CrossoverConfig::new(vec![(
1,
Box::new(crate::crossover::null::Null::new()),
)]),
mutations: MutationConfig::new(vec![(1, Box::new(Mutate::<5, 3>::new(1)))]),
taboo_distance: 1,
population_size: 3,
}
}
}