Sto affrontando un problema non sono sicuro di come affrontare. Devo generare un calendario per i dipendenti, ognuno con specifici vincoli di lavoro (alcuni personali, altri comuni)
Con cosa sto lavorando:
- Ho dei dottori
- Ogni medico deve lavorare 5 giorni / settimana.
- Ogni medico deve lavorare 1 notte / settimana
- Ogni medico deve lavorare un numero uguale di notti rispetto ad altri medici (o il più vicino possibile)
- Ogni medico deve lavorare un uguale numero di giovedì sera e domenica sera rispetto ad altri medici (o il più vicino possibile)
- Alcuni medici non possono lavorare in determinati giorni / notti (input dell'utente)
- Alcuni medici vorrebbero lavorare determinati giorni / notti (input dell'utente)
- Alcuni medici vorrebbero non lavorare in determinati giorni / notti (input dell'utente)
L'utente in questione è la persona che si occupa del calendario, sto cercando di creare una soluzione che genererà automaticamente un calendario che obbedisce a tutti i vincoli. La soluzione è solo una grande impostazione di input "Aggiungi dottori" e "Aggiungi vincoli" per ogni medico, quindi un pulsante "Genera calendario". È davvero di base per l'utente.
Il mio problema :
Non sono sicuro di come generare la vera pianificazione, ho letto di reti neurali, algoritmi genetici e così via, e sembrano tutti la soluzione giusta, ma non proprio.
Quando guardo i GA, sono fatti per trovare una soluzione con una data popolazione (il mio problema), ma la popolazione iniziale deve già obbedire al set di vincoli dato, che sarebbe quindi ottimizzato. In tal caso, la mia popolazione iniziale è già la soluzione. Non ho bisogno che sia "ottimizzato". Non importa che una sola persona lavori 3 lunedì di seguito, purché sia effettivamente corretta e che altri lavorino lo stesso importo, il che significa che altri lavoreranno anche 3 lunedì a un certo punto e va bene. Il che mi fa pensare che i GA siano troppo "avanzati" per me, poiché il mio problema è già risolto con il punto di partenza di un GA.
Ma ancora una volta, GA sembra davvero che siano fatti per questo, quindi potrei non capirlo correttamente?
Ad ogni modo, dato che non ho mai usato GA (o reti neurali, o qualcosa del genere), mi piacerebbe essere sicuro di seguire l'approccio corretto prima di impegnarmi in una curva di apprendimento come quella.
La mia domanda :
Quale pensi sia un buon approccio / algoritmo / tecnica per un problema come il mio? Gas? Reti neurali? Qualcos'altro completamente diverso?
Sono tutto pronto e aperto per ulteriori dettagli, se necessario, ma penso di essermi reso abbastanza chiaro :)