code: @Override
      protected List<EvaluatedCandidate<T>> nextEvolutionStep(List<EvaluatedCandidate<T>> evaluatedPopulation,
                                                              int eliteCount,
                                                              Random rng)
      {
          EvolutionUtils.sortEvaluatedPopulation(evaluatedPopulation, fitnessEvaluator.isNatural());
          List<T> selectedCandidates = selectionStrategy.select(evaluatedPopulation,
                                                                fitnessEvaluator.isNatural(),
                                                                selectionSize,
                                                                rng);
          List<EvaluatedCandidate<T>> offspring = evaluatePopulation(evolutionScheme.apply(selectedCandidates, rng));
  
          doReplacement(evaluatedPopulation, offspring, eliteCount, rng);
  
          return evaluatedPopulation;
      }
docs: {@inheritDoc}