¿Qué algoritmo debo usar para crear una función de programación automática del personal?

18

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?

Ghopper21
fuente
3
Y además, nunca he encontrado un algoritmo que funcione para este problema más allá de las restricciones más simples en el pasado más allá de "poner a todos en el programa ignorando al azar cualquier otra restricción y dejarlos intercambiar o tomar turnos como lo deseen".
44
No es una solución completa disponible en el sitio de JBoss Drools: optaplanner.org - es necesario codificar las limitaciones de programación, tales como el número máximo de horas por semana, etc.
BobDalgleish
Sospecho que esto es equivalente al problema SAT, que se sabe que es NP completo, pero no hay duda de que existen buenos algoritmos que obtienen resultados razonables.
David Conrad el

Respuestas:

16

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 .

Geoffrey De Smet
fuente
3
¿Podría explicar los algoritmos o agregar enlaces a algún lugar que lo haga? Si agrega enlaces, agregue también un poco de información de la página que sea relevante.
Adam Zuckerman
Hecho. Nota: muchos de estos también se explican en wikipedia.
Geoffrey De Smet