Sto affrontando un problema che non sono sicuro di come affrontare. Devo generare un calendario per i dipendenti, ognuno con vincoli di lavoro specifici (alcuni personali, alcuni comuni)
Con cosa sto lavorando:
- Ho medici
- Ogni medico deve lavorare 5 giorni alla settimana.
- Ogni medico deve lavorare 1 notte / settimana
- Ogni medico deve lavorare una quantità uguale di notti rispetto ad altri medici (o il più vicino possibile)
- Ogni medico deve lavorare una quantità uguale di giovedì sera e la domenica sera con altri medici (o il più vicino possibile)
- Alcuni medici non possono lavorare determinati giorni / notti (inseriti dall'utente)
- Alcuni medici vorrebbero lavorare determinati giorni / notti (inseriti dall'utente)
- Alcuni medici vorrebbero non lavorare determinati giorni / notti (inseriti dall'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 un grande input di impostazioni "aggiungi medici" e "aggiungi vincoli" per ciascun medico, quindi un pulsante "genera calendario". È davvero di base per l'utente.
Il mio problema:
Non sono sicuro di come generare la pianificazione effettiva, ho letto di Neural Networks, Genetic Algorithms e così via, e sembrano tutti la soluzione giusta ma anche non proprio.
Quando guardo le GA, sono fatte per trovare una soluzione con una data popolazione (il mio problema), ma la popolazione iniziale deve già obbedire al dato insieme di vincoli, che sarebbe quindi ottimizzato. In tal caso, la mia popolazione di partenza è già la soluzione. Non ho bisogno che sia "ottimizzato". Non importa che una singola persona lavori 3 volte al lunedì di fila, a patto che sia effettivamente corretta e che gli altri lavorino allo stesso modo, questo significa che gli altri lavoreranno anche 3 lunedì sera ad 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 poi di nuovo, GA sembra davvero che siano fatti apposta per questo, quindi potrei non capirlo correttamente?
Ad ogni modo, poiché non ho mai usato GA (o reti neurali, o qualcosa del genere), mi piacerebbe essere sicuro che sto andando per l'approccio corretto prima di impegnarmi in una curva di apprendimento come quella.
La mia domanda:
Quale pensi che sia un buon approccio / algoritmo / tecnica per un problema come il mio? Gas? Reti neurali? Qualcos'altro completamente diverso?
Sono tutto orecchie e aperto per ulteriori dettagli, se necessario, ma penso di essermi reso chiaro:)