docs: public void calculateFitness(List<S> solutionSet) {
      // Obtains the lower and upper bounds of the population
      double[] maximumValues = new double[problem.getNumberOfObjectives()];
      double[] minimumValues = new double[problem.getNumberOfObjectives()];
  
      for (int i = 0; i < problem.getNumberOfObjectives(); i++) {
        maximumValues[i] = -Double.MAX_VALUE;
        minimumValues[i] = Double.MAX_VALUE;
      }
  
      for (S solution : solutionSet) {
        for (int obj = 0; obj < problem.getNumberOfObjectives(); obj++) {
          double value = solution.getObjective(obj);
          if (value > maximumValues[obj]) {
            maximumValues[obj] = value;
          }
          if (value < minimumValues[obj]) {
            minimumValues[obj] = value;
          }
        }
      }
  
      computeIndicatorValuesHD(solutionSet, maximumValues, minimumValues);
      for (int pos = 0; pos < solutionSet.size(); pos++) {
        fitness(solutionSet, pos);
      }
    }