code: public List<ColouredPolygon> apply(List<ColouredPolygon> polygons, Random rng)
      {
          List<ColouredPolygon> newPolygons = new ArrayList<ColouredPolygon>(polygons.size());
          for (ColouredPolygon polygon : polygons)
          {
              List<Point> newVertices = mutateVertices(polygon.getVertices(), rng);
              newPolygons.add(newVertices == polygon.getVertices()
                              ? polygon
                              : new ColouredPolygon(polygon.getColour(), newVertices));
          }
          return newPolygons;
      }
docs: Applies the mutation to each polygon in the list provided according to the
  pre-configured mutation probability.  If the probability is 0.1, approximately
  10% of the individuals will be mutated.  The actual mutation operation is
  defined in the sub-class implementation of the
  {@link #mutateVertices(java.util.List, java.util.Random)} method.
  @param polygons The list of polygons to be mutated.
  @param rng A source of randomness.
  @return The polygons after mutation.  None, some or all will have been
  modified.