Estoy enfrentando un problema que no estoy seguro de cómo abordar. Tengo que generar un calendario para los empleados, cada uno de ellos con limitaciones laborales específicas (algunas personales, otras comunes)
Con lo que estoy trabajando:
- Tengo doctores
- Cada médico tiene que trabajar 5 días / semana.
- Cada médico tiene que trabajar 1 noche / semana.
- Cada médico tiene que trabajar la misma cantidad de noches en comparación con otros médicos (o lo más cerca posible)
- Cada médico tiene que trabajar la misma cantidad de jueves y domingos en comparación con otros médicos (o lo más cerca posible)
- Algunos médicos no pueden trabajar ciertos días / noches (entrada del usuario)
- A algunos médicos les gustaría trabajar ciertos días / noches (entrada del usuario)
- A algunos médicos les gustaría no trabajar ciertos días / noches (entrada del usuario)
El usuario en cuestión es la persona que se ocupa del calendario, estoy tratando de crear una solución que genere automáticamente un calendario que obedezca todas las restricciones. La solución es solo una entrada de configuración grande "agregar médicos" y "agregar restricciones" para cada médico, luego un botón "generar calendario". Es realmente básico para el usuario.
Mi problema :
No estoy seguro de cómo generar la planificación real, he estado leyendo sobre redes neuronales, algoritmos genéticos, etc., y todos parecen la solución correcta, pero en realidad no.
Cuando miro los GA, están hechos para encontrar una solución con una población dada (mi problema), pero la población inicial ya debe obedecer el conjunto de restricciones dado, que luego se optimizaría. En ese caso, mi población inicial ya es la solución. No necesito que esté "optimizado". No importa que una sola persona trabaje 3 noches de lunes seguidas, siempre que sea correcto y que otros trabajen la misma cantidad, eso significa que otros también trabajarán 3 noches de lunes en algún momento y está bien. Lo que me hace pensar que los GA son demasiado "avanzados" para mí, ya que mi problema ya está resuelto con el punto de partida de un GA.
Pero, de nuevo, los GA realmente parecen estar hechos para esto, así que ¿podría no estar entendiéndolo correctamente?
De todos modos, como nunca he usado GA (o redes neuronales, o algo por el estilo), me gustaría estar seguro de que voy por el enfoque correcto antes de participar en una curva de aprendizaje como esa.
Mi pregunta :
¿Cuál crees que es un buen enfoque / algoritmo / técnica para un problema como el mío? ¿Gas? ¿Redes neuronales? ¿Algo más completamente diferente?
Soy todo oídos y abierto para más detalles si es necesario, pero creo que me he dejado bastante claro :)