genx/crossover/
blend.rs

1use rand::{prelude::StdRng, Rng, SeedableRng};
2
3pub fn blend_crossover(parent1: f32, parent2: f32, alpha: f32, seed: Option<u64>) -> (f32, f32) {
4    let mut prng = match seed {
5        Some(val) => StdRng::seed_from_u64(val),
6        None => StdRng::from_entropy(),
7    };
8
9    let gamma: f32 = (1.0 + 2.0 * alpha) * prng.gen::<f32>() - alpha;
10    (
11        (1.0 - gamma) * parent1 + gamma * parent2,
12        (1.0 - gamma) * parent2 + gamma * parent1,
13    )
14}