public static void heuristic(Chromosome chromosome)
        {
            //Evaluacion choques con profesores
            int k     = chromosome.dnaChain.Count;
            int score = 0;

            for (int i = 0; i < k; i++)
            {
                //Evaluo cada uno de la cadena para revisar choques con profesores y aulas
                Poblacion aux = chromosome.dnaChain.ElementAt(i);
                for (int j = 0; j < k; j++)
                {
                    Poblacion evaluated = chromosome.dnaChain.ElementAt(j);
                    if (evaluated != aux)
                    {
                        //---------------Evaluo dia y la hora-----------------
                        if (aux.dia == evaluated.dia && aux.hora == evaluated.hora)//si el profe da clases en otro curso a la misma hora y dia
                        {
                            if (aux.profesor == evaluated.profesor)
                            {
                                score += 1;
                            }
                            if (aux.aula == evaluated.aula)
                            {
                                score += 1;
                            }
                        }
                        // si tienen una hora de diferencia(choque en hora no exacta)
                        if (aux.dia == evaluated.dia && aux.hora - 1 == evaluated.hora)//hora ante
                        {
                            if (aux.profesor == evaluated.profesor)
                            {
                                score += 1;
                            }
                            if (aux.aula == evaluated.aula)
                            {
                                score += 1;
                            }
                        }
                        if (aux.dia == evaluated.dia && aux.hora + 1 == evaluated.hora)
                        {
                            if (aux.profesor == evaluated.profesor)
                            {
                                score += 1;
                            }
                            if (aux.aula == evaluated.aula)
                            {
                                score += 1;
                            }
                        }
                    }
                }
            }
            chromosome.score = score;
        }
        public static List <Chromosome> createFirstGeneration(int cantProfes, int cantCursos, int cantAulas, int cantBloques)
        {
            List <Chromosome> solutions = new List <Chromosome>();

            int    p   = 1;
            Random rnd = new Random();
            int    l   = 1;

            while (p <= 4)//Tamano de la poblacion
            {
                Chromosome crom = new Chromosome();
                while (l <= cantCursos)
                {
                    int    dia   = rnd.Next(0, 5);
                    int    hora  = rnd.Next(0, 5);
                    string profe = profesores.ElementAt(rnd.Next(0, profesores.Count));
                    Curso  curso = cursos.ElementAt(rnd.Next(0, cursos.Count));
                    cursos.Remove(curso);
                    string    aula       = aulas.ElementAt(rnd.Next(0, aulas.Count));
                    Poblacion generacion = new Poblacion(profe, curso, aula, hora, dia);
                    crom.dnaChain.Add(generacion);


                    l++;
                }
                solutions.Add(crom);
                cursos = new List <Curso>()
                {
                    curso1,
                    curso2,
                    curso3,
                    curso4,
                    curso5,
                    curso6,
                    curso7,
                    curso8,
                    curso9,
                    curso10,
                    curso11,
                    curso12
                };
                l = 1;
                p++;
            }
            return(solutions);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Genrando la primera generacion...");
            Console.WriteLine("");
            initializeDimentions();
            List <Chromosome> solucion = createFirstGeneration(2, 12, 2, 1);


            for (int i = 0; i < solucion.Count; i++)
            {
                Chromosome cromo = solucion.ElementAt(i);
                for (int j = 0; j < cromo.dnaChain.Count; j++)
                {
                    Poblacion ente = cromo.dnaChain.ElementAt(j);
                    Console.WriteLine(ente.curso.nombre + " Grupo: " + ente.curso.grupo + "  " + ente.profesor + " " + ente.aula + " " + ente.hora + " " + ente.dia);
                }
                heuristic(cromo);
                Console.WriteLine("Score: " + cromo.score);
                Console.WriteLine("");
            }
            Console.WriteLine("");
            Console.WriteLine("Generando Padres...");
            Console.WriteLine("");
            List <Chromosome> parents = getParents(solucion);

            for (int i = 0; i < 2; i++)
            {
                Chromosome cromosoma = parents.ElementAt(i);

                for (int j = 0; j < cromosoma.dnaChain.Count; j++)
                {
                    Poblacion adn = cromosoma.dnaChain.ElementAt(j);
                    Console.WriteLine("Curso: " + adn.curso.nombre + " Profesor: " + adn.profesor + " Aula: " + adn.aula);
                }
                Console.WriteLine("Score: " + cromosoma.score);
                Console.WriteLine("");
            }
            Console.ReadKey();
        }