Advertisement
alduncin

Arista.java

Jul 2nd, 2012
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.95 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.Random;
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.lang.Math;
  6. import java.io.*;//io writter crear Archivo
  7. public class Arista {
  8.     //propiedades de la arista
  9.     public int desde;
  10.     public int hasta;
  11.     //random para toda la clase
  12.     public static final Random r = new Random();
  13.     /**Constructor
  14.        para asignar a una arista su identificador de que grafo y hasta que grafo se dirige
  15.     */
  16.     public Arista(int d, int h) {
  17.     //arista dirijido desde a donde
  18.     this.desde = d;
  19.     this.hasta = h;
  20.     }
  21.     /**
  22.        Metodo que para identificar la arista su punto de inicio hasta su punto final
  23.     */
  24.     public String toString() {
  25.     return  this.desde + "-" + this.hasta ;
  26.     }
  27.    
  28.    
  29.     /**Metodo Genera
  30.        recibe n = numero de nodos  p= densidad
  31.        crea una lista de aristas
  32.        despues a esa lista le agrega las aristas generadas(connectadas) a vertices
  33.     */
  34.     public static ArrayList<Arista> genera(int n, double p) {
  35.     ArrayList<Arista> grafo = new ArrayList<Arista>();
  36.     //genera las conexiones de mi grafo
  37.     for (int i = 0; i < n; i++) {//recorre igual a los vertices asignando aristas al azar
  38.         for (int j = i + 1; j < n; j++) {//se suma uno para que la arista no repita su punto de origen (vertices anteriores)
  39.         if (Arista.r.nextDouble() <= p) {//si el numero random generado es menor igual a la densidad se genera la conexion
  40.             grafo.add(new Arista(i, j));//se agrega una arista a mi lista de aristas de mi grafo
  41.         }
  42.         }
  43.     }
  44.     return grafo;//regresas una lista de aristas
  45.     }
  46.     /**Metodo que imprime listas
  47.        recibe una lista y la imprime
  48.     */
  49.     public static void imprime(ArrayList lista) {
  50.     Iterator i = lista.iterator();//
  51.     while (i.hasNext()) {
  52.         System.out.println(i.next());
  53.     }
  54.     return;
  55.     }
  56.     /**Calcula la cota inferior = grados de los nodos sumados den total de aristas (cantidad de vecinos sumando)
  57.        recibe numero de nodos y numero de aristas recorre la lista agrega un arreglo que contiene la cantidad
  58.        de vecinos que tiene esto es el grado de el vertice crea una seleccion de nodos a traves de los que tengan
  59.        la mayor cantidad de vecinosy si la suma de estos vecinos es igual o mayor al total de aristas ya se tiene
  60.        el conjunto de la solucion inicial
  61.     */
  62.     public static int cotaInferior(ArrayList<Arista> grafo, int n, int m) {
  63.     int cuantos = 0, acumulado = 0;
  64.     int[] grado = new int[n];
  65.    
  66.     for (int i = 0; i < n; i++) {
  67.         grado[i] = 0;
  68.     }
  69.     //recorre la lista de aristas de mi grafo  
  70.     Iterator<Arista> it = grafo.iterator();
  71.  
  72.     //recorre cada arista y el indice de sus propiedades(desde-hasta) les agrega vecinos a la lista de nodos
  73.     while (it.hasNext()) {//hasta que se acabe :P
  74.            
  75.         Arista a = it.next();//el siguiente lo toma como arista a
  76.         //le agrega grados a los nodos que contiene dicha arista
  77.         grado[a.desde]++;
  78.         grado[a.hasta]++;
  79.     }
  80.  
  81.     /**Selecciona los conjuntos de vertices que completan la condicion de aristas totales
  82.      */
  83.     while (acumulado <= m) {//acumulado menor igual que aristas las ordena de acuerdo al grado
  84.         int max = 0;
  85.         int seleccionado = -1; // no posible
  86.         for (int i = 0; i < n; i++) {
  87.         if (grado[i] > max) {//si es mayor
  88.             seleccionado = i;//lo selecciona para ponerlo en el conjunto (seleccionado)
  89.             max = grado[i];//el maximo toma el valor del grado anterior
  90.         }
  91.         }
  92.         cuantos++;
  93.         //la cantidad de aristas acumulada es la cantidad de aristas que deben cubrirse osea el tota pero no sera la optima
  94.         acumulado += max;
  95.         //ahora modificamos el grado (cantidad de vecinos que posee) a 0 para que contemos ahora el siguiente mas grande
  96.         grado[seleccionado] = 0;
  97.     }
  98.     return cuantos;//cuantos vertices (nodos) asignamos al conjunto seleccionado
  99.     }
  100.    
  101.     /**
  102.        Crea el conjunto de solucion inicial
  103.        lo mismo que el procedimiento de la cota inferior pero en lugar de ordenarlo
  104.     */
  105.     public static ArrayList<Integer> inicial(ArrayList<Arista> grafo) { //lista de solucion inicial
  106.  
  107.     ArrayList<Integer> cubierta = new ArrayList<Integer>();//lista de la cubierta (conjunto seleccionado como solucion inicial)
  108.     ArrayList<Arista> copia = new ArrayList<Arista>();//lista de aristas copia de la cubierta
  109.     //de nuevo recorre el grafo
  110.     Iterator<Arista> it = grafo.iterator();
  111.     while (it.hasNext()) {
  112.         copia.add(it.next());//y lo agrega a la copia
  113.     }
  114.     //si el conjunto es mayor a 0
  115.     while (copia.size() > 0) {
  116.         int largo = copia.size();//se toma el largo del arreglo de aristas
  117.         //System.out.println("Faltan " + largo + " aristas por cubrir.");//el largo de las aristas
  118.         /**SELECCIONA*/
  119.         //selecciona un vertice al azar y lo toma en el conjunto seleccion
  120.         int seleccion = Arista.r.nextInt(largo);
  121.         //System.out.println(seleccion);
  122.         //de acuerdo a la posicion del elemento seleccionado verifica el arista
  123.         Arista a = copia.get(seleccion);
  124.         //cualquier vertice tenga este arista podra formar parte del conjunto de seleccion
  125.         if (Arista.r.nextBoolean()) {
  126.         seleccion = a.desde;
  127.         } else {
  128.         seleccion = a.hasta;
  129.         }
  130.         //crea la cubierta con los elementos seleccionados
  131.         cubierta.add(new Integer(seleccion));
  132.         it = grafo.iterator();
  133.         //lista de aristas eliminados
  134.         ArrayList<Arista> eliminados = new ArrayList<Arista>();
  135.         //agrega los eliminados tanto los vertices hasta y desde  a la lista
  136.         while (it.hasNext()) {
  137.         a = it.next();
  138.         //si los aristas forman parte de la seleccion los agrega a la lista eliminados
  139.         if (a.desde == seleccion || a.hasta == seleccion) {
  140.             eliminados.add(a);
  141.         }
  142.         }
  143.         copia.removeAll(eliminados); //de la copia quita los eliminados
  144.     }
  145.  
  146.     return cubierta;//regresa la cubierta seleccionada como solucion inicial
  147.     }
  148.     /** Metodo determina cota superior esta tiene que ser factible
  149.      */
  150.     public static int cotaSuperior(ArrayList<Arista> grafo) {
  151.     return (Arista.inicial(grafo)).size();//el tamaño de la cubierta de una solucion inicial :3
  152.     }
  153.     /**funcion objetivo
  154.      */
  155.     public static int objetivo(ArrayList<Integer> solucion) {
  156.     //el tamaño minimo de aristas esto seria el tamaño  minimo de una solucion
  157.     return solucion.size();
  158.     }
  159.     /**
  160.        Determina si la solucion es factible
  161.        Recibe la lista del conjunto inicial y la lista de aristas del grafo
  162.     */
  163.     public static boolean factible(ArrayList<Integer> solucion, ArrayList<Arista> grafo) {
  164.     Iterator<Arista> it = grafo.iterator();//recorre la lista de aristas del grafo
  165.     while (it.hasNext()) {
  166.         Arista a = it.next(); //
  167.         if (!(solucion.contains(new Integer(a.hasta)) || solucion.contains(new Integer(a.desde)))) {
  168.         //si la solucion no contiene(cubre) todas las aristas regresa un false no es factible
  169.         return false;
  170.         }
  171.     }
  172.     return true; //y si si pues si :D
  173.     }
  174.     /**Recibe una solucion inicial
  175.        Regresa el tamaño de la modificacion
  176.     */
  177.     public static ArrayList<Integer> modificacion(ArrayList<Integer> solucion, int n, boolean fact)//recibe solucion inicial
  178.     {
  179.     ArrayList<Integer> nueva = new ArrayList<Integer>();//copia de la solucion
  180.     int k = solucion.size();//tamanio de esta
  181.     int brinca = (fact || k == n) ? Arista.r.nextInt(k) : -1;//.-.
  182.     //si es factible o es igual al total de vertices quita un elemento al azar
  183.     for (int i = 0; i < k; i++) {
  184.         if (i != brinca) {
  185.         nueva.add(solucion.get(i));//agrega un nuevo vertice a la solucion
  186.         }
  187.     }
  188.     if (!fact && k < n) {//si no es factible y el tamaño de la solucion
  189.         while (true) {
  190.         Integer agrega = new Integer(Arista.r.nextInt(n));//agrega
  191.         if (nueva.indexOf(agrega) < 0) {
  192.             nueva.add(agrega);
  193.             break;
  194.         }
  195.         }
  196.     }
  197.  
  198.     return nueva;//regresa la nueva
  199.     }
  200.  
  201.     /**Busqueda tabu evita que se repitan los datos de la busqueda local
  202.        asi elimina reincidencias esta funcion aun no funciona :(
  203.      */
  204.     public static boolean tabu (ArrayList<ArrayList<Integer>>cola, ArrayList<Integer> solucion, int iter)
  205.     {
  206.     cola = null;
  207.     while(iter>0)
  208.         {
  209.         if(cola.contains(solucion))
  210.             {
  211.             //cont++;modifica();
  212.             return false;
  213.             }
  214.         else
  215.             {
  216.             cola.add(solucion);
  217.             if (cola.size()>=iter)
  218.                 {
  219.                 cola.remove(cola.get(0));
  220.                 }
  221.             }
  222.         }
  223.     return true;
  224.     }
  225.     /**Metaheurísticade genetica Basica
  226.        Incluye metodos
  227.        -poblacion
  228.        -cromosoma
  229.        -cubierta
  230.        -mutacion
  231.        -nacimiento
  232.        -ruleta para la seleccion aleatoria :| <- aun no funciona :(
  233.      */
  234.     //genetica <3
  235.  
  236.     /**
  237.        Metodo Poblacion
  238.        recibe el grafo y el tamaño de la pobacion
  239.        genera una poblacion a partir de soluciones iniciales
  240.      */
  241.     // genera una poblacion inicial
  242.     public static ArrayList<ArrayList<Integer>> poblacion(ArrayList <Arista> grafo,int tam)//verif
  243.     {
  244.     ArrayList<ArrayList<Integer>> lista= new ArrayList<ArrayList<Integer>>();//lista de listas de enteros
  245.     while(lista.size()<=tam)//mientras que la lista aun sea menor al tamaño
  246.         {
  247.         lista.add(Arista.inicial(grafo));//agrega una solucion inicial a la lista de poblacion
  248.         }
  249.     //System.out.println("Poblacion @_@");//flag
  250.     //Arista.imprime(lista);//imprime dicha lista //flag
  251.     return lista;//regresa la lista para utilizarla
  252.     }
  253.     //cromosoma
  254.     /**
  255.        metodo cromosoma transforma la solucion inicial en binario
  256.        recibe una solucion inicial (conjunto de vertices que forman la cubierta)
  257.        y la cantidad total de vertices
  258.        
  259.      */
  260.     public static ArrayList<String> cromosoma(ArrayList<Integer> seleccion, int cantidad) //cantidad total de vertices
  261.     {
  262.     ArrayList<String> ref = new ArrayList<String>();//cadena de caracteres 0 y 1 para representarlo
  263.     for(int i=0;i<cantidad;i++)//recorre el arreglo
  264.         {
  265.         if(seleccion.contains(i))//si contiene el numero referenciado al indice
  266.            {
  267.                ref.add("1");//agrega un uno
  268.            }
  269.            else
  270.                ref.add("0");//si no ... un cero
  271.         }
  272.     //Arista.imprime(ref);
  273.         return ref;//regresa el patron de referencia en binario
  274.     }
  275.  
  276.     /**metodo cubierta
  277.        recibe la referencia en binario de la solucion (conjunto de vertices que forman la cubierta)
  278.        
  279.      */
  280.     public static ArrayList<Integer> cubierta (ArrayList<String> cromosoma)
  281.     {
  282.     ArrayList<Integer> selection= new ArrayList<Integer>();
  283.     int pos =0;
  284.     for (int i=0;i<cromosoma.size();i++)
  285.         {
  286.         if((cromosoma.get(i)).equals("1"))//si es igual a 1
  287.             selection.add(pos);//agrega la "iteracion" actual a el conjunto cubierta
  288.         pos+=1;
  289.         }
  290.     //System.out.println("cubierta");//flag
  291.     //Arista.imprime(selection);//flag
  292.     return selection;//regresa el conjunto
  293.     }
  294.     /**
  295.        metodo mutacion
  296.        recibe una poblacion de soluciones iniciales
  297.        el total de vertices y el grafo
  298.        elije un individuo a cambiar atravez del metodo ruleta que selecciona
  299.     */
  300.    
  301.     public static void mutacion(ArrayList<ArrayList<Integer>>poblacion,int verticestotales,ArrayList<Arista> g)
  302.     {
  303.     int individuo = ruleta(poblacion);
  304.     ArrayList<Integer> id = poblacion.get(individuo);//selecciono el individuo que voy a mutar  
  305.     ArrayList<String> cr =cromosoma(id,verticestotales);
  306.     int ubic= Arista.r.nextInt(verticestotales);
  307.     if (cr.get(ubic)== "0")//si el individuo seleccionado es igual a 0
  308.         {
  309.         cr.set(ubic,"1");
  310.         }
  311.     else
  312.         {
  313.         cr.set(ubic,"0");
  314.         }
  315.     ArrayList <Integer> mutante = Arista.cubierta(cr);
  316.     //int objetivo = Arista.objetivo(mutante);
  317.     boolean fact = Arista.factible(mutante,g);
  318.     if(fact==true )
  319.         poblacion.add(mutante);
  320.     return;
  321.     }
  322.     /**
  323.        metodo ruleta elije un elemento al azar similando la funcion de una ruleta
  324.      */
  325.  
  326.     public static int ruleta (ArrayList<ArrayList<Integer>>poblacion)
  327.     {
  328.     int i=0;
  329.     int[] ruleta = new int[poblacion.size()];//se crea un arreglo del tamaño de la poblacion
  330.     int suma = 0;//suma en ceros
  331.     //System.out.println(poblacion.size(); //para esta funcion se nesecita que la funcion matanza este funcionando al 100%
  332.     for(i=0;i < poblacion.size();i++)//recorrer el arreglo
  333.         {
  334.         ruleta[i] = (poblacion.get(i)).size();//se realiza la suma de los elementos y cual es el valor de c/u
  335.         suma = suma + ruleta[i];
  336.         //System.out.println(i + " - " +ruleta[i] + " "+suma +" " );
  337.         }
  338.     int corte = Arista.r.nextInt(suma);//seleccion de un num al azar
  339.     suma = 0;
  340.    
  341.     for( i=0;i < poblacion.size();i++)
  342.         {
  343.         suma = suma + ruleta[i];
  344.         if(corte <= suma){
  345.             //  System.out.println("Estee> " +i);
  346.             //realiza la busqueda en los elementos y el primero que satisfaga la suma de el numero elegido sera el elemento seleccionado
  347.             break;
  348.         }
  349.         }
  350.     return i;//regresa un elemento de la poblacion
  351.     }
  352.     /**
  353.        metodo nacimiento se refiere al metodo cruzamiento en si el algoritmo realiza un cruze entre los cromosomas
  354.         de un elemento padre y un madre asi obtenemos un elemento hija y uno hijo y si los elementos son
  355.     factibles se agregan a la poblacion
  356.     este metodo aun no funciona :(
  357.      */        
  358.  
  359.     public static void nacimiento(ArrayList<ArrayList<Integer>>poblacion,int n,ArrayList<Arista> g)
  360.     {  
  361.     ArrayList<String> papa = cromosoma(poblacion.get(ruleta(poblacion)),n);
  362.     ArrayList<String> mama = cromosoma(poblacion.get(ruleta(poblacion)),n);
  363.    
  364.     ArrayList<String> hija = new ArrayList<String>();
  365.     ArrayList<String> hijo = new ArrayList<String>();
  366.     ArrayList<String> mich = new ArrayList<String>();
  367.    
  368.     Iterator<String> pa = papa.iterator();
  369.     Iterator<String> ma = mama.iterator();
  370.    
  371.     int i=0;
  372.     int pos = (int)(Math.random()*(n-1)+1);
  373.     while(pa.hasNext()){
  374.         if(i<pos){
  375.         hija.add(pa.next());//hija con primera corte de papa
  376.         i++;
  377.         }
  378.         else{
  379.         mich.add(pa.next());//segunda corte de papa
  380.         }
  381.     }
  382.     i=0;
  383.     while(ma.hasNext()){
  384.         if(i<pos){
  385.             hijo.add(ma.next());//hijo con primer corte de mama
  386.             i++;
  387.         }
  388.         else{
  389.             mich.add(ma.next());//segundo corte de mama
  390.         }
  391.         }
  392.  
  393.     Iterator<String> mita = mich.iterator();//primero esta la micha papa despues mama :3
  394.     i=0;
  395.     while(mita.hasNext()){
  396.         if(i<(mich.size()/2)){//la mitad de el ArrayList
  397.        
  398.         hijo.add(mita.next());//papa va para el hijo
  399.         i++;
  400.         }
  401.         else{
  402.         hija.add(mita.next());//mama va para hija
  403.         }
  404.     }
  405.     ArrayList <Integer> nina= Arista.cubierta(hija);
  406.     ArrayList <Integer> nino= Arista.cubierta(hijo);
  407.     //int objetivo = Arista.objetivo(nina);
  408.     boolean fact = Arista.factible(nina,g);
  409.     //System.out.println(fact);
  410.     if(fact==true )
  411.         poblacion.add(nina);
  412.     fact = Arista.factible(nino,g);
  413.     //System.out.println(fact);
  414.     if(fact==true )
  415.         poblacion.add(nino);
  416.     return ;
  417.     }
  418.     /**
  419.        metodo matanza devuelve las mejores soluciones basadas en la lista de la poblacion
  420.        ordenadas asi en lugar de devolver toda la poblacion primero la devuelve al tamaño inicial
  421.        y toma la mitad ultima mitad y la devuelve
  422.      */
  423.     public static ArrayList<ArrayList<Integer>> matanza(ArrayList<ArrayList<Integer>>poblacion)
  424.     {
  425.     int tam=poblacion.size();
  426.  
  427.         for(int i = 0; i<tam;i++)
  428.             {
  429.         Collections.sort((ArrayList<Integer>)poblacion.get(i));
  430.         }
  431.  
  432.     ArrayList<ArrayList<Integer>> pob= new  ArrayList<ArrayList<Integer>>();
  433.     ArrayList<Integer> fob = new ArrayList<Integer>();
  434.     //System.out.println("no repeat .l."); 
  435.     for(int i=0;i<tam;i++){
  436.         if(!pob.contains(poblacion.get(i))){
  437.         pob.add(poblacion.get(i));
  438.         }
  439.     }
  440.    
  441.     //ordenar de menor funcion objetivo a mayor
  442.     //crear una clase llamada solucion -.- contenga funcion objetivo y la misma para futuras mejoras
  443.         return pob;
  444.     }
  445.     /**
  446.        metodo generacion manda llamar a todos los metodos del algoritmo heuristico de genetica basica
  447.        recibe la lista de aristas de coneccion (grafo)y el tamaño de la poblacion de las generaciones
  448.      */
  449.     public static void generacion(ArrayList<Arista> grafo,int tam,int cruz,int mut)
  450.     {
  451.     ArrayList<ArrayList<Integer>> pob = poblacion(grafo,tam);
  452.     int n=pob.size();
  453.     for(int i=0;i<(int)Math.floor(tam * cruz);i++)
  454.         {
  455.         Arista.nacimiento(pob,n,grafo);
  456.         for (int m=0;m<(int)Math.floor(tam * mut);m++)
  457.             {
  458.             Arista.mutacion(pob,n,grafo);
  459.             }
  460.         }
  461.     Arista.matanza(pob);
  462.     //Arista.imprime(pob);
  463.     return;
  464.     }
  465.  
  466.     /**busqueda con algoritmo  colonia de hormigas
  467.        metodo aun no funciona ;(
  468.      */
  469.     /*tabla de feromonas ... hastable
  470.       mejor Solucion
  471.       feromona = solucion mejor y vale un poquito double*
  472.       alguien mas ==solucion  es buena solucion feromona +poquito;
  473.       evaporacion
  474.       ruleta para seleccion
  475.       soltar feromona donde se mejora
  476.       moviendo por si solo
  477.      
  478.  
  479.       //busqueda**/
  480.     public static ArrayList<Integer> busqueda(ArrayList<Arista> grafo, int n,int it,int re,int temperact, double enfriamiento) {
  481.     ArrayList<Integer> mejorSol = null;
  482.     //  int intentos =0;
  483.     //boolean TAB;//busqueda tabu*
  484.     //define la mejor solucion como nula para que cualquiera pueda mejorarla
  485.     int mejorObj = n;//tamaño de la cubierta inicial seria el total de nodos en el grafo idem
  486.     ArrayList<Integer> lista = new ArrayList<Integer>();
  487.    
  488.     for (int reinicio = 0; reinicio < re; reinicio++) {//pasos de reinicio
  489.         ArrayList<Integer> solucion = Arista.inicial(grafo);//solucion inicial
  490.         int obj = Arista.objetivo(solucion);//objetivo de solucion
  491.         //temperact=1000;//busqueda recocido simulado
  492.         for (int iter = 0; iter < it; iter++) {//iteraciones de comparar
  493.         boolean fact = Arista.factible(solucion, grafo);//la solucion es factible
  494.         ArrayList<Integer> otrasolucion = modificacion(solucion, n, fact); //modifica la solucion inicial a otra solucion
  495.         boolean otraFact = Arista.factible(otrasolucion, grafo);//verifica que sea factible
  496.         int otraObj = Arista.objetivo(otrasolucion);//el objetivo de esta
  497.         int temp= mejorObj - obj;//busqueda recocido simulado
  498.         if (otraFact && otraObj <= obj) {//si la otra es factible y el objetivo es menor igual
  499.             solucion = otrasolucion;//ahora cambian de papel
  500.             obj = otraObj;
  501.             fact = otraFact;
  502.             try{
  503.             if(Arista.r.nextDouble() <= Math.exp(temp/temperact))//busqueda recocido simulado
  504.             {
  505.                 temperact*= enfriamiento;
  506.                 lista.add(otraObj);//agrega a la lista la funcion objetivo
  507.                 //System.out.println("RS "+ otraObj+ (fact ? "  factible" : "  no factible"));
  508.             }
  509.             }
  510.             catch(Exception e)
  511.             {
  512.                 System.out.println("BYZERO"+e+"var: temperact FAIL ");
  513.  
  514.             }
  515.             //el obj definir el candidato ._.
  516.            
  517.             if (obj < mejorObj) {//si es mejor que el mejor objetivo
  518.             mejorObj = obj;
  519.             mejorSol = new ArrayList<Integer>();//la agrega como mejor solucion
  520.             Iterator<Integer> ve = solucion.iterator();
  521.             while (ve.hasNext()) {
  522.                 mejorSol.add(ve.next());
  523.             }
  524.             }
  525.         }
  526.         lista.add(mejorObj);//agrega la mejor la minima cobertura
  527.         //System.out.println(reinicio + " " +iter + " " + obj + " " + (fact ? "factible" : "no factible")) ;
  528.         }
  529.     }
  530.     //Arista.imprime(lista);
  531.     return mejorSol;//regresa la mejor solucion
  532.     }
  533.     public static void main(String[] args) {//main
  534.        
  535.     File archivo = null;
  536.         FileReader fr = null;
  537.         BufferedReader br = null;
  538.         String linea = null;
  539.     int n=0,d=0,h=0; //num de vertices/ hasta /desde
  540.     double p= 0.0;//densidad
  541.     ArrayList<Arista> grafo = new ArrayList<Arista>();         
  542.     //Cargamos el archivo de la ruta relativa
  543.     archivo = new File(args[0]);
  544.         try {
  545.         //Cargamos el objeto FileReader
  546.             fr = new FileReader(archivo);
  547.         //Creamos un buffer de lectura
  548.         br = new BufferedReader(fr);
  549.  
  550.         //Leemos hasta que se termine el archivo
  551.         while ((linea = br.readLine()) != null) {
  552.         //Presentamos los datos
  553.         //                System.out.println(linea);//imprime
  554.  
  555.         if(linea.indexOf("-") >= 0)
  556.             {
  557.             //entra cuando hay una coma en el string                                                
  558.             d = Integer.parseInt(linea.substring(0,linea.indexOf("-")));
  559.             h = Integer.parseInt(linea.substring(linea.indexOf("-")+1));
  560.             grafo.add(new Arista(d,h));
  561.             }
  562.         }
  563.     Arista.imprime(grafo);     
  564.     }
  565.     //Capturamos las posibles excepciones
  566.          catch (FileNotFoundException e){
  567.         System.out.println("FILENOTFOUND");
  568.         //si no encuentra el archivo ejecutara
  569.         //if not arguments name the file
  570.         n = Integer.parseInt(args[0]);//vertices
  571.         p = Double.parseDouble(args[1]);//densidad
  572.         grafo = Arista.genera(n, p);//genera las conexiones
  573.         Arista.imprime(grafo);//imprime la lista
  574.  
  575.         System.out.println("numde vertices "+n);
  576.         System.out.println("numde densidad "+p);
  577.         try{
  578.         FileWriter test = new FileWriter("instancia.txt");
  579.         PrintWriter pw =new PrintWriter(test);
  580.         for(int i=0;i<grafo.size();i++){
  581.             String algo =(grafo.get(i)).toString();
  582.         pw.println(algo);
  583.         }
  584.         test.close();
  585.         }
  586.         catch(Exception e3)
  587.         {
  588.             System.out.println("D:->"+e);
  589.         }
  590.     } catch (IOException e){
  591.         System.out.println("fybbyIO");
  592.     }
  593.     finally {
  594.         try {
  595.         if (fr != null) {
  596.         System.out.println("Ha finalizado la lectura del archivo");
  597.         fr.close();
  598.        
  599.         }
  600.         }catch (Exception e2) {
  601.                 e2.printStackTrace();
  602.         }
  603.     }
  604.     int m = grafo.size();//m=tamaño de la lista de aristas generadas
  605.     System.out.println("Se generaron " + m + " aristas.");//lo imprime
  606.     System.out.println("#instancia");
  607.     //Arista.imprime(grafo);//imprime la lista
  608.     //imprime los rangos entre cuales estara la solucion optima
  609.     System.out.println("Cota inferior: " + Arista.cotaInferior(grafo, n, m) + ".");//imprime la cota inferior de la lista de aristas
  610.     System.out.println("Cota superior: " + Arista.cotaSuperior(grafo) + ".");//imprime la cota superior de la lista de aristas
  611.     Arista.busqueda(grafo, n ,5 ,7,1000,0.3);//parametros=grafo,numero de vertices,iteraciones,reinicios,temperaturaactual,tasa de enfriamient
  612.     Arista.generacion(grafo,10,5,5);//parametros=grafo taamaño de poblacion cant de cruzamientos y mutaciones
  613.     return;
  614.     }  
  615. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement