@Override public NumberStatistics.Builder<G, R> evaluate( final Iterable<? extends Phenotype<G, R>> population, final int generation, final Optimize opt) { final Builder<G, R> builder = new Builder<>(); builder.generation(generation); builder.optimize(opt); final MinMax<Phenotype<G, R>> minMax = new MinMax<>(); final Variance<Integer> age = new Variance<>(); final Variance<R> fitness = new Variance<>(); accumulators.<Phenotype<G, R>>accumulate( population, minMax, age.map(Phenotype.Age(generation)), fitness.map(Phenotype.<R>Fitness())); builder.bestPhenotype(opt.best(minMax.getMax(), minMax.getMin())); builder.worstPhenotype(opt.worst(minMax.getMax(), minMax.getMin())); builder.fitnessMean(fitness.getMean()); builder.fitnessVariance(fitness.getVariance()); builder.samples((int) minMax.getSamples()); builder.ageMean(age.getMean()); builder.ageVariance(age.getVariance()); builder.standardError(fitness.getStandardError()); return builder; }