static void Main(string[] args) { Stopwatch crono = new Stopwatch(); Process currentProcess = System.Diagnostics.Process.GetCurrentProcess(); long totalBytesOfMemoryUsed; Random rnd = new Random(); List <Cursos> cursos; List <Horario> listaHorarios = new List <Horario>(); Horario horario; List <Profes> listaProfes = new List <Profes>(); //---------------------------------------------Crea los profesores--------------------------------------------------------------- for (int i = 0; i < 20; i++) { listaProfes.Add(new Profes(i + 1, "Profe" + ((i + 1)), (rnd.Next(1, 8)) * 2)); } //---------------------------------------------Construye el horario-------------------------------------------------------------- int cont = 1; int cont2 = 1; int vecesEnSemana; int semestre = 6; while (semestre != 0) //Crea horarios la cantidad de semestres establecida { int horas = 60; // Cantidad de horas de posibles clases incluidads las libres int libres = rnd.Next(10, 15); //Un random de la cantidad de libres que tendra el horario horas -= (libres * 2); //Se multiplica *2 debido a que cada clase son 2 horas cursos = new List <Cursos>(); horario = new Horario(); for (int i = 0; i < libres; i++)//Añade las libres a cursos { cursos.Add(new Cursos(cont, "Libre")); cont += 1; } while (horas != 0)//Se le iran restando hasta que llegue a 0 para saber que ya no hay mas posibles clases { //(int ID, int nEstudiantes, String nombre, Aulas aula, int nClases,int semestre,Profes profe,int grupo) if (horas == 2)//Si solo queda espacio para una clase, establece la cantidad de veces del curso a 1 { cursos.Add(new Cursos(cont, rnd.Next(15, 31), "Curso" + cont2, null, 1, rnd.Next(1, 9), null, rnd.Next(1, 10))); horas -= 2; } else { vecesEnSemana = rnd.Next(1, 3);// Random de cantidad de veces que tendra lugar una clase durante la semana Cursos cursoActual = new Cursos(cont, rnd.Next(15, 31), "Curso" + cont2, null, vecesEnSemana, rnd.Next(1, 9), null, rnd.Next(1, 10)); cursos.Add(cursoActual); if (vecesEnSemana == 1)//Si es una vez resta 2 horas, sino resta 4 por q serian 2 veces en la semana { horas -= 2; } else { horas -= 4; } } cont += 1; cont2 += 1; } horario.cursos = cursos; horario.llenaLecciones(); horario.DesordenarLista(); listaHorarios.Add(horario); semestre -= 1; } //---------------------------------------------Imprime los horarios-------------------------------------------------------------- foreach (Horario h in listaHorarios) { int hora = 7; Console.WriteLine("\t" + "Lunes" + "\t" + "Martes" + "\t" + "Mierco" + "\t" + "Jueves" + "\t" + "Viernes"); for (int i = 0; i < 6; i++) { Console.Write(hora + ":00" + "\t"); for (int k = 0; k < 5; k++) { Cursos a = h.matriz[k, i]; if (a.nombre != "Libre") { Console.Write(a.nombre + "\t"); } else { Console.Write("Libre" + "\t"); } } hora += 2; Console.WriteLine(); } Console.WriteLine("-------------------------cambio semestre-------------------------"); } //---------------------------------------------asdasdasdasdasdasdasdasd-------------------------------------------------------------- Horario p1 = new Horario(); Horario p2 = new Horario(); Horario h1 = new Horario(); Horario h2 = new Horario(); Horario h3 = new Horario(); Horario h4 = new Horario(); List <Cursos> l1 = new List <Cursos>(); List <Cursos> l2 = new List <Cursos>(); List <Horario> listaHorariosPMX = new List <Horario>(); List <Horario> listaHorariosSimple = new List <Horario>(); for (int i = 0; i < listaHorarios[0].cursos.Count; i++) { l1.Add(listaHorarios[0].cursos[i]); l2.Add(listaHorarios[0].cursos[i]); h1.cursos.Add(listaHorarios[0].cursos[i]); h2.cursos.Add(listaHorarios[0].cursos[i]); h3.cursos.Add(listaHorarios[0].cursos[i]); h4.cursos.Add(listaHorarios[0].cursos[i]); } p1.cursos = l1; p1.llenaLecciones(); p1.DesordenarLista(); Console.WriteLine(); listaHorariosPMX.Add(p1); listaHorariosSimple.Add(p1); p2.cursos = l2; p2.llenaLecciones(); p2.DesordenarLista(); p2.DesordenarLista(); listaHorariosPMX.Add(p2); listaHorariosSimple.Add(p2); int[] pruebaP1 = new int[p1.lecciones.Count]; int[] pruebaP2 = new int[p1.lecciones.Count]; for (int i = 0; i < p1.lecciones.Count; i++) { pruebaP1[i] = p1.lecciones[i].nleccion; pruebaP2[i] = p2.lecciones[i].nleccion; } Console.WriteLine("-------------------------------------------Prueba PMX-------------------------------------"); crono.Start(); int[] pruebaPMX = PMX2(pruebaP1, pruebaP2); int[] pruebaPMX2 = PMX2(pruebaP2, pruebaP1); for (int i = 0; i < pruebaPMX.Length; i++) { foreach (Cursos c in listaHorarios[0].lecciones) { if (c.nleccion == pruebaPMX[i]) { h1.lecciones.Add(c); } } } for (int i = 0; i < pruebaPMX2.Length; i++) { foreach (Cursos c in listaHorarios[0].lecciones) { if (c.nleccion == pruebaPMX2[i]) { h2.lecciones.Add(c); } } } Console.WriteLine(h1.lecciones.Count); //h1.llenaHorario(); listaHorariosPMX.Add(h1); listaHorariosPMX.Add(h2); /*for (int i = 0; i < prueba1.Length; i++) * { * Console.Write(prueba1[i]+"-"); * } * Console.WriteLine(); * for (int i = 0; i < prueba2.Length; i++) * { * Console.Write(prueba2[i] + "-"); * } * Console.WriteLine(); * for (int i = 0; i < prueba.Length; i++) * { * Console.Write(prueba[i] + "-"); * } * Console.WriteLine(); */ Tuple <Horario, Horario> nuevaGenPMX = fitnessAux(p1, p2, h1, h2); nuevaGenPMX.Item1.llenaHorario(); nuevaGenPMX.Item2.llenaHorario(); //OJO CON ESTO/////////////////////// totalBytesOfMemoryUsed = currentProcess.WorkingSet64; ///////////////////////////////////// crono.Stop(); foreach (Horario h in listaHorariosPMX) { foreach (Cursos cur in h.lecciones) { Console.Write(cur.nleccion + "-"); } Console.WriteLine(); Console.WriteLine("-------------------------PMX-------------------------"); } Console.WriteLine("Tiempo Transcurrido: " + crono.Elapsed + " ms"); Console.WriteLine("Cantidad de memoria utilizada: " + totalBytesOfMemoryUsed / 1000000 + " MB"); Console.ReadKey(); Console.WriteLine(" "); int horaa = 7; Console.WriteLine("\t" + "Lunes" + "\t" + "Martes" + "\t" + "Mierco" + "\t" + "Jueves" + "\t" + "Viernes"); for (int i = 0; i < 6; i++) { Console.Write(horaa + ":00" + "\t"); for (int k = 0; k < 5; k++) { Cursos a = nuevaGenPMX.Item1.matriz[k, i]; Console.Write(a.nombre + a.nleccion + "\t"); } horaa += 2; Console.WriteLine(); } Console.WriteLine("-------------------------cambio semestre-------------------------"); horaa = 7; Console.WriteLine("\t" + "Lunes" + "\t" + "Martes" + "\t" + "Mierco" + "\t" + "Jueves" + "\t" + "Viernes"); for (int i = 0; i < 6; i++) { Console.Write(horaa + ":00" + "\t"); for (int k = 0; k < 5; k++) { Cursos a = nuevaGenPMX.Item2.matriz[k, i]; Console.Write(a.nombre + a.nleccion + "\t"); } horaa += 2; Console.WriteLine(); } Console.WriteLine("-------------------------cambio semestre-------------------------"); Console.WriteLine(); Console.ReadKey(); // Console.WriteLine("-------------------------------------------Prueba Simple-------------------------------------"); crono.Start(); Tuple <int[], int[]> pruebaSimple = CruceSimple(pruebaP1, pruebaP2); for (int i = 0; i < pruebaSimple.Item1.Length; i++) { foreach (Cursos c in listaHorarios[0].lecciones) { if (c.nleccion == pruebaPMX[i]) { h3.lecciones.Add(c); } } } for (int i = 0; i < pruebaSimple.Item2.Length; i++) { foreach (Cursos c in listaHorarios[0].lecciones) { if (c.nleccion == pruebaPMX2[i]) { h4.lecciones.Add(c); } } } listaHorariosSimple.Add(h3); listaHorariosSimple.Add(h4); Tuple <Horario, Horario> nuevaGenSimple = fitnessAux(p1, p2, h1, h2); nuevaGenSimple.Item1.llenaHorario(); nuevaGenSimple.Item2.llenaHorario(); //OJO CON ESTO/////////////////////// totalBytesOfMemoryUsed = currentProcess.WorkingSet64; ///////////////////////////////////// crono.Stop(); Console.WriteLine("Tiempo Transcurrido: " + crono.Elapsed + " ms"); Console.WriteLine("Cantidad de memoria utilizada: " + totalBytesOfMemoryUsed / 1000000 + " MB"); Console.ReadKey(); Console.WriteLine(" "); horaa = 7; Console.WriteLine("\t" + "Lunes" + "\t" + "Martes" + "\t" + "Mierco" + "\t" + "Jueves" + "\t" + "Viernes"); for (int i = 0; i < 6; i++) { Console.Write(horaa + ":00" + "\t"); for (int k = 0; k < 5; k++) { Cursos a = nuevaGenSimple.Item1.matriz[k, i]; Console.Write(a.nombre + a.nleccion + "\t"); } horaa += 2; Console.WriteLine(); } Console.WriteLine("-------------------------cambio semestre-------------------------"); horaa = 7; Console.WriteLine("\t" + "Lunes" + "\t" + "Martes" + "\t" + "Mierco" + "\t" + "Jueves" + "\t" + "Viernes"); for (int i = 0; i < 6; i++) { Console.Write(horaa + ":00" + "\t"); for (int k = 0; k < 5; k++) { Cursos a = nuevaGenSimple.Item2.matriz[k, i]; Console.Write(a.nombre + a.nleccion + "\t"); } horaa += 2; Console.WriteLine(); } Console.WriteLine("-------------------------cambio semestre-------------------------"); Console.WriteLine(); Console.ReadKey(); }