docs: private void doMutation(double probability, DoubleSolution solution) {
      double rnd, delta1, delta2, mutPow, deltaq;
      double y, yl, yu, val, xy;
  
      for (int i = 0; i < solution.getNumberOfVariables(); i++) {
        if (randomGenerator.getRandomValue() <= probability) {
          y = solution.getVariableValue(i);
          yl = solution.getLowerBound(i) ;
          yu = solution.getUpperBound(i) ;
          if (yl == yu) {
            y = yl ;
          } else {
            delta1 = (y - yl) / (yu - yl);
            delta2 = (yu - y) / (yu - yl);
            rnd = randomGenerator.getRandomValue();
            mutPow = 1.0 / (distributionIndex + 1.0);
            if (rnd <= 0.5) {
              xy = 1.0 - delta1;
              val = 2.0 * rnd + (1.0 - 2.0 * rnd) * (Math.pow(xy, distributionIndex + 1.0));
              deltaq = Math.pow(val, mutPow) - 1.0;
            } else {
              xy = 1.0 - delta2;
              val = 2.0 * (1.0 - rnd) + 2.0 * (rnd - 0.5) * (Math.pow(xy, distributionIndex + 1.0));
              deltaq = 1.0 - Math.pow(val, mutPow);
            }
            y = y + deltaq * (yu - yl);
            y = solutionRepair.repairSolutionVariableValue(y, yl, yu);
          }
          solution.setVariableValue(i, y);
        }
      }
    }