private  Result calculateMBF(Result result)
	{
		ArrayList<Float> dataPoints = new ArrayList<>();
		float MBF = 0f;
		float MBF_stdev = 0f;
		int N = 0;

		for (int run = 0; run < rawGenerationData.size(); run++)
		{
			float bestFitness = 0f;
			for (int generation = 0; generation < rawGenerationData.get(run).size(); generation++)
			{
				for (int cell = 0; cell < rawGenerationData.get(run).get(generation).size(); cell++)
				{
					NetworkCell current = rawGenerationData.get(run).get(generation).get(cell);
					if(current.getFitnessNorm() > bestFitness)
					{
						bestFitness = (float) current.getFitnessNorm();
					}
				}
			}
			MBF += bestFitness;
			dataPoints.add(bestFitness);
			N++;
		}
		result.MBF = MBF / N;

		for (int i = 0; i < dataPoints.size(); i++)
		{
			float dataPoint = dataPoints.get(i);
			MBF_stdev += Math.pow(dataPoint - result.MBF, 2);
		}
		result.MBF_stdev = (float) (Math.sqrt(MBF_stdev / N));

		return result;
	}