Qual algoritmo devo usar para criar um recurso de agendamento automático de equipe?

18

Imagine uma pequena empresa local (no meu caso, uma creche para cães) com algumas dezenas de funcionários em meio período. O objetivo é criar automaticamente agendas semanais da equipe. Minha pergunta é sobre quais abordagens algorítmicas a serem exploradas para esse problema.

Há muitas restrições a serem lembradas, principalmente (1) a disponibilidade da equipe e (2) as necessidades de cada turno, não apenas quantos funcionários para cada turno, mas as habilidades necessárias para cada turno (por exemplo, para um turno, você pode precisar de alguém que saiba dirigir para pegar / devolver cães; para outro, alguém que saiba dar banho nos cães, etc.).

Outras restrições incluem coisas como evitar ou exigir certas combinações de equipe - talvez devido a conflitos de personalidade, por um lado, ou a necessidade de treinamento por osmose de uma equipe sênior para uma equipe júnior, por outro.

Além disso, há preferências a serem levadas em consideração. Alguns funcionários preferem manhãs, dois dias seguidos, em vez de dizer segunda e quinta-feira etc. Sabemos que nem sempre podemos acomodar as preferências de todos. De fato, temos uma hierarquia na qual os funcionários recebem as primeiras escolhas sobre suas escolhas.

Tenho um palpite de que existe uma maneira de reduzir ou expressar esse problema em um algoritmo já resolvido. Mas não sei quais algoritmos explorar. Quais algoritmos específicos existentes seriam mais promissores?

Ghopper21
fonte
3
E, à parte, nunca encontrei um algoritmo que funcione para esse problema além das restrições mais simples do passado, além de "colocar todos no cronograma ignorando aleatoriamente qualquer outra restrição e deixá-los trocar ou trocar de turno, conforme desejado".
4
Não é uma solução completa disponível no site do JBoss Drools: optaplanner.org - você necessidade de codificar as restrições de agendamento, como o número máximo de horas por semana, etc.
BobDalgleish
Suspeito que isso seja equivalente ao problema do SAT, que é conhecido por ser NP-completo, mas não há dúvida de bons algoritmos que obtêm resultados razoáveis.
22814 David Conrad

Respostas:

16

Algoritmos como Pesquisa Local (Pesquisa Tabu , Recozimento Simulado , Aceitação Tardia ) funcionam muito bem nesses problemas.

Como Bob sugere, se você estiver trabalhando em Java, dê uma olhada no OptaPlanner (código aberto). Veja este vídeo na lista de funcionários .

Geoffrey De Smet
fonte
3
Você poderia explicar os algoritmos ou adicionar links a algum lugar que o faça? Se você adicionar links, adicione também um pouco de informação da página relevante.
Adam Zuckerman
Feito. Nota: muitos deles também são explicados na wikipedia.
Geoffrey De Smet