private static void readBojarczukReports() throws FileNotFoundException {
        List<Integer> generations = new ArrayList<Integer>();

        File[] reports = reportDir.listFiles(new FileFilter() {
            public boolean accept(File path) {
                return path.getName().startsWith("Iteration_0");
            }
        });

        for (File report : reports) {
            int gen = Integer.parseInt(report.getName().substring(report.getName().lastIndexOf("_") + 1).replaceAll(".rep", ""));
            generations.add(gen);
        }
        Collections.sort(generations);

        for (Integer generation : generations) {
            Scanner s = new Scanner(new File(reportDir + "/" + "Iteration_0_" + generation + ".rep"));
            double maxFitnessTrue = -1, maxFitnessFalse = -1;
            while (s.hasNext()) {
                String line = s.nextLine();
                if (line.indexOf("class = true") != -1 && maxFitnessTrue == -1) {
                    maxFitnessTrue = Double.parseDouble(line.substring(line.lastIndexOf("; Fitness: ") + 11));
                }
                if (line.indexOf("class = false") != -1 && maxFitnessFalse == -1) {
                    maxFitnessFalse = Double.parseDouble(line.substring(line.lastIndexOf("; Fitness: ") + 11));
                }
                if (maxFitnessTrue != -1 && maxFitnessFalse != -1) break;
            }

            double averageMaxFitness = (maxFitnessTrue + maxFitnessFalse) / 2.0;

            maxFitness.put(generation, averageMaxFitness);
        }
    }