pub mod bounded;
pub mod combinatorial;
pub mod ordinary;
use std::fmt::Debug;
use crate::{
error::Result, evolution::options::EvolutionOptions, phenotype::Phenotype,
rng::RandomNumberGenerator,
};
pub trait BreedStrategy<Pheno: Phenotype>
where
Self: Debug + Clone + Send + Sync,
{
fn breed(
&self,
parents: &[Pheno],
evol_options: &EvolutionOptions,
rng: &mut RandomNumberGenerator,
) -> Result<Vec<Pheno>>;
}
pub use bounded::{BoundedBreedConfig, BoundedBreedConfigBuilder, BoundedBreedStrategy, Magnitude};
pub use combinatorial::{
CombinatorialBreedConfig, CombinatorialBreedConfigBuilder, CombinatorialBreedStrategy,
};
pub use ordinary::OrdinaryStrategy;