Algoritmo per la pianificazione dei turni

-2

Sto cercando di scrivere un programma per aiutare a programmare i turni per i dipendenti di una piccola impresa. Ci sono 28 turni che devono essere assegnati a 28 dipendenti (quindi questo significa che ogni persona riceve uno spostamento a settimana). Ogni dipendente può fornire una serie di turni preferiti, quindi la mia idea era quella di procedere come segue: 1) Assegna prima il turno preferito a quei dipendenti che hanno fornito solo una preferenza 2) dopo il passo n. 1, torna indietro e assegna ciascun turno rimanente alla prima persona le cui preferenze corrispondono a detto turno

È un modo intelligente per affrontare questo problema? In caso contrario, puoi aiutarmi a capire cosa c'è che non va e / o indirizzarmi verso una letteratura che potrebbe aiutarmi con quello?

    
posta CL OS 06.03.2018 - 21:33
fonte

2 risposte

2

Il supposto algoritmo non funzionerà, ma c'è un modo semplice per estenderlo per renderlo almeno in grado di produrre una qualche soluzione:

  • nel passaggio 1, se ci sono collisioni per un turno, lancia un dado tra i dipendenti che partecipano allo stesso turno e sceglierne uno

  • nel passaggio 2, lo stesso

  • aggiungi un passaggio 3: distribuisci a caso tutti i restanti dipendenti tra i turni rimanenti

Potresti anche provare un approccio leggermente diverso: non separare i passaggi 1 e 2. Inizia invece con tutti i turni dati come prima preferenza da almeno un dipendente, indipendentemente dal fatto che abbiano dato una o più preferenze. Quindi,

  • lancia un dado tra quei dipendenti per decidere chi ottiene il turno.

  • rimuovi tale spostamento dall'elenco delle preferenze di ciascun dipendente laddove si verifica

  • ripetilo fino a quando gli elenchi di preferenze di tutti i dipendenti diventano vuoti

  • infine, distribuire a caso tutti gli altri dipendenti tra i turni rimanenti.

risposta data 07.03.2018 - 05:58
fonte
2

Sembra che tu stia cercando di risolvere il "Nurse Scheduling Problem" (NSP), anche se il tuo problema sembra essere una versione semplificata di esso. Ci sono molti articoli scritti su come trovare soluzioni praticabili al problema. Se vuoi che qualcosa funzioni rapidamente, puoi provare a utilizzare il pacchetto python di Google, che può essere trovato qui: Pianificazione dei dipendenti

    
risposta data 13.03.2018 - 14:09
fonte