private boolean readConfig(String filename)
	{
		File file = new File(filename);

		// Check that file exists

		if(!file.exists())
		{
			System.out.println("Config file " + filename + " does not exist");
			return false;
		}

		// Read each line from the config file, setting the relevent variables

		try
		{
			BufferedReader in = new BufferedReader(new FileReader(file));

			numCells = Integer.parseInt(readNextLine(in));
			numClones = Integer.parseInt(readNextLine(in));
			maxIter = Integer.parseInt(readNextLine(in));
			suppThres = Double.parseDouble(readNextLine(in));
			errorThres = Double.parseDouble(readNextLine(in));
			divRatio = Double.parseDouble(readNextLine(in));
			mutnParam = Double.parseDouble(readNextLine(in));
			numDimensions = Integer.parseInt(readNextLine(in));

			lowerBounds = new double[numDimensions];
			upperBounds = new double[numDimensions];

			// Specific bounds for each dimension must be provided

			for (int i = 0; i < numDimensions; i++)
			{
				String s = readNextLine(in);

				if(s == null)
				{
					System.out.println("Upper and lower bounds for each dimension must be provided");
					return false;
				}

				// Split the input string in two using the "," character

				String[] bits = s.split(",");
				lowerBounds[i] = Double.parseDouble(bits[0]);
				upperBounds[i] = Double.parseDouble(bits[1]);
			}
		} catch (Exception e)
		{
			System.out.println("Error opening config file " + filename);
			return false;
		}

		// Return true as no problems have been encountered

		return true;
	}