Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
 /// <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);
             }
         }
     }
 }
Ejemplo n.º 4
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);
        }