public void mutate()
	{
		double alpha;

		// Calculate alpha - the affinity proportionate variable

		alpha = (1.0 / mutnParam) * Math.exp(-1 * fitnessNorm);

		// Mutate each dimension by adding an affinity proportionate Gaussian
		// random
		// number if the new value is outside the lower or upper bound on the
		// dimension, then set to the appropriate bound value

		for (int i = 0; i < dims.length; i++)
		{
			dims[i] = dims[i] + alpha * random.nextGaussian();

			if(dims[i] > upperBounds[i])
			{
				dims[i] = upperBounds[i];
			}

			if(dims[i] < lowerBounds[i])
			{
				dims[i] = lowerBounds[i];
			}
		}

	}