El siguiente código puede darle una idea de cómo abordar el problema. Una solución (que sería el horario universitario) consiste en una serie de habitaciones individuales. Estas habitaciones individuales tienen una matriz bidimensional, donde las columnas son los días y las filas son las horas. Establecí HORAS en 16, ya que creo que por la noche no habrá clases. Entonces, Hour Row 1 sería la primera hora del día ... probablemente de 7 a 8 AM. Los valores de la matriz muestran qué clase está reservada.
public class SingleRoom {
static final int DAYS = 7;
static final int HOURS = 16;
. . .
private int[][] timetable = new int[DAYS][HOURS]; //0 would say room is not booked, >0 indicates the booked class (english advanced (12), object oriented programming (139), etc..)
}
public class Solution {
static final int AVAILABLE_ROOMS = 26;
. . .
private SingleRoom[] university_timetable = new SingleRoom[AVAILABLE_ROOMS];
}
mutaciones:
cambio de clase de mutación - cambiar la clase a otra clase al azar o en cero = No se puede reservar
interruptor de encendido/apagado de clase - si una hora en un día en una habitación específica está reservado, apágalo si no está reservado, enciéndalo con una clase aleatoria , esto es para dar al algoritmo la posibilidad de no reservar horas, ya que en la mutación de clase de cambio el 0 tiene una baja probabilidad de ser elegido
restricciones: después de crear sus soluciones, verifique todas las restricciones y mantenga las soluciones válidas las nuevas soluciones válidas tienen que insertarse en su población (de soluciones), si son mejores para otras soluciones que ya están en su población o si mejoran la diversidad de su población
Pero en el documento al que se refirió es bastante bueno se describe cómo implementar un GA para este problema (comienza en la página 16).
Escribí un marco java genérico para el algoritmo de optimización multiobjetivo mPOEMS (optimización prototipo multiobjetivo con pasos de mejora evolutiva), que es un GA que utiliza conceptos evolutivos.
Puede encontrar el código here, podría darle una idea de cómo abordar el problema:
Las soluciones que se pueden encontrar con este algoritmo se han comparado en un trabajo científico con el estado-of-the- técnica de algoritmos SPE-a-2 y NSGA, y se ha demostrado que el algoritmo performes comparable o incluso mejor, en función de los parámetros que toma para medir el rendimiento.
Se puede encontrar here.
recursos adicionales: Mi tesis que se aplica este marco para el problema de selección de proyectos: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf
La documentación del marco: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf
mPOEMS papel de la presentación: http://portal.acm.org/citation.cfm?id=1792634.1792653
realidad con un poco de entusiasmo podría adaptar fácilmente el código del marco genérico a sus necesidades.
se escribe esta AG en su trabajo o como estudiante?
No relacionado con su pregunta, pero si tiene disponibilidad para usar Matlab y tiene – Nishant
no relacionado con su pregunta, pero si tiene disponibilidad para usar Matlab y no tiene ninguna restricción para usar Java. Sugiero ir por Matlab. En mi experiencia personal, Matlab tiene una impresionante caja de herramientas de GA y Soft Computing. vale la pena explorar. – Nishant
@Nishant Tengo un impelement en Java. – kamaci