@@ 25,7 25,7 @@ pub struct EvolutionStats<TInput, TResult> {
pub struct EvolutionResult<TInput, TResult> {
pub population: EvaluatedPopulation<TInput, TResult>,
pub stats: EvolutionStats<TInput, TResult>,
- pub best_candidate: EvaluatedChromosome<TInput, TResult>,
+ pub best_candidate: Option<EvaluatedChromosome<TInput, TResult>>,
pub iterations: usize,
pub evaluations: usize
}
@@ 56,10 56,12 @@ impl<TInput, TResult> EvolutionResult<TInput, TResult> {
})
.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,