2010-12-30 7 views
7

Para algoritmos genéticos por lo general los genes simbolizado como esto:¿Cómo se representa un cronograma para el problema de la tabla de tiempo en algoritmos genéticos?

PARENT1: 101101010101001001001001110011100110101011101101 
PARENT2: 010100111011010101110101001001101011001010010110 

modo de cruce, las mutaciones pueden realizarse con este representaciones como:

elegir un punto de cruce:

PARENT1: 1011010101010010 01001001110011100110101011101101 
PARENT2: 0101001110110101 01110101001001101011001010010110 

Realizar cruzado para producir un hijo:

CHILD: 1011010101010010 01110101001001101011001010010110 

que se convierte, un cromosoma totalmente nuevo:

CHILD: 101101010101001001110101001001101011001010010110 

Mi problema es cómo representar un gen programación semanal en Java?

ejemplos se toman de este artículo: http://secretgeek.net/content/bambrilg.pdf

estoy impelementing este problema de horarios en Java y quieren representar

FIGURE 10: An Entire University Timetable 

en Java.

+0

No relacionado con su pregunta, pero si tiene disponibilidad para usar Matlab y tiene – Nishant

+0

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

+0

@Nishant Tengo un impelement en Java. – kamaci

Respuesta

2

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?

+0

No tengo tiempo para responder este comentario. Trataré de encontrar una solución de acuerdo con tus consejos. Lo estoy implementando para la escuela, no para el trabajo. – kamaci

+0

Ha sugerido una matriz bidimensional para el calendario (fila, columna). ¿Es lógico cambiarlo en una matriz? Me refiero, por ejemplo, la definición de diferentes índices a lunes de 7 a 8 de la mañana, Lunes de 8 a 9 de la mañana, ...., martes 7 a 8 de la mañana, Martes 8 a 9 de la mañana, .... etc.? – kamaci

+0

Sus ofertas de mutación son silenciosas, ¿pero qué hay de los cruces? – kamaci

Cuestiones relacionadas