Questo è scritto dal punto di vista pragmatico. Non reinventare la ruota. Stai meglio imparando e utilizzando un software noto che scrivere il tuo programma di pianificazione che probabilmente non sarà preformato e sarà "divertente" da mantenere, sia per te che per il prossimo.
I problemi di pianificazione sono difficili ... e non solo difficili, ma possono spesso essere difficili da NP. Il problema descritto è una modifica del problema di schedulazione degli infermieri che è un classico che è stato studiato per diversi decenni a causa della sua difficoltà.
Se uno vuole provare a codificarlo, ci sono un certo numero di tecniche. Quelli citati nell'articolo di Wikipedia includono decomposizione, calcolo parallelo, ottimizzazione stocastica, algoritmi genetici, ottimizzazione delle colonie, ricottura simulata, ricerca Tabu e discesa coordinata.
Devo anche sottolineare che esiste un intero settore di programmi software in tutto il programma di pianificazione degli infermieri. Una ricerca per software di pianificazione infermieristica genera numerosi risultati da diverse aziende.
Tutti questi elementi rientrano nell'area programmazione dei vincoli e mentre uno potrebbe sedersi giù con prolog (o scrivi il tuo), questo tende ad essere l'area in cui si dovrebbe prendere un motore di regole appropriato per la propria piattaforma e lasciare che faccia il lavoro. Uno di questi esempi è quello di drools, che ha un esempio di impiegare turni di guida usando gli infermieri (ci sono anche altri esempi tra cui programma di ammissione dei pazienti, calendario degli esami e problema dei tornei di viaggio).