private string GeneraGanadores(List <EntIndividuo> lstEntIndividuo) { string ganadores = string.Empty; for (int i = 0; i < lstEntIndividuo.Count; i++) { EntIndividuo oEntIndividuo1 = lstEntIndividuo[i]; for (int j = 0; j < lstEntIndividuo.Count; j++) { EntIndividuo oEntIndividuo2 = lstEntIndividuo[j]; if (oEntIndividuo1.rival == oEntIndividuo2.identificador) { if (oEntIndividuo1.valorFX >= oEntIndividuo2.valorFX) { ganadores += oEntIndividuo1.identificador.ToString() + ","; } else { ganadores += oEntIndividuo2.identificador.ToString() + ","; } } } } return(ganadores); }
/// <summary> /// Genera la población inicial /// </summary> /// <param name="cantidadIndividuos">cantidad de individuos que integrarán la población</param> /// <returns></returns> public List <EntIndividuo> GeneraArreglo(int cantidadIndividuos) { List <EntIndividuo> lstEntIndividuo = new List <EntIndividuo>(); for (int i = 0; i < cantidadIndividuos; i++) { EntIndividuo oEntIndividuo = new EntIndividuo(); oEntIndividuo.identificador = i + 1; oEntIndividuo.individuo = this.GeneraIndividuo(); oEntIndividuo.valor = this.CalculaValor(oEntIndividuo.individuo); oEntIndividuo.valorFX = oEntIndividuo.valor * oEntIndividuo.valor; oEntIndividuo.puntoCruce = this.GeneraAleatorio(1, 3); for (int j = 0; j < 1; j++) { oEntIndividuo.rival = this.GeneraAleatorio(1, cantidadIndividuos); if (oEntIndividuo.identificador == oEntIndividuo.rival) { j--; } } oEntIndividuo.cadenaCompleta = this.GeneraCadenaCompeta(oEntIndividuo); lstEntIndividuo.Add(oEntIndividuo); } return(lstEntIndividuo); }
private List <EntIndividuo> GeneraHijos(List <EntIndividuo> lstEntIndividuoPadres, int cantidadIndividuos) { List <EntIndividuo> lstEntIndividuoHijos = new List <EntIndividuo>(); int identificador = 0; for (int i = 0; i < lstEntIndividuoPadres.Count; i++) { EntIndividuo oEntIndividuoPadre1 = lstEntIndividuoPadres[i]; for (int j = 0; j < lstEntIndividuoPadres.Count; j++) { EntIndividuo oEntIndividuoPadre2 = lstEntIndividuoPadres[j]; if (oEntIndividuoPadre1.identificador != oEntIndividuoPadre2.identificador && oEntIndividuoPadre2.esValidado == false) { lstEntIndividuoPadres[j].esValidado = true; EntIndividuo oEntIndividuoHijo1 = new EntIndividuo(); EntIndividuo oEntIndividuoHijo2 = new EntIndividuo(); identificador++; oEntIndividuoHijo1.identificador = identificador; oEntIndividuoHijo1.individuo += oEntIndividuoPadre1.individuo.Substring(0, oEntIndividuoPadre1.puntoCruce); oEntIndividuoHijo1.individuo += oEntIndividuoPadre2.individuo.Substring(oEntIndividuoPadre1.puntoCruce - 1, oEntIndividuoPadre1.individuo.Length - oEntIndividuoPadre1.puntoCruce); oEntIndividuoHijo1.valor = this.CalculaValor(oEntIndividuoHijo1.individuo); oEntIndividuoHijo1.valorFX = oEntIndividuoHijo1.valor * oEntIndividuoHijo1.valor; oEntIndividuoHijo1.puntoCruce = this.GeneraAleatorio(1, 3); for (int x = 0; x < 1; x++) { oEntIndividuoHijo1.rival = this.GeneraAleatorio(1, cantidadIndividuos); if (oEntIndividuoHijo1.identificador == oEntIndividuoHijo1.rival) { x--; } } oEntIndividuoHijo1.cadenaCompleta = this.GeneraCadenaCompeta(oEntIndividuoHijo1); identificador++; oEntIndividuoHijo2.identificador = identificador; oEntIndividuoHijo2.individuo += oEntIndividuoPadre2.individuo.Substring(0, oEntIndividuoPadre1.puntoCruce); oEntIndividuoHijo2.individuo += oEntIndividuoPadre1.individuo.Substring(oEntIndividuoPadre1.puntoCruce - 1, oEntIndividuoPadre1.individuo.Length - oEntIndividuoPadre1.puntoCruce); oEntIndividuoHijo2.valor = this.CalculaValor(oEntIndividuoHijo2.individuo); oEntIndividuoHijo2.valorFX = oEntIndividuoHijo2.valor * oEntIndividuoHijo1.valor; oEntIndividuoHijo2.puntoCruce = this.GeneraAleatorio(1, 3); for (int x = 0; x < 1; x++) { oEntIndividuoHijo2.rival = this.GeneraAleatorio(1, cantidadIndividuos); if (oEntIndividuoHijo2.identificador == oEntIndividuoHijo2.rival) { x--; } } oEntIndividuoHijo2.cadenaCompleta = this.GeneraCadenaCompeta(oEntIndividuoHijo2); lstEntIndividuoHijos.Add(oEntIndividuoHijo1); lstEntIndividuoHijos.Add(oEntIndividuoHijo2); } } } return(lstEntIndividuoHijos); }
private string GeneraCadenaCompeta(EntIndividuo oEntIndividuo) { string cadena = " | " + oEntIndividuo.identificador.ToString("00") + " | " + oEntIndividuo.individuo + " | " + oEntIndividuo.valor.ToString("000") + " | " + oEntIndividuo.valorFX.ToString("000") + " | " + oEntIndividuo.rival.ToString("00") + " | " + oEntIndividuo.puntoCruce.ToString("00") + " |"; return(cadena); }