pub struct StrategyMetrics { /* private fields */ }Expand description
Per-generation summary reported by Strategy::tell.
All statistics refer to the generation that just finished evaluating.
These values are in canonical (maximise) space: higher is better.
Strategies are sense-unaware, so the metrics they emit are always
canonical. EvolutionaryHarness::latest_metrics maps them back to the
objective’s declared sense before surfacing them to callers, so a
Minimize landscape reads as its natural cost (Sphere → 0).
When printed in a benchmark showcase (e.g. ackley_showcase), the
two most informative fields are:
best_fitness_ever— the best (canonical: largest) fitness seen across all generations so far. This is a rolling maximum that tells you how close the best individual ever found came to the optimum.mean_fitness— the arithmetic mean of the current generation’s per-individual fitness vector. This tells you the average quality of the population in that generation.
A large gap between best_fitness_ever and mean_fitness in the final
generation usually indicates premature convergence: a few elite
individuals found a good basin while the rest of the population is still
scattered. A small gap suggests the whole population has settled near the
same optimum.
Implementations§
Source§impl StrategyMetrics
impl StrategyMetrics
Sourcepub fn from_host_fitness(
generation: usize,
fitnesses: &[f32],
best_fitness_ever: f32,
) -> Self
pub fn from_host_fitness( generation: usize, fitnesses: &[f32], best_fitness_ever: f32, ) -> Self
Computes population statistics from a host-side fitness slice.
Each value is passed through the crate’s fitness-hygiene primitive
sanitize_fitness before folding, so
NaN → −∞ and +∞ → f32::MAX (the maximise convention, ADR 0023/0034)
consistently across every statistic — best/worst can no longer
silently drop a NaN (comparisons against NaN are false) while the sum
propagates it.
mean_fitness is computed over the finite members only: a sanitized
−∞ member (a NaN evaluation, or a genuine worst-sentinel) is excluded
from the average and counted in broken_count
instead (ADR 0034). This keeps a single broken individual from blanking
the whole mean to −∞ while still surfacing that the population is
unhealthy. +∞ → f32::MAX members are finite and are included, so an
optimal individual cannot blow the mean to +∞. If every member is
broken, mean_fitness = −∞ (degenerate but well-defined).
§Panics
Panics if fitnesses is empty. Callers hold a non-empty population by
construction — pop_size is validated non-zero at the harness
constructor (ADR 0026).
Sourcepub fn generation(&self) -> usize
pub fn generation(&self) -> usize
Zero-based generation index.
Sourcepub fn population_size(&self) -> usize
pub fn population_size(&self) -> usize
Number of individuals evaluated in this generation.
Sourcepub fn best_fitness(&self) -> f32
pub fn best_fitness(&self) -> f32
Best (canonical: largest) fitness observed in this generation.
Sourcepub fn mean_fitness(&self) -> f32
pub fn mean_fitness(&self) -> f32
Mean fitness across this generation’s population.
Averaged over the finite members only; broken (−∞) members are
excluded and reported by broken_count (ADR 0034).
Sourcepub fn broken_count(&self) -> usize
pub fn broken_count(&self) -> usize
Number of non-finite (broken) individuals excluded from
mean_fitness this generation (ADR 0034).
Zero on a healthy run; non-zero flags a population carrying NaN/−∞
members.
Sourcepub fn worst_fitness(&self) -> f32
pub fn worst_fitness(&self) -> f32
Worst (canonical: smallest) fitness observed in this generation.
Sourcepub fn best_fitness_ever(&self) -> f32
pub fn best_fitness_ever(&self) -> f32
Best (canonical: largest) fitness seen across all generations to date.
Trait Implementations§
Source§impl Clone for StrategyMetrics
impl Clone for StrategyMetrics
Source§fn clone(&self) -> StrategyMetrics
fn clone(&self) -> StrategyMetrics
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for StrategyMetrics
impl RefUnwindSafe for StrategyMetrics
impl Send for StrategyMetrics
impl Sync for StrategyMetrics
impl Unpin for StrategyMetrics
impl UnsafeUnpin for StrategyMetrics
impl UnwindSafe for StrategyMetrics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<C> CloneExpand for Cwhere
C: Clone,
impl<C> CloneExpand for Cwhere
C: Clone,
fn __expand_clone_method(&self, _scope: &mut Scope) -> C
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more