Imagine una pequeña empresa local (en mi caso, una guardería para perros) con unas pocas docenas de empleados a tiempo parcial. El objetivo es crear automáticamente horarios semanales para el personal. Mi pregunta es sobre qué enfoques algorítmicos explorar para este problema.
Hay muchas limitaciones a tener en cuenta, principalmente (1) la disponibilidad del personal y (2) las necesidades de cada turno, no solo la cantidad de personal para cada turno sino las habilidades necesarias para cada turno (por ejemplo, para un turno determinado, Es posible que necesite a alguien que sepa conducir para recoger y dejar a los perros, para otro, alguien que sepa cómo bañar a los perros, etc.
Otras restricciones incluyen cosas como evitar o requerir ciertos combos de personal, tal vez debido a conflictos de personalidad por un lado, o la necesidad de capacitación por ósmosis de un personal senior a un junior por el otro.
Además, hay preferencias a tener en cuenta. Algunos empleados prefieren las mañanas, unos dos días seguidos en lugar de decir lunes y jueves, etc. Sabemos que no siempre podemos acomodar las preferencias de todos. De hecho, tenemos una jerarquía de los empleados que obtienen los primeros dibs en sus elecciones.
Tengo el presentimiento de que hay una manera de reducir o expresar este problema en un algoritmo ya resuelto. Pero no sé qué algoritmos explorar. ¿Qué algoritmos específicos existentes serían más prometedores?
fuente
Respuestas:
Algoritmos tales como Búsqueda local (Búsqueda tabú , Recocido simulado , Aceptación tardía ) funcionan muy bien en tales problemas.
Como sugiere Bob, si está trabajando en Java, eche un vistazo a OptaPlanner (código abierto). Vea este video sobre la lista de empleados .
fuente