예제 #1
0
        public Individuo Ejecuta()
        {
            Random rand = new Random();
            int indA = 0, indB = 0;
            Cromosoma recombinado;
            Individuo nuevoIndividuo;
            // Repetir 'pasos' veces:
            for (int i = 0; i < pasos; i++)
            {
                // Seleccionar dos individuos aleatoriamente.
                indA=rand.Next(poblacion.NumIndividuos);
                do
                {
                  indB = rand.Next(poblacion.NumIndividuos);
                } while (indA == indB);
                // Tomar sus cromosomas y recombinarlos usando void Recombinar(cr1,cr2)
                recombinado = Recombinar(poblacion[indA].Cromosoma, poblacion[indB].Cromosoma);

                // Mutar el resultado con la probabilidad indicada.
                recombinado.Mutar(probMutacion);

                // Crear un individuo con el cromosoma resultante que se insertará en la población reemplazando al peor individuo
                nuevoIndividuo = new Individuo(recombinado, problema);
                poblacion.Reemplaza(nuevoIndividuo);

            }
            // Devolver el mejor individuo de la población después de la terminación del bucle
            return poblacion.MejorIndividuo();
        }
예제 #2
0
        /// <summary>
        /// Crea un array de Individuos de tamano tP.
        /// </summary>
        /// <param name="tP">Numero de individuos de la publiacion</param>
        /// <param name="tI">Longitud del cromosoma de los individuos</param>
        /// <param name="pr">Metodo a usar para calcular el fitness de cada individuo</param>
        public Poblacion(int tP, int tI, IProblema pr)
        {
            individuos = new Individuo[tP];

            for (int i = 0; i < individuos.Length; i++)
            {
                individuos[i] = new Individuo(tI, pr);
            }
        }
예제 #3
0
        /// <summary>
        /// Busca el peor individuo de la poblacion y lo reemplaza por el individuo
        /// pasado como parametro.
        /// </summary>
        /// <param name="individuo">Individuo reemplazante</param>
        public void Reemplaza(Individuo individuo)
        {
            int menorFitness = individuo.Cromosoma.Longitud;
            for (int i = 0; i < individuos.Length; i++)
            {
                if (individuos[i].Fitness < menorFitness) { menorFitness = i; }
            }

            if (individuos[menorFitness].Fitness < individuo.Fitness)
            {
                individuos[menorFitness] = individuo;
            }
        }