pub trait Genome {
type Config;
type InnovationHistory: InnovationHistory<Config = Self::Config>;
fn new(config: &Self::Config) -> Self;
fn genetic_distance(first: &Self, second: &Self, config: &Self::Config) -> f32;
fn mate(
parent1: &Self,
parent2: &Self,
history: &mut Self::InnovationHistory,
config: &Self::Config,
) -> Self;
fn set_fitness(&mut self, fitness: f32);
fn fitness(&self) -> f32;
fn conforms_to(&self, config: &Self::Config) -> bool;
}
pub trait InnovationHistory {
type Config;
fn new(config: &Self::Config) -> Self;
}