示例#1
0
        public static Cromosoma mutacionDeAlelo(Cromosoma mutante)
        {
            int[]  alelosMutados = new int[4];
            Random rand          = new Random();
            int    aleloAMutar   = rand.Next(4);
            //Console.WriteLine("Posicion a Mutar:" + aleloAMutar);
            int noRepetir = mutante.alelos.ElementAt(aleloAMutar);

            for (int i = 0; i < alelosMutados.Length; i++)
            {
                if (i == aleloAMutar)
                {
                    do
                    {
                        alelosMutados[i] = rand.Next(11);
                    }while(alelosMutados[i] == noRepetir);
                }
                else
                {
                    alelosMutados[i] = mutante.alelos[i];
                }
            }

            Cromosoma CromoMutado = new Cromosoma(alelosMutados);

            return(CromoMutado);
        }
示例#2
0
        public static Cromosoma cruzaDeDosPuntos(Cromosoma primero, Cromosoma segundo, int puntoUno, int puntoDos)
        {
            int[] alelosHijo = new int[4];

            for (int i = 0; i < alelosHijo.Length; i++)
            {
                if (i < puntoUno)
                {
                    alelosHijo[i] = primero.alelos.ElementAt(i);
                }
                else
                {
                    if (i < puntoDos)
                    {
                        alelosHijo[i] = segundo.alelos.ElementAt(i);
                    }
                    else
                    {
                        alelosHijo[i] = primero.alelos.ElementAt(i);
                    }
                }
            }

            Cromosoma hijo = new Cromosoma(alelosHijo);

            return(hijo);
        }
示例#3
0
 public static Cromosoma versus(Cromosoma primero, Cromosoma segundo, int peleaNumero, Boolean datos)
 {
     if (datos)
     {
         torneo(primero, segundo, peleaNumero);
     }
     if (primero.aptitud > segundo.aptitud)
     {
         return(primero);
     }
     else
     {
         return(segundo);
     }
 }
示例#4
0
        public static Cromosoma mejorDeUnaGeneracion(List <Cromosoma> Generacion)
        {
            Cromosoma elMejor     = null;
            double    laMejorApti = 0;

            foreach (Cromosoma cromo in Generacion)
            {
                if (cromo.aptitud > laMejorApti)
                {
                    laMejorApti = cromo.aptitud;
                    elMejor     = cromo;
                }
            }

            return(elMejor);
        }
示例#5
0
        public static void torneo(Cromosoma local, Cromosoma visitante, int peleaNumero)
        {
            Console.WriteLine("-------" + peleaNumero + "-------");
            Console.WriteLine("Local: ");
            imprimirVectorDeInversion(local);
            Console.WriteLine("Visitante: ");
            imprimirVectorDeInversion(visitante);

            Console.WriteLine("Ganador: ");
            if (local.aptitud > visitante.aptitud)
            {
                imprimirVectorDeInversion(local);
            }
            else
            {
                imprimirVectorDeInversion(visitante);
            }
            Console.WriteLine();
        }
示例#6
0
 public static void imprimirVectorDeInversion(Cromosoma cromo)
 {
     for (int i = 0; i < cromo.alelos.Length; i++)
     {
         if (i == 0)
         {
             Console.Write("[" + cromo.alelos.ElementAt(i) + ", ");
         }
         else
         {
             if (!(i == (cromo.alelos.Length - 1)))
             {
                 Console.Write(cromo.alelos.ElementAt(i) + ", ");
             }
             else
             {
                 Console.WriteLine(cromo.alelos.ElementAt(i) + "]\tAptitud: " + cromo.aptitud);
             }
         }
     }
 }
示例#7
0
        public static Cromosoma generadorDeCromosomas()
        {
            Cromosoma cromo = new Cromosoma(generadorDeAlelos());

            return(cromo);
        }