code: public <S> List<S> select(List<EvaluatedCandidate<S>> population,
                                boolean naturalFitnessScores,
                                int selectionSize,
                                Random rng)
      {
          DataSet statistics = new DataSet(population.size());
          for (EvaluatedCandidate<S> candidate : population)
          {
              statistics.addValue(candidate.getFitness());
          }
  
          List<EvaluatedCandidate<S>> scaledPopulation = new ArrayList<EvaluatedCandidate<S>>(population.size());
          for (EvaluatedCandidate<S> candidate : population)
          {
              double scaledFitness = getSigmaScaledFitness(candidate.getFitness(),
                                                           statistics.getArithmeticMean(),
                                                           statistics.getStandardDeviation());
              scaledPopulation.add(new EvaluatedCandidate<S>(candidate.getCandidate(),
                                                             scaledFitness));
          }
          return delegate.select(scaledPopulation, naturalFitnessScores, selectionSize, rng);
      }
docs: {@inheritDoc}