code: public static <N extends Number & Comparable<? super N>>
  	Predicate<EvolutionResult<?, N>>
  	byPopulationConvergence(final double epsilon) {
  		if (epsilon < 0.0 || epsilon > 1.0) {
  			throw new IllegalArgumentException(format(
  				"The given epsilon is not in the range [0, 1]: %f", epsilon
  			));
  		}
  
  		return new PopulationConvergenceLimit<>((best, moments) ->
  			eps(best, moments.getMean()) >= epsilon
  		);
  	}
docs: A termination method that stops the evolution when the population is
  deemed as converged. The population is deemed as converged when the
  average fitness across the current population is less than a
  user-specified percentage away from the best fitness of the current
  population.
  
  @since 3.9
  
  @param epsilon the maximal relative distance of the best fitness value of
  the population and the mean value of the population fitness values.
  @param <N> the fitness type
  @return a new fitness convergence strategy
  @throws IllegalArgumentException if {@code epsilon} is not in the range
  of {@code [0..1]}