private static double[] calculateErrorSurfaceAnnealing(){
            // Prepare output file
            FileWriter outFile;
            try{
                outFile = new FileWriter("surf_anneal.txt");
            }catch(Exception e){
                System.out.println("ERROR! Couldn't open surf_anneal.txt");
                return new double[]{-1,-1};
            }
            PrintWriter out = new PrintWriter(outFile);
            
            double[] c = new double[]{0.99, 0.999, 0.9999, 0.99999};
            double[] t = new double[]{1, 10, 100, 1000};
            double[][] surf = new double[c.length][t.length];
            
            double best_error = -1;
            double best_c = 0;
            double best_t = 0;
            
            out.println();
            out.println("Error surface for Annealing:");
            
            for(int ci=0;ci<c.length;ci++){
                for(int ti=0;ti<t.length;ti++){
                    surf[ci][ti] = 0;
                    
                    for(int i=0;i<31;i++){
                        for(Distances cluster: clusters){
                            ProblemAnnealing pAnnealing = new ProblemAnnealing(cluster, capacity, minDemand);
                            pAnnealing.run(t[ti], 0.001, c[ci]);
                            surf[ci][ti] += pAnnealing.getResult().getFitnessValue();
                        }
                    }
                    
                    surf[ci][ti] /= 31;
                    out.print(surf[ci][ti]+((ti<t.length-1) ? "," : ""));
                    
                    if(best_error < 0 || best_error > surf[ci][ti]){
                        best_error = surf[ci][ti];
                        best_c = c[ci];
                        best_t = t[ti];
                    }
                }
                
                if(ci<c.length-1){
                    out.println(';');
                }
            }
            
            out.close();
            return new double[]{best_c, best_t};
        }