From ab9a6739bf63ccb42baaa1a097b450ac0dbe1153 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sun, 30 Nov 2025 18:34:32 +0100 Subject: [PATCH] fix: implement possibility of best candidate not being found --- codes/eoa_lib/src/evolution.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/codes/eoa_lib/src/evolution.rs b/codes/eoa_lib/src/evolution.rs index 849e2ec578bfd0906e2161b51ca2da549a95e670..6b63c062e188fbc1caba3d96b70cabd6f3341b73 100644 --- a/codes/eoa_lib/src/evolution.rs +++ b/codes/eoa_lib/src/evolution.rs @@ -25,7 +25,7 @@ pub struct EvolutionStats { pub struct EvolutionResult { pub population: EvaluatedPopulation, pub stats: EvolutionStats, - pub best_candidate: EvaluatedChromosome, + pub best_candidate: Option>, pub iterations: usize, pub evaluations: usize } @@ -56,10 +56,12 @@ impl EvolutionResult { }) .collect() }, - best_candidate: EvaluatedChromosome { - chromosome: self.best_candidate.chromosome, - evaluation: map(self.best_candidate.evaluation) - }, + best_candidate: self.best_candidate.map( + |best_candidate| + EvaluatedChromosome { + chromosome: best_candidate.chromosome, + evaluation: map(best_candidate.evaluation) + }), evaluations: self.evaluations, iterations: self.iterations, } @@ -248,8 +250,10 @@ pub fn evolution_algorithm_best_candidate ); } - let best_candidate = last_best_candidate.as_ref().unwrap().evaluated_chromosome.clone(); - stats.best_candidates.push(last_best_candidate.unwrap()); + let best_candidate = last_best_candidate.as_ref().map(|x| x.evaluated_chromosome.clone()); + if last_best_candidate.is_some() { + stats.best_candidates.push(last_best_candidate.unwrap()); + } Ok(EvolutionResult { population: current_population,