Пример #1
0
 /// <summary>
 /// Metodo que muta el cromosoma del inidviduo
 /// </summary>
 /// <param name="hijo"></param>
 public void Mutacion(Individuo2 hijo)
 {
     if (NumeroRandom(0, 20) != 19)
     {
         int valor = NumeroRandom(0, 7);
         hijo.elementos [valor] = hijo.elementos[valor] * -1;
     }
 }
Пример #2
0
        /// <summary>
        /// Metodo que remplaza la población
        /// </summary>
        /// <param name="listaPoblacion">Población original</param>
        /// <param name="listaReemplazo">Población que remplazara</param>
        public void Elitismo()
        {
            Individuo2 individuo = ObtenerIndividuo(nuevaPoblacion, NumeroRandom(0, 101));

            nuevaPoblacion.Remove(individuo);
            poblacion.Clear();

            foreach (Individuo2 elemento in nuevaPoblacion)
            {
                poblacion.Add(elemento);
            }

            nuevaPoblacion.Clear();
        }
Пример #3
0
        /// <summary>
        /// Metodo que obtiene el mejor individuo de los padres
        /// </summary>
        /// <returns></returns>
        public Individuo2 ObtenerMejorPadres(List <Individuo2> listaDisponible)
        {
            Individuo2 mejorPadre = ObtenerIndividuo(listaDisponible, 1);

            foreach (Individuo2 elemento in listaDisponible)
            {
                if ((mejorPadre.GetAptitud() > elemento.GetAptitud()) &&
                    (mejorPadre.GetRestricciones() >= elemento.GetRestricciones()))
                {
                    mejorPadre = elemento;
                }
            }

            return(mejorPadre);
        }
Пример #4
0
        /// <summary>
        /// Metodo que Obtiene un padre aleatorio de
        /// </summary>
        /// <returns></returns>
        public Individuo2 PadreAleatorio()
        {
            Boolean    bandera  = true;
            Individuo2 elemento = null;

            while (bandera)
            {
                elemento = ObtenerIndividuo(posiblesPadres, NumeroRandom(1, 11));

                if (!padres.Contains(elemento))
                {
                    bandera = false;
                }
            }

            return(elemento);
        }
Пример #5
0
        /// <summary>
        /// Metodo que devuelve el mejor Inidividuo de la poblacion dada
        /// </summary>
        /// <param name="listaDisponible">Lista de población dada</param>
        /// <returns>Mejor individuo de la poblacion</returns>
        public Individuo2 ObtenerMejorPoblacion(List <Individuo2> listaDisponible)
        {
            if (this.mejor == null)
            {
                this.mejor = listaDisponible [0];
            }

            foreach (Individuo2 elemento in listaDisponible)
            {
                if ((this.mejor.GetAptitud() > elemento.GetAptitud()) &&
                    (this.mejor.GetRestricciones() >= elemento.GetRestricciones()))
                {
                    this.mejor = elemento;
                }
            }

            return(this.mejor);
        }
Пример #6
0
        /// <summary>
        /// Metodo de cruza
        /// </summary>
        public void CruzaPadres()
        {
            int        cMin = 0, cMax = 0;
            Individuo2 hijo1 = new Individuo2();
            Individuo2 hijo2 = new Individuo2();
            Individuo2 papa1 = ObtenerIndividuo(padres, 1);
            Individuo2 papa2 = ObtenerIndividuo(padres, 2);

            padres.Clear();

            for (int i = 0; i < 7; i++)
            {
                if (papa1.elementos [i] > papa2.elementos [i])
                {
                    cMax = papa1.elementos [i];
                    cMin = papa2.elementos [i];
                }
                else
                {
                    cMax = papa2.elementos [i];
                    cMin = papa1.elementos [i];
                }

                int resultante = cMax - cMin;
                int alpha      = NumeroRandom(0, 2);
                hijo1.elementos.Add(
                    NumeroRandom(
                        (cMin - (resultante * alpha)),
                        (cMax + (resultante * alpha))));
                hijo2.elementos.Add(
                    NumeroRandom(
                        (cMin - (resultante * alpha)),
                        (cMax + (resultante * alpha))));
            }

            Mutacion(hijo1);
            Mutacion(hijo2);
            hijo1.CalcularAptitud();
            hijo2.CalcularAptitud();
            nuevaPoblacion.Add(hijo1);
            nuevaPoblacion.Add(hijo2);
        }