Estou enfrentando um problema que não sei ao certo como abordar. Eu tenho que gerar um calendário para os funcionários, cada um deles com restrições de trabalho específicas (algumas pessoais, outras comuns)
Com o que estou trabalhando:
- Eu tenho doutores
- Cada médico tem que trabalhar 5 dias / semana.
- Cada médico tem que trabalhar 1 noite / semana
- Cada médico deve trabalhar uma quantidade igual de noites em comparação com outros médicos (ou o mais próximo possível)
- Cada médico deve trabalhar uma quantidade igual de noites de quinta e domingo em comparação com outros médicos (ou o mais próximo possível)
- Alguns médicos não podem trabalhar em determinados dias / noites (informações do usuário)
- Alguns médicos gostariam de trabalhar em determinados dias / noites (informações do usuário)
- Alguns médicos gostariam de não trabalhar determinados dias / noites (informações do usuário)
O usuário em questão é a pessoa que lida com o calendário. Estou tentando criar uma solução que gere automaticamente um calendário que obedeça a todas as restrições. A solução é apenas uma grande entrada de configurações "adicionar médicos" e "adicionar restrições" para cada médico e, em seguida, um botão "gerar calendário". É realmente básico para o usuário.
Meu problema :
Não tenho certeza de como gerar o planejamento real, tenho lido sobre Redes Neurais, Algoritmos Genéticos e assim por diante, e todas elas parecem ser a solução certa, mas também não são realmente.
Quando olho para os GAs, eles são feitos para encontrar uma solução com uma determinada população (meu problema), mas a população inicial já deve obedecer a um determinado conjunto de restrições, que seria otimizado. Nesse caso, minha população inicial já é a solução. Não preciso que seja "otimizado". Não importa que uma única pessoa trabalhe três noites de segunda-feira seguidas, desde que esteja realmente correta e que outras pessoas trabalhem a mesma quantidade, isso significa que outras pessoas também trabalharão três noites de segunda-feira em algum momento e tudo bem. O que me faz pensar que os GAs são "avançados" demais para mim, pois meu problema já foi resolvido com o ponto de partida de um GA.
Mas, novamente, os GAs realmente parecem feitos para isso, então eu posso não estar entendendo corretamente?
De qualquer forma, como eu nunca usei GAs (ou redes neurais, ou qualquer coisa do tipo), gostaria de ter certeza de que estou adotando a abordagem correta antes de iniciar uma curva de aprendizado como essa.
Minha pergunta :
O que você acha que é uma boa abordagem / algoritmo / técnica para um problema como o meu? Gás? Redes neurais? Algo completamente diferente?
Sou todo ouvidos e abertos a mais detalhes, se necessário, mas acho que me deixei bem claro :)