예제 #1
0
        public void Configura(int semilla, string cadOriginal, int numIndividuos, int numCiclos, int Promedio)
        {
            azar = new Random(semilla);

            //Crea la población con individuos generados al azar (dependiendo de la semilla)
            Individuos.Clear();
            Cadena objCad = new Cadena();

            for (int cont = 1; cont <= numIndividuos; cont++)
            {
                Individuos.Add(objCad.CadenaAzar(azar, cadOriginal.Length));
            }

            this.numCiclos   = numCiclos;
            this.Promedio    = Promedio;
            this.cadOriginal = cadOriginal;
        }
예제 #2
0
        static void Main()
        {
            Random azar = new Random(); //Usado para la semilla del generador de aleatorios de la clase población

            //Cadena que será buscada por los algoritmos genéticos
            Cadena objCad = new Cadena();
            string cadOriginal;

            int Pruebas         = 50;     //Total de veces que se cambiará la cadena y se repetirá todo el proceso
            int TotalIndividuos = 2000;   //Total de individuos de la población
            int TotalCiclos     = 100000; //Total de ciclos que hará por cada operador
            int Promedio        = 1000;   //Cada cuanto calcula el promedio de la población
            int TamCadena       = 90;     //Tamaño de la cadena a buscar

            Poblacion objPoblacion = new Poblacion();

            List <double> Muta      = new List <double>(); //Lista de promedios de adaptación del operador de mutación
            List <double> Cruce     = new List <double>(); //Lista de promedios de adaptación del operador de cruce
            List <double> MutaCruce = new List <double>(); //Lista de promedios de adaptación del operador de mutación+cruce

            for (int num = 0; num < TotalCiclos / Promedio; num++)
            {
                Muta.Add(0);
                Cruce.Add(0);
                MutaCruce.Add(0);
            }

            //En cada prueba se cambia la cadena a buscar y se reinicia las poblaciones con nuevos individuos
            for (int num = 0; num < Pruebas; num++)
            {
                int semilla = azar.Next();
                cadOriginal = objCad.CadenaAzar(azar, TamCadena);

                //Misma semilla para que los tres operadores trabajen con los mismos individuos al inicio
                objPoblacion.Configura(semilla, cadOriginal, TotalIndividuos, TotalCiclos, Promedio);
                objPoblacion.Mutacion();
                objPoblacion.Configura(semilla, cadOriginal, TotalIndividuos, TotalCiclos, Promedio);
                objPoblacion.Cruce();
                objPoblacion.Configura(semilla, cadOriginal, TotalIndividuos, TotalCiclos, Promedio);
                objPoblacion.MutacionCruce();

                //Para el promedio de evolución de las métricas de acercamiento a la cadena original
                //de los tres operadores
                for (int cont = 0; cont < objPoblacion.PromedioMuta.Count; cont++)
                {
                    Muta[cont]      += objPoblacion.PromedioMuta[cont];
                    Cruce[cont]     += objPoblacion.PromedioCruce[cont];
                    MutaCruce[cont] += objPoblacion.PromedioMutaCruce[cont];
                }
            }

            //Calcula el promedio y lo muestra en consola.
            for (int num = 0; num < TotalCiclos / Promedio; num++)
            {
                Muta[num] /= Pruebas;
                Console.Write(Muta[num].ToString() + ";");
                Cruce[num] /= Pruebas;
                Console.Write(Cruce[num].ToString() + ";");
                MutaCruce[num] /= Pruebas;
                Console.WriteLine(MutaCruce[num].ToString());
            }

            Console.ReadKey();
        }