docs: public static Solution<?> normalize(Solution<?> solution, double[] minValues, double[] maxValues) {
  
  		if (solution == null) {
  			throw new JMetalException("The solution should not be null");
  		}
  		
  		if (minValues == null || maxValues == null) {
  			throw new JMetalException("The minValues and maxValues should not be null");
  		}
  		
  		if (minValues.length == 0 || maxValues.length == 0) {
  			throw new JMetalException("The minValues and maxValues should not be empty");
  		}
  
  		if (minValues.length != maxValues.length) {
  			throw new JMetalException("The minValues and maxValues should have the same length");
  		}
  
  		if (solution.getNumberOfObjectives() != minValues.length) {
  			throw new JMetalException("The number of objectives should be the same to min and max length");
  		}
  
  		Solution<?> copy = (Solution<?>) solution.copy();
  
  		for (int i = 0; i < copy.getNumberOfObjectives(); i++) {
  			copy.setObjective(i, NormalizeUtils.normalize(solution.getObjective(i), minValues[i], maxValues[i]));
  		}
  
  		return copy;
  	}