Algoritmo per il mapping degli utenti a una pianificazione in base alla disponibilità di tempo

4

Ho un progetto in cui devo mappare i dipendenti a un programma. Il concetto di base è:

  • L'azienda si apre tra le 08:30 e le 17:00.
  • Il dipendente 1 può lavorare dalle 08:30 alle 12:00 e dalle 13:00 alle 1700;
  • Il dipendente 2 può lavorare dalle 12:00 alle 13:00.
  • Il dipendente 3 può lavorare dalle 17:30 alle 24:00

Vorrei quindi che i dipendenti si associassero all'oggetto aziendale in base a quando possono lavorare. Pertanto, se richiedo un dipendente in qualsiasi momento, nell'esempio sopra, Employee 1 e 2 funzioneranno in quel giorno.

Ho in testa un paio di idee su come avvicinarmi a questo, ma ho voluto verificare se ci sono degli algoritmi progettati attorno a questo tipo di attività.

    
posta webnoob 27.09.2014 - 01:23
fonte

2 risposte

5

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).

    
risposta data 28.09.2014 - 21:41
fonte
2

La forza bruta potrebbe non essere fattibile anche per piccoli set di dati.

Ho scritto qualcosa di simile all'inizio, in C #. Ho usato un algoritmo genetico.

Il codice sorgente (ospitato su Codeplex ) è orribile, non l'ho Non ne so di meglio al momento. Ma puoi dare un'occhiata alla presentazione del video: link

Comincio a parlare dell'argomento del tuo interesse intorno alle 6:00.

Personalmente ho avuto l'idea dal link che è una lettura interessante. Non importa la matematica, puoi ignorarla.

La soluzione produce ottimi risultati, come dimostrato nel mio video.

    
risposta data 28.09.2014 - 22:23
fonte

Leggi altre domande sui tag