Pregunta

Tengo un problema de horario clásico que consiste en las clases de variables (~ 100), habitaciones (20), términos (8) y días de semana (5).

Para simplificar el problema, los siguientes son las restricciones reducidas.

Un día es de 9 horas.

Algunas clases son obligatorias para los estudiantes, y las clases obligatorias de los términos 1,3,5,7 (y para 2,4,6,8) no deben superponerse.

Las clases tienen diferentes pesos en términos de horas, algunas son 2 horas, algunas son 3.

Algunas clases deben estar en habitaciones específicas.

No puede haber dos conferencias en la misma clase al mismo tiempo.

Voy con el módulo de restricción Python Logilabs. Y soy consciente de que elegir las variables y dominios sabiamente dará como resultado un menor tiempo para resolver el problema. El problema es que nunca antes había realizado programación de restricciones y que me cuesta desarrollar el problema para averiguar dónde y con qué empezar. Por ejemplo:

Puedo establecer una restricción como "No hay dos clases con la misma habitación, el mismo día puede superponerse a la ranura de tiempo del otro". O comience con "No hay espacio puede tener más de 9 horas reservadas el mismo día" y luego continuar con un dominio de solución reducida. Calculo (no lo intenté) que la primera restricción llevará mucho más tiempo resolver que la otra. Pero también requiere (supongo) el cambio de variables y dominios de solución o una reconstrucción de un problema menor. Ya estoy un poco perdido en variables, dominios, intervalos, implementaciones, etc.

En pocas palabras, necesito algunos consejos para construir el problema, dominios de la solución, elegir variables sabiamente, etc.

Gracias

ACTUALIZAR

Usando el paquete Logilab-Wraint, he realizado una aplicación básica y la he subido a github

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top