public static void main(String[] args)
	{
		// Example:
		/*
		 * TestingParameters basicParam = new TestingParameters();
		 * basicParam.maxNrRuns = 100; basicParam.affinityMeasure =
		 * TestingParameters.AFFINITY_EUCLIDEAN; basicParam.optimisationFunction
		 * = ExampleFunction.getInstance(); basicParam.cellGenerator =
		 * RandomCellGenerator.getInstance();
		 */

		int nrRuns = 100;
		boolean withExperimentalVariation = true;

		ArrayList<TestingParameters> allParameters = createTestingParams(nrRuns, withExperimentalVariation);
		System.out.println("Main.main() - NR of ExperimentalParameters set: " + allParameters.size());
		for (int p = 0; p < allParameters.size(); p++)
		{
			TestingParameters param = allParameters.get(p);
			System.out.println(p + "\t" + param.name);

			DataManager dataManager = new DataManager(param);
			Thread[] experiments = new Thread[param.maxNrRuns];

			// System.out.println(param.maxNrRuns);

			for (int run = 0; run < param.maxNrRuns; run++)
			{
				Experiment basicExperiment = new Experiment(dataManager, param);
				experiments[run] = basicExperiment.executeExperiment();
			}

			// Wait for all threads to stop
			for (int run = 0; run < param.maxNrRuns; run++)
			{
				try
				{
					experiments[run].join();
				} catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
			
			// Analyze the results and print/write them
			analyze(dataManager, 0, param.name);
		}
		System.out.println("Main.main() - Finished with " + allParameters.size() + " experiments.");
	}