code: public void doMutation(double probability, DoubleSolution solution){
      for (int i = 0; i < solution.getNumberOfVariables(); i++) {
        if (randomGenenerator.getRandomValue() < probability) {
          double rand = randomGenenerator.getRandomValue();
          double tmp;
  
          if (rand <= 0.5) {
            tmp = delta(solution.getUpperBound(i) - solution.getVariableValue(i),
                perturbation);
            tmp += solution.getVariableValue(i);
          } else {
            tmp = delta(solution.getLowerBound(i) - solution.getVariableValue(i),
                perturbation);
            tmp += solution.getVariableValue(i);
          }
  
          if (tmp < solution.getLowerBound(i)) {
            tmp = solution.getLowerBound(i);
          } else if (tmp > solution.getUpperBound(i)) {
            tmp = solution.getUpperBound(i);
          }
          solution.setVariableValue(i, tmp);
        }
      }
    }
docs: Perform the mutation operation
  
  @param probability Mutation setProbability
  @param solution    The solution to mutate