public static void benchmarkProp(ProblemDefinition problem, String prop, double min, double max, double step) {
        
        List<String> results = new ArrayList<>();
        
        for (double stay = min; stay <= max; stay+= step) {
            long ccost = 0;
            long pcost = 0;
            long besti = 0;
            for (int i = 0; i < 5; i++) {
                solverProperties.setProperty(prop, String.valueOf(stay));
                
                SolverState state = benchSolve(problem);
                results.add(
                        String.format("test prop:%s, i:%s result: best c:%s p:%s it:%s",
                        stay,
                        i, 
                        state.getBestSolution().constraintsCost(), 
                        state.getBestSolution().preferenceCost(), 
                        state.getLastBestIteration())
                       );
                
                ccost += state.getBestSolution().constraintsCost();
                pcost += state.getBestSolution().preferenceCost();
                besti += state.getLastBestIteration();
            }
            results.add(String.format("prop %s avg: best c:%s p:%s it:%s",
                    stay,
                    ccost / 5f,
                    pcost / 5f,
                    besti / 5f
                    ));
        }
        
        System.out.println();
        
        for (String string : results) {
            System.out.println(string);    
        }
        
    }