src/SimulatedAnnealingUtility/SimAnne.java
public void findBestSolution() {
		long startTime = System.nanoTime();
		temp=DataStructure.Utility.initialSolution.getCosto();
		tempLow = setNewTemperature(cooling);
		vectorC.clear();
		//bestC = temp;
		int count = 0;// Variabile per testare il numero di cicli wile fatti
		while ( (!checkStopCriteria()) && (temp > tempLow)) {
		//while ( (!checkStopCriteriaIntorno()) && (temp > tempLow)) {
			int i = 0;
			count++;
			// System.out.println("Distanza Attuale::"+currentSolution.getDistance());
			while (i < nIteration) {

				// Creazione di una nuova Soluzione Vicina al problema di
				// partenza
				// effettuo in modo casulare o una modifica sulla stessa squadra
				// oppure una modifica su squadre differenti
				int r = DataStructure.Utility.sRandom.nextInt(2);
				if (r == 0) {
					DataStructure.Utility.createNearSolution(1, 0);
				}
				else {
					DataStructure.Utility.createNearSolution(0, 1);
				}
				// Calcolo dei costi (distanza in questo caso)
				// double currentEngery = currentSolution.getDistance();
				float currentEngery = DataStructure.Utility.initialSolution.getCosto();
				float neighbourEngery = DataStructure.Utility.valuateSolution.getCosto();

				// Comparazione del costo della nuova soluzione con quello della
				// vecchia
				// ed accettazione della nuova soluzione sulla base della
				// funziore di accettazione
				if (accettazione(neighbourEngery, currentEngery)) {
					DataStructure.Utility.acceptNewSolution();
				} else {
					DataStructure.Utility.restoreToInitialSolution();
				}
				i++;
			}
			// Controllo sugli ultimi risultati
			// bestC <- ultimo valore trovato;
			vectorC.add(DataStructure.Utility.initialSolution.getCosto());
			// Modifico la temperatura (sistema di cooling) sulla base dell'alfa
			temp = temp - (alfa * temp);
		}

		
		//Memorizzo il tempo di esecuzione del SA
		long estimatedTime = System.nanoTime() - startTime;
		int iteration = count * nIteration;
		
		Utility.openFile("iteration_time" + getnIteration() + "_"
				+ getnValuate() + "_" + getCooling() + "_" + getAlfa() + ".txt");
		Utility.printToFile(iteration+ "\t"+
				TimeUnit.MILLISECONDS.convert(estimatedTime,TimeUnit.NANOSECONDS) + "\n");
		Utility.closefile();
		
		

		/*Utility.openFile("count_check_intorno" + getnIteration() + "_"
						+ getnValuate() + "_" + getCooling() + "_" + getAlfa()
						+ ".txt");
		if (checkStopCriteriaIntorno()) 
			Utility.printToFile("1\n");
		
		Utility.closefile();
		*/
	}
/**
	 * Metodo che astrare il comportamento del Simulated Annealing nella ricerca
	 * della soluzione ottimale
	 */
Metodo che astrare il comportamento del Simulated Annealing nella ricerca
della soluzione ottimale
Metodo che astrare il comportamento del Simulated Annealing nella ricerca della soluzione ottimale
public void findBestSolution() {
		long startTime = System.nanoTime();
		temp=DataStructure.Utility.initialSolution.getCosto();
		tempLow = setNewTemperature(cooling);
		vectorC.clear();
		int count = 0;
		while ( (!checkStopCriteria()) && (temp > tempLow)) {
			int i = 0;
			count++;
			while (i < nIteration) {
				int r = DataStructure.Utility.sRandom.nextInt(2);
				if (r == 0) {
					DataStructure.Utility.createNearSolution(1, 0);
				}
				else {
					DataStructure.Utility.createNearSolution(0, 1);
				}
				float currentEngery = DataStructure.Utility.initialSolution.getCosto();
				float neighbourEngery = DataStructure.Utility.valuateSolution.getCosto();
				if (accettazione(neighbourEngery, currentEngery)) {
					DataStructure.Utility.acceptNewSolution();
				} else {
					DataStructure.Utility.restoreToInitialSolution();
				}
				i++;
			}
			vectorC.add(DataStructure.Utility.initialSolution.getCosto());
			temp = temp - (alfa * temp);
		}
		long estimatedTime = System.nanoTime() - startTime;
		int iteration = count * nIteration;
		Utility.openFile("iteration_time" + getnIteration() + "_"
				+ getnValuate() + "_" + getCooling() + "_" + getAlfa() + ".txt");
		Utility.printToFile(iteration+ "\t"+
				TimeUnit.MILLISECONDS.convert(estimatedTime,TimeUnit.NANOSECONDS) + "\n");
		Utility.closefile();
		/*Utility.openFile("count_check_intorno" + getnIteration() + "_"
						+ getnValuate() + "_" + getCooling() + "_" + getAlfa()
						+ ".txt");
		if (checkStopCriteriaIntorno()) 
			Utility.printToFile("1\n");
		Utility.closefile();
		*/
	}
public void findBestSolution ( ) { long startTime = System . nanoTime ( ) ; temp = DataStructure . Utility . initialSolution . getCosto ( ) ; tempLow = setNewTemperature ( cooling ) ; vectorC . clear ( ) ; int count = 0 ; while ( ( ! checkStopCriteria ( ) ) && ( temp > tempLow ) ) { int i = 0 ; count ++ ; while ( i < nIteration ) { int r = DataStructure . Utility . sRandom . nextInt ( 2 ) ; if ( r == 0 ) { DataStructure . Utility . createNearSolution ( 1 , 0 ) ; } else { DataStructure . Utility . createNearSolution ( 0 , 1 ) ; } float currentEngery = DataStructure . Utility . initialSolution . getCosto ( ) ; float neighbourEngery = DataStructure . Utility . valuateSolution . getCosto ( ) ; if ( accettazione ( neighbourEngery , currentEngery ) ) { DataStructure . Utility . acceptNewSolution ( ) ; } else { DataStructure . Utility . restoreToInitialSolution ( ) ; } i ++ ; } vectorC . add ( DataStructure . Utility . initialSolution . getCosto ( ) ) ; temp = temp - ( alfa * temp ) ; } long estimatedTime = System . nanoTime ( ) - startTime ; int iteration = count * nIteration ; Utility . openFile ( "iteration_time" + getnIteration ( ) + "_" + getnValuate ( ) + "_" + getCooling ( ) + "_" + getAlfa ( ) + ".txt" ) ; Utility . printToFile ( iteration + "\t" + TimeUnit . MILLISECONDS . convert ( estimatedTime , TimeUnit . NANOSECONDS ) + "\n" ) ; Utility . closefile ( ) ; /*Utility.openFile("count_check_intorno" + getnIteration() + "_"
						+ getnValuate() + "_" + getCooling() + "_" + getAlfa()
						+ ".txt");
		if (checkStopCriteriaIntorno()) 
			Utility.printToFile("1\n");
		
		Utility.closefile();
		*/ }
Metodo che astrare il comportamento del Simulated Annealing nella ricerca
 della soluzione ottimale
Metodo che astrare il comportamento del Simulated Annealing nella ricerca della soluzione ottimale
//bestC = temp; // Variabile per testare il numero di cicli wile fatti //while ( (!checkStopCriteriaIntorno()) && (temp > tempLow)) { // System.out.println("Distanza Attuale::"+currentSolution.getDistance()); // Creazione di una nuova Soluzione Vicina al problema di // partenza // effettuo in modo casulare o una modifica sulla stessa squadra // oppure una modifica su squadre differenti // Calcolo dei costi (distanza in questo caso) // double currentEngery = currentSolution.getDistance(); // Comparazione del costo della nuova soluzione con quello della // vecchia // ed accettazione della nuova soluzione sulla base della // funziore di accettazione // Controllo sugli ultimi risultati // bestC <- ultimo valore trovato; // Modifico la temperatura (sistema di cooling) sulla base dell'alfa //Memorizzo il tempo di esecuzione del SA