예제 #1
0
파일: Main.java 프로젝트: plhequet/ADOM_TSP
  @SuppressWarnings("unused")
  public Main(String file) throws IOException {
    VilleFactory vf = VilleFactory.getINSTANCE();
    int[] tableauPermutationDeBase = Reader.traitementFichier(file);
    HashMap<Integer, Ville> listeVilles = vf.getListeVilles();
    Calcul calcul = new Calcul();
    int[][] resultat = calcul.matriceCout(listeVilles);

    int[][] matrix = new int[resultat.length][resultat[1].length];
    for (int i = 0; i < matrix.length; i++) {
      for (int j = 0; j < matrix[0].length; j++) matrix[i][j] = (int) resultat[i][j];
    }
    //		TwoOpt to = new TwoOpt(matrix);
    //		int total = 0;
    //		for(int j=0;j<resultat[1].length;j++){
    //			int[]solutionCandidate = Heuristique.heursitiquePlusProcheVoisin(resultat,j);
    //			to.twoOpt(solutionCandidate, false);
    //			int[] resultatTO = to.getPath();
    //
    //			total = total + calcul.evaluation(resultatTO,resultat);
    //			System.out.println(calcul.evaluation(resultatTO,resultat));
    //		}
    //		double calculeeeeee = total/resultat[1].length;
    //		System.out.println("---- " + calculeeeeee);
    //		System.out.println("---- ---- " + (calculeeeeee)/21282);

    //		Swap sw = new Swap(matrix);
    //		int total = 0;
    //		for(int j=0;j<resultat[1].length;j++){
    //			int[]solutionCandidate = Heuristique.heursitiquePlusProcheVoisin(resultat,j);
    //			sw.swap(solutionCandidate, true);
    //			int[] resultatTO = sw.getPath();
    //
    //			total = total + calcul.evaluation(resultatTO,resultat);
    //			System.out.println(calcul.evaluation(resultatTO,resultat));
    //		}
    //		double calculeeeeee = total/resultat[1].length;
    //		System.out.println("---- " + calculeeeeee);
    //		System.out.println("---- ---- " + (calculeeeeee)/21282);
  }
예제 #2
0
파일: Main.java 프로젝트: plhequet/ADOM_TSP
 /**
  * Valeur qui appele la fonction du type d'initialisation voulue, mouvement voulu et le type de
  * voisinage choisi sur un tableau de permutation donné.
  *
  * @param intialisation (0 -> aleatoire, 1 -> heuristique constructive)
  * @param mouvement (0 -> meilleur voisin améliorant, 1 -> premier voisin améliorant)
  * @param voisinage (0 -> swap, 1 -> twoopt)
  * @param tableauPermutationDeBase
  * @return
  */
 public double hillClimbing(
     int intialisation,
     int mouvement,
     int voisinage,
     int[] tableauPermutationDeBase,
     int[][] matrice) {
   double result = 0.0;
   int[] path = new int[tableauPermutationDeBase.length];
   Calcul calcul = new Calcul();
   int[] tableauPermutationUtilise = new int[tableauPermutationDeBase.length];
   if (intialisation == 0) {
     tableauPermutationUtilise = tableauPermutationDeBase.clone();
     calcul.shuffleArray(tableauPermutationUtilise);
   } else if (intialisation == 1) {
     tableauPermutationUtilise = Heuristique.heursitiquePlusProcheVoisin(matrice, 1);
   }
   if (voisinage == 0) {
     Swap swap = new Swap(matrice);
     if (mouvement == 0) {
       swap.swap(tableauPermutationUtilise, false);
     } else if (mouvement == 1) {
       swap.swap(tableauPermutationUtilise, true);
     }
     path = swap.getPath();
   } else if (voisinage == 1) {
     TwoOpt twoOpt = new TwoOpt(matrice);
     if (mouvement == 0) {
       twoOpt.twoOpt(tableauPermutationUtilise, false);
     } else if (mouvement == 1) {
       twoOpt.twoOpt(tableauPermutationUtilise, true);
     }
     path = twoOpt.getPath();
   }
   result = calcul.evaluation(path, matrice);
   return result;
 }