From 154517654e812d838ec310111c16e7ab9752ab6c Mon Sep 17 00:00:00 2001 From: Leonora Tindall Date: Mon, 3 Apr 2023 22:34:28 -0500 Subject: [PATCH] Improve crossover function Rather than always choosing a parental weight verbatim, weights are sometimes averaged between parents. --- src/nn.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/nn.rs b/src/nn.rs index 093ebe2..c5ee4cf 100644 --- a/src/nn.rs +++ b/src/nn.rs @@ -68,10 +68,16 @@ impl NN { .iter() .zip(b.weights.iter()) .map(|(m1, m2)| { - m1.zip_map( - m2, - |ele1, ele2| if gen_range(0., 1.) < 0.5 { ele1 } else { ele2 }, - ) + m1.zip_map(m2, |ele1, ele2| { + let choice = gen_range(0., 3.); + if choice < 1. { + ele1 + } else if choice < 2. { + ele2 + } else { + (ele1 + ele2) / 2. + } + }) }) .collect(), }