poder elegir al azar una de estas soluciones y mutarlas o cruzarlas y generar mas nuevas soluciones para despues eliminar y solo conservar las generaciones que contengan las mejores soluciones este es el avance de la clase.
// genera una poblacion inicial public static ArrayList<ArrayList<Integer>> poblacion(ArrayList <Arista> grafo,int tam)//verif { ArrayList<ArrayList<Integer>> lista= new ArrayList<ArrayList<Integer>>(); while(lista.size()<=tam) { lista.add(Arista.inicial(grafo)); } //System.out.println("Poblacion @_@"); // Arista.imprime(lista); return lista; } //cromosoma public static ArrayList<String> cromosoma(ArrayList<Integer> seleccion, int cantidad) //cantidad total de vertices { ArrayList<String> ref = new ArrayList<String>(); for(int i=0;i<cantidad;i++) { if(seleccion.contains(i)) { ref.add("1"); } else ref.add("0"); } //Arista.imprime(ref); return ref; } public static ArrayList<Integer> cubierta (ArrayList<String> cromosoma) { ArrayList<Integer> selection= new ArrayList<Integer>(); int pos =0; for (int i=0;i<cromosoma.size();i++) { if((cromosoma.get(i)).equals("1")) selection.add(pos); pos+=1; } //System.out.println("cubierta"); //Arista.imprime(selection); return selection; } public static void mutacion(ArrayList<ArrayList<Integer>>poblacion,int verticestotales,ArrayList<Arista> g) { int individuo = Arista.r.nextInt(poblacion.size()); ArrayList<Integer> id = poblacion.get(individuo); //System.out.println("id"); //Arista.imprime(id); ArrayList<String> cr =cromosoma(id,verticestotales); int ubic= Arista.r.nextInt(verticestotales); if (cr.get(ubic)== "0")//si el individuo seleccionado es igual a 0 { cr.set(ubic,"1"); } else { cr.set(ubic,"0"); } //System.out.println("cadenita"); //Arista.imprime(cr); ArrayList <Integer> mutante = Arista.cubierta(cr); // System.out.println("mutante"); //Arista.imprime(mutante); int objetivo = Arista.objetivo(mutante); boolean fact = Arista.factible(mutante,g); if(fact==true ) poblacion.add(mutante); return; } public static void nacimiento(ArrayList<ArrayList<Integer>>poblacion,int n,ArrayList<Arista> g) { int i=0; ArrayList<String> papa = cromosoma(poblacion.get(Arista.r.nextInt(poblacion.size())),n); ArrayList<String> mama = cromosoma(poblacion.get(Arista.r.nextInt(poblacion.size())),n); int pos = Arista.r.nextInt(n); //mama ArrayList<String> hija=null; ArrayList<String> hijo=null; Iterator<String> pa = papa.iterator();//recorre Iterator<String> ma = mama.iterator(); while (pa.hasNext() && ma.hasNext()) { if(i<pos) { hija.add(pa.next()); hijo.add(ma.next()); i++; } else { hija.add(ma.next()); hijo.add(pa.next()); i++; } } System.out.println("mama"); Arista.imprime(mama); System.out.println("papa"); Arista.imprime(papa); System.out.println("hija"); Arista.imprime(hija); System.out.println("hijo"); Arista.imprime(hijo); poblacion.add(hija); poblacion.add(hijo); return ; }
Faltó la matanza y las gráficas. Van 6 pts.
ResponderEliminar