public void generarLosNuevosPadresDeLaPatria(int poblacion) { if (inicio == null) { Console.WriteLine("No hay nada"); } else { double[] valores = generarNumerosAleatorios(poblacion); // Console.WriteLine("\n\n\t\t\t\t ---Padres ---\n"); Individuo aux = inicio; Padre auxPadre, nuevo; /*Console.Write("Los numeros aleatorios son: "); * for (int i = 0; i < valores.Length; i++) * Console.Write(valores[i] + " "); * Console.Write("\n\n");*/ for (int i = 0; i < poblacion; i++) { while (aux != null) { if (aux.acumulado > valores[i]) { if (padres == null) { padres = new Padre(aux.bites); } else { nuevo = new Padre(aux.bites); auxPadre = padres; while (auxPadre.siguiente != null) { auxPadre = auxPadre.siguiente; } auxPadre.siguiente = nuevo; } break; } aux = aux.siguiente; } aux = inicio; } //imprimir auxPadre = padres; /*int n = 1; * while(auxPadre != null) * { * Console.WriteLine("Padre " + n +" = " + calcular_x(auxPadre.bite) + " ----> " + auxPadre.bite); * * n++; * auxPadre = auxPadre.siguiente; * } */ } }
public void reset_1() { combinaciones = null; padres = null; mejores = null; cant_obj = 0; }
public void reset_2() { objetos = null; combinaciones = null; padres = null; mejores = null; capacidad = 0; respuesta = ""; cant_obj = 0; }
private Mochila() { objetos = null; combinaciones = null; padres = null; mejores = null; capacidad = 0; respuesta = ""; cant_obj = 0; }
public void generarLosNuevosPadresDeLaPatria(int poblacion) { if (combinaciones == null) { Console.WriteLine("No hay nada"); } else { double[] valores = generarNumerosAleatorios(poblacion); Opcion aux = combinaciones; Padre auxPadre, nuevo; for (int i = 0; i < poblacion; i++) { while (aux != null) { if (aux.acumulado > valores[i]) { if (padres == null) { padres = new Padre(aux.combinacion); } else { nuevo = new Padre(aux.combinacion); auxPadre = padres; while (auxPadre.siguiente != null) { auxPadre = auxPadre.siguiente; } auxPadre.siguiente = nuevo; } break; } aux = aux.siguiente; } aux = combinaciones; } auxPadre = padres; } }
public void cruze(double p_cruce, int poblacion) //metodo para realizar el cruce { //Console.WriteLine("\n\t\t\t\t ----Cruce: " + p_cruce + " | Nueva poblacion---- "); Padre auxPadre = padres, padre1, padre2; Individuo aux, nuevo; //nodo para crear a los hijos String[] a_cambiar = new String[2]; //string para almacenar los bit a cambiar; Random aleatorio = new Random(); double[] chance = generarNumerosAleatorios(poblacion / 2); int uno, dos; //numeros para indice de corte inicio = null; for (int i = 0; i < chance.Length; i++) { if (auxPadre != null) { //asignacion de la pareja padre1 = auxPadre; auxPadre = auxPadre.siguiente; padre2 = auxPadre; if (chance[0] <= p_cruce) //se va a realizar el cruce { uno = aleatorio.Next(0, 8); dos = aleatorio.Next(0, 8); if (uno < dos) { //obtener bits de los padres for (int j = 0; j < 8; j++) { if (j >= uno && j <= dos) { a_cambiar[1] += padre1.bite[j]; a_cambiar[0] += padre2.bite[j]; } else { a_cambiar[0] += padre1.bite[j]; a_cambiar[1] += padre2.bite[j]; } } } else { for (int j = 0; j < 8; j++) { if (j <= dos || j >= uno) { a_cambiar[1] += padre1.bite[j]; a_cambiar[0] += padre2.bite[j]; } else { a_cambiar[0] += padre1.bite[j]; a_cambiar[1] += padre2.bite[j]; } } } if (inicio == null) { nuevo = new Individuo(a_cambiar[0]); inicio = nuevo; nuevo.siguiente = new Individuo(a_cambiar[1]); } else { aux = inicio; while (aux.siguiente != null) { aux = aux.siguiente; } nuevo = new Individuo(a_cambiar[0]); aux.siguiente = nuevo; nuevo.siguiente = new Individuo(a_cambiar[1]); } } else //no hay cruce { if (inicio == null) { nuevo = new Individuo(padre1.bite); inicio = nuevo; nuevo.siguiente = new Individuo(padre2.bite); } else { aux = inicio; while (aux.siguiente != null) { aux = aux.siguiente; } nuevo = new Individuo(padre1.bite); aux.siguiente = nuevo; nuevo.siguiente = new Individuo(padre2.bite); } } a_cambiar[0] = ""; a_cambiar[1] = ""; auxPadre = auxPadre.siguiente; } } //eliminamos padres padres = null; //imprimir nuevo /* * aux = inicio; * int num = 1; * * while (aux != null) * { * Console.WriteLine("Hijo " + num + "° -> " + aux.bites); * num++; * aux = aux.siguiente; * } */ }
ElArca mejores; //variable que contendrá la lista de los resultados public Operaciones() //constructor para iniciar lista { inicio = null; padres = null; mejores = null; }
public void cruze(double p_cruce, int poblacion) //metodo para realizar el cruce { //Console.WriteLine("\n\t\t\t\t ----Cruce: " + p_cruce + " | Nueva poblacion---- "); Padre auxPadre = padres, padre1, padre2; Opcion aux, nuevo; //nodo para crear a los hijos String[] a_cambiar = new String[2]; //string para almacenar los bit a cambiar; Random aleatorio = new Random(); double[] chance = generarNumerosAleatorios(poblacion / 2); int uno, dos; //numeros para indice de corte combinaciones = null; for (int i = 0; i < chance.Length; i++) { if (auxPadre != null) { //asignacion de la pareja padre1 = auxPadre; auxPadre = auxPadre.siguiente; padre2 = auxPadre; if (chance[0] <= p_cruce) //se va a realizar el cruce { uno = aleatorio.Next(0, 8); dos = aleatorio.Next(0, 8); if (uno < dos) { //obtener bits de los padres for (int j = 0; j < auxPadre.bite.Length - 1; j++) { if (j >= uno && j <= dos) { a_cambiar[1] += padre1.bite[j]; a_cambiar[0] += padre2.bite[j]; } else { a_cambiar[0] += padre1.bite[j]; a_cambiar[1] += padre2.bite[j]; } } } else { for (int j = 0; j < auxPadre.bite.Length - 1; j++) { if (j <= dos || j >= uno) { a_cambiar[1] += padre1.bite[j]; a_cambiar[0] += padre2.bite[j]; } else { a_cambiar[0] += padre1.bite[j]; a_cambiar[1] += padre2.bite[j]; } } } if (combinaciones == null) { nuevo = new Opcion(a_cambiar[0]); combinaciones = nuevo; nuevo.siguiente = new Opcion(a_cambiar[1]); } else { aux = combinaciones; while (aux.siguiente != null) { aux = aux.siguiente; } nuevo = new Opcion(a_cambiar[0]); aux.siguiente = nuevo; nuevo.siguiente = new Opcion(a_cambiar[1]); } } else //no hay cruce { if (combinaciones == null) { nuevo = new Opcion(padre1.bite); combinaciones = nuevo; nuevo.siguiente = new Opcion(padre2.bite); } else { aux = combinaciones; while (aux.siguiente != null) { aux = aux.siguiente; } nuevo = new Opcion(padre1.bite); aux.siguiente = nuevo; nuevo.siguiente = new Opcion(padre2.bite); } } a_cambiar[0] = ""; a_cambiar[1] = ""; auxPadre = auxPadre.siguiente; } } padres = null; }
public Padre(String _bite) { siguiente = null; bite = _bite; }