miércoles, 11 de julio de 2012

Análisis estadístico de desempeño

En éste análisis obtendremos el tiempo de ejecución, la cantidad total de memoria utilizada y calidad de la solución generada para cada una de las heurísticas ya conocidas y lo meteremos a un archivo para su posterior uso.


Código:
 ArrayList <Integer> usos = new ArrayList<Integer>();
 Hashtable <String, Double> heuristica = new Hashtable <String, Double>();
 Hashtable <String, Integer> contador = new Hashtable <String, Integer>();
 String opciones[] = {"local", "tabu", "recocido", "genetico"};
 Runtime rt = Runtime.getRuntime(); 
 BufferedWriter out = new BufferedWriter(new FileWriter("instancias.txt"));
 
 for(int i = 0; i < opciones.length ; i++){ 
  heuristica.put(opciones[i], 1.0);
 }


 ArrayList<Integer> actual = Arista.inicial(grafo);


 while(reinicio <= re){
 
    int indice = ruletaheur(heuristica, opciones);
  
  if(contador.containsKey(opciones[indice])){
   int valor = contador.get(opciones[indice]);
   valor += 1;
   contador.put(opciones[indice], valor);
  }else{
   contador.put(opciones[indice], 1);  
  }
  
 System.out.print("Usando "+opciones[indice] +" en reinicio " +re +"\n"); 
 long tiempoInicio = System.currentTimeMillis();
 long memoriaInicio = rt.freeMemory(); 
 
 switch(indice) {
  case 0:
      break;
  case 1: 
      sol = tabu(actual, tabu);
      if(sol <= actual){
       actual = sol;
       double puntos = heuristica.get(opciones[indice]);
       puntos *= premio;
       heuristica.put(opciones[indice], puntos);
      }
      break;
  case 3: 
      sol = recocido(actual);
      if(sol <= actual){
       actual = sol;
       double puntos = heuristica.get(opciones[indice]);
       puntos *= premio;
       heuristica.put(opciones[indice], puntos);
      }
      break;
  case 4: 
      sol = nacimiento(pob, n, grafo);
      if(sol <= actual){
       actual = sol;
       double puntos = heuristica.get(opciones[indice]);
       puntos *= premio;
       heuristica.put(opciones[indice], puntos);
      }
      break;
  }  

 long tiempoFinal = System.currentTimeMillis();
    long memoriaFinal = rt.freeMemory();

   out.write(reinicio);
   out.write("  ");
   out.write(String.valueOf(tiempoFinal-tiempoInicio));
   out.write("  ");
   out.write(String.valueOf(memoriaInicio-memoriaFinal));
   out.write("  ");
   out.write(String.valueOf(sol));
   out.newLine(); 
 reinicio++;   
 }   

1 comentario:

  1. Pues, están midiendo la memoria disponible y no la memoria utilizada, creo. Habría que restar ese valor del máximo disponible para que las gráficas fueran comparables, imagino. Hubiera sido bueno mostrar cómo se ve una salida ejemplo de esta medición. Van 7 pts.

    ResponderEliminar