public void optimise()
	{
		int iter = 0; // Iteration count
		int preNumCells = 0; // Number of network cells in the previous
		                     // iteration
		boolean proceed; // Loop stopping condition variable

		// Add the initial number of cells to the network

		addCells(numInitCells);

		// Iterate until a stopping condition is met

		do
		{
			iter++;

			// Perform clonal selection and network cell interactions

			clonalSelection();
			networkInteractions();

			// If maximum iteration reached, or there has been no change in the
			// number
			// if cells in the network since the last iteration, then terminate
			// the loop
			// Else continue looping, making a note of the number of cells in
			// the
			// network for comparison in the next iteration, and add a number of
			// new
			// cells to the network depending given by the divRation parameter

			if((iter == maxIter) || (preNumCells == cellList.size()))
				proceed = false;
			else
			{
				proceed = true;
				preNumCells = cellList.size();
				addCells((int) Math.round(cellList.size() * divRatio));
			}
		} while (proceed);

		// Print out the details of each cell in the network, givin all the
		// dimension values followed by the cell's fitness according to the
		// optimistaion function

		for (int i = 0; i < cellList.size(); i++)
		{
			for (int j = 0; j < numDims; j++)
				System.out.print(cellList.get(i).getDimension(j) + " ");
			System.out.println(cellList.get(i).getFitness());
		}
	}