red_queen_core/
variation.rs1use crate::genome::Genome;
4use rand::Rng;
5
6#[derive(Debug, Clone)]
8pub struct VariationConfig {
9 pub mutation_rate: f64,
11 pub crossover_rate: f64,
13}
14
15impl Default for VariationConfig {
16 fn default() -> Self {
17 Self {
18 mutation_rate: 0.3,
19 crossover_rate: 0.7,
20 }
21 }
22}
23
24pub fn vary<G: Genome, R: Rng>(
26 parent1: &G,
27 parent2: &G,
28 config: &VariationConfig,
29 rng: &mut R,
30) -> G {
31 let mut offspring = if rng.gen::<f64>() < config.crossover_rate {
33 parent1.crossover(parent2, rng)
34 } else {
35 parent1.clone()
36 };
37
38 offspring.mutate(rng, config.mutation_rate);
40
41 offspring
42}