Skip to main content

math_audio_optimisation/
crossover_binomial.rs

1use ndarray::Array1;
2use rand::Rng;
3
4pub(crate) fn binomial_crossover<R: Rng + ?Sized>(
5    target: &Array1<f64>,
6    mutant: &Array1<f64>,
7    cr: f64,
8    rng: &mut R,
9) -> Array1<f64> {
10    let n = target.len();
11    let jrand = rng.random_range(0..n);
12    let mut trial = target.clone();
13    for j in 0..n {
14        if j == jrand || rng.random::<f64>() < cr {
15            trial[j] = mutant[j];
16        }
17    }
18    trial
19}