code: public <S> List<S> select(List<EvaluatedCandidate<S>> population,
                                boolean naturalFitnessScores,
                                int selectionSize,
                                Random rng)
      {
          List<EvaluatedCandidate<S>> rankedPopulation = new ArrayList<EvaluatedCandidate<S>>(population.size());
          Iterator<EvaluatedCandidate<S>> iterator = population.iterator();
          int index = -1;
          while (iterator.hasNext())
          {
              S candidate = iterator.next().getCandidate();
              rankedPopulation.add(new EvaluatedCandidate<S>(candidate,
                                                             mapRankToScore(++index,
                                                                            population.size())));
          }
          return delegate.select(rankedPopulation, true, selectionSize, rng);
      }
docs: {@inheritDoc}