private void clonalSelection()
	{
		boolean proceed; // Loop stopping condition variable
		double preAvgFitness = 0.0; // Average population fitness before clonal
		                            // selection
		double postAvgFitness; // Average population fitness after clonal
		                       // selection
		double fitnessSum; // Sum of fitnesses of all network cells

		// Iterate until stopping condition is met

		do
		{
			// Clonal selection: evaluate all cells against optimistaion
			// function
			// then clone accordingly

			evaluateCells();
			cloneCells();

			// Calculate the average fitness of all network cells

			fitnessSum = 0;

			for (int i = 0; i < cellList.size(); i++)
				fitnessSum = fitnessSum + cellList.get(i).getFitness();

			postAvgFitness = fitnessSum / cellList.size();

			// If the difference between the average cell fitnesses before and
			// after
			// clonal selectionS is below a pre-defined threshold (errorThres)
			// then
			// stop iterating, Else continue to iterate noting the current
			// average
			// cell fitness for comparison in the next iteration

			if((postAvgFitness - preAvgFitness) < errorThres)
				proceed = false;
			else
			{
				proceed = true;
				preAvgFitness = postAvgFitness;
			}

		} while (proceed);
	}