~ruther/ctu-fee-eoa

ab9a6739bf63ccb42baaa1a097b450ac0dbe1153 — Rutherther 11 days ago b172dc7
fix: implement possibility of best candidate not being found
1 files changed, 11 insertions(+), 7 deletions(-)

M codes/eoa_lib/src/evolution.rs
M codes/eoa_lib/src/evolution.rs => codes/eoa_lib/src/evolution.rs +11 -7
@@ 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,