Skip to content

Commit a8aa29b

Browse files
committed
Handle empty best metrics in generation summary
1 parent a0d23ff commit a8aa29b

1 file changed

Lines changed: 14 additions & 7 deletions

File tree

src/optimization/mod.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -299,13 +299,15 @@ where
299299
) -> GenerationSummary<E::Metrics> {
300300
let mut total = 0.0;
301301
let mut count = 0usize;
302-
let mut best_fitness = f64::NEG_INFINITY;
303-
let mut best_metrics = None;
302+
let mut best: Option<&Individual<G, E::Metrics>> = None;
304303

305304
for individual in population {
306-
if individual.fitness > best_fitness {
307-
best_fitness = individual.fitness;
308-
best_metrics = individual.metrics.clone();
305+
if best
306+
.as_ref()
307+
.map(|current| individual.fitness > current.fitness)
308+
.unwrap_or(true)
309+
{
310+
best = Some(individual);
309311
}
310312

311313
if individual.fitness.is_finite() {
@@ -320,11 +322,16 @@ where
320322
f64::NEG_INFINITY
321323
};
322324

325+
let best = best.expect("population must contain at least one individual");
326+
323327
GenerationSummary {
324328
index,
325-
best_fitness,
329+
best_fitness: best.fitness,
326330
average_fitness: average,
327-
best_metrics: best_metrics.expect("metrics must exist after evaluation"),
331+
best_metrics: best
332+
.metrics
333+
.clone()
334+
.expect("metrics must exist after evaluation"),
328335
}
329336
}
330337
}

0 commit comments

Comments
 (0)