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(); }