docs: @Override
    protected List<S> selection(List<S> population) {
      // Chosen operator depends on archive size
      CrossoverOperator<S> chosenOperator = archive.isFull() ? fullArchiveCrossoverOperator : crossoverOperator;
  
      List<S> matingPopulation = new ArrayList<>(chosenOperator.getNumberOfRequiredParents());
  
      for (int i = 0; i < chosenOperator.getNumberOfRequiredParents(); i++) {
        S solution = selectionOperator.execute(population);
        matingPopulation.add(solution);
      }
  
      return matingPopulation;
    }