//Constructor que recibe el minimo y maximo de valores posibles y el numero de particiones //Se calcula la longitud del gen y el incremento entre intervalos //Se crea un gen de manera aleatoria public Cromosoma(int min, int max, int P) { this.min = min; this.max = max; this.P = P; size = (int)Math.Ceiling(Math.Log(P, 2)); dx = Math.Abs(min - max); dx = dx / P; gene = new Gene(size); }
//Operador de AG: cruza, tipo: 1 punto //Cruza a este individuo con otro, intercalando apartir del punto de cruza una parte del cromosoma //Regresa dos individuos, uno más parecido el padre y otro mas parecido a la madre public Individuo[] CruzaPor1Punto(Individuo individuo, int puntoDeCruza) { Gene genePadre = this.cromosoma.getGene(); Gene geneMadre = individuo.cromosoma.getGene(); Individuo[] hijos = new Individuo[2]; string hijo1 = genePadre.GetBinario().Substring(0, puntoDeCruza) + geneMadre.GetBinario().Substring(puntoDeCruza); string hijo2 = geneMadre.GetBinario().Substring(0, puntoDeCruza) + genePadre.GetBinario().Substring(puntoDeCruza); hijos[0] = new Individuo(hijo1, valorMinimo, valorMaximo, particiones); hijos[1] = new Individuo(hijo2, valorMinimo, valorMaximo, particiones); return(hijos); }