use super::*;
pub(crate) fn limit_reached<U>(limit: LimitConfiguration, chromosomes: &[U]) -> bool
where
U: LinearChromosome,
{
let mut result = false;
if limit.problem_solving == ProblemSolving::Minimization {
for chromosome in chromosomes {
if chromosome.fitness().abs() < 1e-9 {
result = true;
break;
}
}
} else if limit.problem_solving == ProblemSolving::Maximization {
if let Some(target) = limit.fitness_target {
for chromosome in chromosomes {
if chromosome.fitness() >= target {
result = true;
break;
}
}
}
} else if limit.problem_solving == ProblemSolving::FixedFitness {
if let Some(target) = limit.fitness_target {
for chromosome in chromosomes {
if (chromosome.fitness() - target).abs() <= target.abs() * 1e-9 + 1e-12 {
result = true;
break;
}
}
}
}
result
}