private static void runBenchmark(Settings settings) {
        Graph graf = new Graph();
        try {
            graf.loadFromFile(settings.graphFileName);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

        GraphColoringProblem gcp = new GraphColoringProblem(graf, settings.colors, settings.isDoubleSlicedGenom, settings.isRandomCrossPosition);
        final GeneticAlgorithm<Integer> ea = new GeneticAlgorithm<>(gcp, settings.populationSize, settings.parentsSize, settings.crossProbability, settings.mutationProbability, settings.maxIterations);
        ArrayList<Double> max = new ArrayList<>();
        ArrayList<Double> avg = new ArrayList<>();
        ArrayList<Double> min = new ArrayList<>();
        ArrayList<Double> bestMax = new ArrayList<>();
        ArrayList<Double> bestAvg = new ArrayList<>();
        ArrayList<Double> bestMin = new ArrayList<>();
        int lowestIterations = settings.maxIterations + 1;
        Integer[] bestSolution = new Integer[graf.graph.size()];
        int avgIterations = 0;
        double m, a, mi, mv, av, miv;
        int success, failure;
        m = a = mi = mv = av = miv = failure = success = 0;

        for (int i = 0; i < 10; ++i) {
            ea.run();
            double t1 = ea.bestSolutionCost;
            if (ea.hasFoundSolution) {
                ++success;
            } else {
                ++failure;
            }
            double t3 = ea.min.get(ea.min.size() - 1);
            double t2 = ea.avg.get(ea.avg.size() - 1);
            max.add(t1);
            avg.add(t2);
            min.add(t3);
            m += max.get(i);
            a += avg.get(i);
            mi += min.get(i);
            avgIterations += ea.iterations;
            if (ea.iterations < lowestIterations) {
                lowestIterations = ea.iterations;
                bestMax = new ArrayList<>(ea.max);
                bestAvg = new ArrayList<>(ea.avg);
                bestMin = new ArrayList<>(ea.min);
                bestSolution = ea.bestSolution;
            }
            System.out.println(String.format("Pętla %d ilość iteracji %d :{ MaxFval: %.4f , AvgFval: %.4f , MinFval: %.4f}", (i + 1), ea.iterations, t1, t2, t3));
        }
        m /= max.size();
        a /= avg.size();
        mi /= min.size();
        avgIterations /= 10;
        for (int i = 0; i < max.size(); ++i) {
            mv += Math.pow(max.get(i) - m, 2);
            av += Math.pow(avg.get(i) - a, 2);
            miv += Math.pow(min.get(i) - mi, 2);
        }
        mv /= max.size();
        av /= avg.size();
        miv /= min.size();

        System.out.println(String.format("Dane dla 10 uruchomień\n%d/%d udanych\n~Max wartość %.4f dla %.10f\n~Wartość średnia %.4f dla %.10f\n~Wartość min %.4f dla %.10f\n~Ilość iteracji %d\n",success,(success+failure), m, mv, a, av, mi, miv, avgIterations));
        if (settings.plotGraph) {
            JFrame window = new JFrame("Najlepszy przebieg");
            window.setSize(600, 600);
            window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Plot2DPanel p = new Plot2DPanel();
            GUI.plot(bestMax, bestAvg, bestMin, p, settings.maxPlotVars);
            window.setContentPane(p);
            window.setVisible(true);
        }
        saveResult(bestSolution);
    }