code: public Polygon mutate(final float rate, final float magnitude) {
  		final Random random = RandomRegistry.getRandom();
  		final Polygon mutated = new Polygon(length());
  
  		for (int i = 0; i < _data.length; ++i) {
  			if (random.nextFloat() < rate) {
  				mutated._data[i] =
  					clamp(_data[i] + (random.nextFloat()*2F - 1F)*magnitude);
  			} else {
  				mutated._data[i] = _data[i];
  			}
  		}
  
  		return mutated;
  	}
docs: Return a new Polygon, mutated with the given rate and amount.
  <p>
  Each component of the Polygon may be mutated according to the specified
  mutation rate. In case a component is going to be mutated, its value will
  be randomly modified in the uniform range of
  {@code [-magnitude, +magnitude]}.
  
  @param rate the mutation rate
  @param magnitude the mutation amount
  @return a new Polygon