Quale funzione o metodo posso usare per distribuire equamente un carico di lavoro

4

Questa è una questione più matematica che algoritmica; tuttavia sarà implementato in php.

Ho una serie di N task. Ogni attività ha richiesto del tempo per essere completata (ad esempio, l'attività 1 ha richiesto 5 ore.) Ora, per verificare che queste attività siano state completate correttamente, devo assegnare a un certo numero di utenti U una revisione di ciascuna di esse. Ad ogni utente verrà assegnato un certo numero di compiti, idealmente, con ogni utente che ha approssimativamente la stessa quantità di ore assegnate all'altro.

es. Ci sono 10 compiti. l'attività 1 ha richiesto 4 ore, il task 2 ha impiegato 18 ore, il task 3 ha impiegato 6 ore ... ecc ... per un totale di 80 ore.

Ci sono 8 utenti. Se ognuno degli 8 utenti ha idealmente la stessa quantità di ore (alcuni utenti ottengono più compiti, ma meno lunghi, alcuni utenti ottengono compiti meno lunghi ma più lunghi), qual è un buon modo per ordinare automaticamente le attività?

    
posta John 07.02.2012 - 19:40
fonte

3 risposte

2

L'algoritmo mostrato di seguito fornisce una soluzione. Non l'ho testato a fondo, ma dovrebbe darti un'idea. Può essere utilizzato solo se la somma (tempo disponibile per le risorse) > = sum (tempo richiesto per la revisione dell'attività).

Il processo inizia esaminando il tempo di revisione richiesto da Task1 e il tempo disponibile della risorsa 1. Se il tempo disponibile è inferiore o uguale al tempo richiesto dall'attività, la cella di intersezione di T1, U1 viene riempita con il numero di ore che potrebbero soddisfare il tempo di revisione richiesto o il tempo disponibile per l'utente 1.

Successivamente, passiamo al task 2 e ripetiamo il processo.

Se l'allocazione esaurisce il tempo disponibile di una determinata risorsa, la logica passa alla risorsa successiva.

Le iterazioni dovrebbero interrompersi quando viene violata questa condizione o quando tutte le risorse sono state assegnate.

Nell'immagine sottostante, il passo 0 è il passo iniziale. Ho usato un colore arancione per mostrare le modifiche ad ogni passaggio, sperando che tu possa scoprire il processo.

Nota:

Questo processo è polarizzato al modo in cui gli utenti sono elencati da sinistra a destra e non distribuisce il lavoro uniformemente tra gli utenti. Cioè, un utente può lavorare più duro degli altri solo perché appare prima degli altri.

    
risposta data 08.02.2012 - 01:25
fonte
1

Questa è un'istanza del problema open shop planning . Il problema è NP-completo, quindi ti consigliamo di applicare un po 'di euristica, come quella descritta nella Wikipedia o forse uno degli algoritmi genetici in questo documento .

    
risposta data 07.02.2012 - 20:07
fonte
0

Forse potresti pensare troppo a questo. Disporre le attività in una coda semplice e ordinare in base alla priorità. Avere a disposizione di ogni utente la prima attività disponibile dovrebbe essere sufficiente. Le attività più lunghe potrebbero richiedere più tempo per la revisione e quelle brevi meno tempo, pertanto l'ordine in cui gli utenti sembrano raccogliere l'attività successiva cambierà quando termineranno l'attività precedente e avanzeranno per il successivo. Questo non ha davvero bisogno di essere troppo complicato.

Le attività di pre-allocazione possono presentare alcuni seri inconvenienti. Questo è fondamentalmente un sistema push, e tende a provocare "sprechi" il più delle volte. L'implementazione di un sistema pull sarebbe molto più efficiente e meno dispendiosa in termini di pianificazione e risorse, in quanto non sarà necessario gestire i problemi di sincronizzazione se le stime di lavoro sono errate o si interrompono cambiando le circostanze all'interno del team. / p>     

risposta data 07.02.2012 - 22:24
fonte

Leggi altre domande sui tag