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