/// <summary> /// Obtiene los mejores N individuos de la población actual. /// </summary> /// <param name="limit">n individuos</param> /// <returns></returns> public List <Cromosoma> ObtenerLosPeores(int limit) { LstCromosomas.Sort(); List <Cromosoma> lstCromosomas = new List <Cromosoma>(); for (int i = (LstCromosomas.Count - 1) - limit; i < LstCromosomas.Count; i++) { lstCromosomas.Add(LstCromosomas[i]); } return(lstCromosomas); }
/// <summary> /// Obtiene los peores N individuos de la población actual. /// </summary> /// <param name="limit">n individuos</param> /// <returns>lista con los mejores N individuos</returns> public List <Cromosoma> ObtenerLosMejores(int limit) { LstCromosomas.Sort(); List <Cromosoma> lstCromosomas = new List <Cromosoma>(); for (int i = 0; i < limit; i++) { lstCromosomas.Add(LstCromosomas[i]); } return(lstCromosomas); }
/// <summary> /// Encuentra todos los individuos de la lista 1 que se encuentren en la población actual y los sustituye por la lista 2. /// </summary> /// <param name="lst1">lista auxiliar para buscar en la población</param> /// <param name="lst2">lista que sustituirá los individuos de la lista 1 que se encuentren en la población actual</param> public void SustituirPoblacion(List <Cromosoma> lst1, List <Cromosoma> lst2) { if (lst1 != null && lst2 != null && lst1.Count.Equals(lst2.Count)) { foreach (Cromosoma cromosoma in lst1) { int index = LstCromosomas.IndexOf(cromosoma); if (index >= 0) { LstCromosomas[index] = lst2[0]; lst2.RemoveAt(0); } } } }
/// <summary> /// Obtiene N cantidad de individuos de la población de forma aleatoria /// </summary> /// <param name="cantidad">cantidad de individuos que necesite obtener</param> /// <param name="random">clase generadora de números aleatorios</param> /// <returns></returns> public List <Cromosoma> ObtenerIndividuosAleatorios(int cantidad, Random random) { LstCromosomas.Sort(); List <int> lstPosiciones = new List <int>(); List <Cromosoma> lstCromosomas = new List <Cromosoma>(); for (int i = 0; i < cantidad; i++) { bool success = false; while (!success) { int index = random.Next(0, LstCromosomas.Count - 1); if (!lstPosiciones.Contains(index)) { success = true; lstPosiciones.Add(index); lstCromosomas.Add(LstCromosomas[index]); } } } return(lstCromosomas); }