Sto scrivendo un'applicazione che deciderà il piano di pianificazione per alcune decine di persone in base alla loro occupazione (ruolo) e disponibilità (giorno della settimana e ore).
Ho usato un foglio di calcolo Excel per aiutare a risolvere questo problema, sono stato quindi in grado di ideare un approccio logico e basato sulle decisioni per assegnare queste persone a turni e ruoli, seguendo alcuni set di vincoli.
Quando stavo per scriverlo in codice, mi è stato suggerito di provare Risolutore Microsoft . Ho letto un po 'sulle sue capacità, ma non ho familiarità con alcuni termini incontrati.
Bene, basti dire che non ho mai usato il Risolutore Microsoft e non so nemmeno se il seguente problema di pianificazione possa essere risolto con esso o meno. Finora ho trovato pochissimi esempi sui problemi di programmazione e anche quelli sono semplici al confronto.
Quindi la mia domanda è: Microsoft Solver può risolvere il seguente problema di programmazione?
Problema di pianificazione
Assegna le persone ai turni per un'intera settimana in base alla loro disponibilità e al ruolo che sono qualificati a ricoprire in seguito a una serie di vincoli e obiettivi.
Struttura
- Le settimane sono composte da sette giorni.
- I giorni sono composti da turni (l'alba, la mattina, il pomeriggio e la notte sono i più comuni). I turni sono specificati in questo modo:
- Dawn: 00:00 AM - > 08:00
- Mattina: 08:00 - > 12:00 AM
- Pomeriggio: 01:00 PM - > 07:00
- Notte: 07:00 PM - > 00:00 AM
- Ci sono alcuni giorni della settimana che potrebbero non avere turni mentre altri possono averne uno, due o più.
- Ogni persona ha una disponibilità settimanale che segue lo stesso giorno della settimana / struttura del turno.
- Esempio: Peter è disponibile solo il lunedì sera (lunedì alle 19:00 - > 00:00 AM).
- A volte le persone hanno due o più giorni in cui sono disponibili e vorrebbero che il loro programma ruoti attraverso questi.
- Esempio: Kyle è disponibile solo mercoledì sera e giovedì mattina, inoltre vorrebbe ruotarli. Una settimana, mercoledì, un'altra settimana, giovedì.
- Ogni persona ha una serie di ruoli che può riempire (uno o più).
- driver
- Medic
- Dottore
obiettivi
- Ogni turno deve avere almeno: due autisti, un medico e tre medici.
- Ogni persona con disponibilità deve essere assegnata a un turno, non importa se uno spostamento ha tre piloti mentre un altro ne ha solo due.
Vincoli
- Una persona può riempire solo un ruolo per turno.
- Una persona può essere assegnata a un turno solo se ha la disponibilità per eseguirlo.
- Una persona può essere assegnata a un ruolo solo se è qualificata per eseguirla.
- Una persona può essere assegnata a un turno solo a settimana, a meno che l'organizzazione non sia a corto di personale (a corto di personale significa che abbiamo bisogno di più persone per riempire i turni per raggiungere l'obiettivo n. 1) . Se questo è il caso, si applica una condizione aggiuntiva quando si assegnano le persone ai turni dopo il primo.
- Una persona assegnata a un secondo turno nella stessa settimana deve essere la persona che non ha eseguito un secondo turno per il tempo più lungo, pur soddisfacendo la disponibilità della persona e la capacità di ruolo.
Nota del moderatore: impossibile trovare i tag appropriati.