docs: @Override
    public List<DoubleSolution> execute(List<DoubleSolution> solutionSet) {
      if (null == solutionSet) {
        throw new JMetalException("Parameter is null") ;
      } else if ((solutionListIndex < 0) || (solutionListIndex > solutionSet.size())) {
        throw new JMetalException(
                "Index value invalid: " + solutionListIndex );
      } else if (solutionSet.size() < 4) {
        throw new JMetalException(
            "The population has less than four solutions: " + solutionSet.size());
      }
  
      List<DoubleSolution> parents = new ArrayList<>(3);
      int r1, r2, r3;
  
      do {
        r1 = randomGenerator.getRandomValue(0, solutionSet.size() - 1);
      } while (r1 == solutionListIndex);
      do {
        r2 = randomGenerator.getRandomValue(0, solutionSet.size() - 1);
      } while (r2 == solutionListIndex || r2 == r1);
      do {
        r3 = randomGenerator.getRandomValue(0, solutionSet.size() - 1);
      } while (r3 == solutionListIndex || r3 == r1 || r3 == r2);
  
      parents.add(solutionSet.get(r1));
      parents.add(solutionSet.get(r2));
      parents.add(solutionSet.get(r3));
  
      return parents;
    }