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}