From 738df68495b38337d5bb4e1d9f5ffb9e9ecf4303 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Mon, 27 Oct 2025 20:46:05 +0100 Subject: [PATCH] fix: tournament replacement strategy could be using wrong indices --- codes/eoa_lib/src/replacement.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/codes/eoa_lib/src/replacement.rs b/codes/eoa_lib/src/replacement.rs index c6dfb20fe6e3cae488e217de8537e65db8864b6f..bef817b54b1e6b8eb723052485d26324c92830ea 100644 --- a/codes/eoa_lib/src/replacement.rs +++ b/codes/eoa_lib/src/replacement.rs @@ -244,7 +244,7 @@ impl TournamentReplacement { } } -impl Replacement for TournamentReplacement { +impl Replacement for TournamentReplacement { fn replace( &mut self, parents: EvaluatedPopulation, @@ -261,13 +261,8 @@ impl Replacement for TournamentReplaceme let selected = self.selection.select(count, &population, better_than) .collect::>(); - let mut population = population.deconstruct(); - - for (write_idx, read_idx) in selected.into_iter().enumerate() { - population.swap(read_idx, write_idx); - } - - population.truncate(count); + let population = population.deconstruct(); + let population = extract_by_indices(population, selected); EvaluatedPopulation::from_vec(population) }