web-dev-qa-db-fra.com

Quelle fonction ou méthode puis-je utiliser pour distribuer également une charge de travail?

C'est plus une question mathématique qu'un algorithmique; Néanmoins, il sera mis en œuvre dans PHP.

J'ai une gamme de n tâches. Chaque tâche a pris beaucoup de temps pour terminer (E.g. Tâche 1 a pris 5 heures à compléter.) Maintenant, afin de revoir que ces tâches ont été complétées correctement, je dois attribuer un certain nombre d'utilisateurs u à examiner chacun d'eux. Chaque utilisateur se verra attribuer un certain nombre de tâches, idéalement, avec chaque utilisateur ayant à peu près la même quantité d'heures attribuée à l'autre.

PAR EXEMPLE. Il y a 10 tâches. Tâche 1 a pris 4 heures, la tâche 2 a pris 18 heures, la tâche 3 a pris 6 heures ... etc ... totalisant 80 heures.

Il y a 8 utilisateurs. Si chacun des 8 utilisateurs doit idéalement avoir la même quantité d'heures (certains utilisateurs obtiennent des tâches plus longues, certains utilisateurs obtiennent des tâches moins longues), quel est un bon moyen de trier automatiquement les tâches?

4
John

L'algorithme présenté ci-dessous fournit une solution. Je ne l'ai pas testé tout à fait, mais cela devrait vous donner une idée. Il ne pouvait être utilisé que si la somme (ressources disponibles)> = somme (temps de révision de la tâche requise).

Le processus commence par examiner le temps d'examen requis de Task1 et de la ressource 1 Temps disponible. Si le temps disponible est inférieur ou égal au temps requis par la tâche, la cellule d'intersection de T1, U1 est remplie du nombre d'heures qui remplirait l'heure de révision requise ou la durée de disponibilité de l'utilisateur 1.

Ensuite, nous allons à la tâche 2 et répéterons le processus.

Si l'allocation épuise une heure de disponibilité d'une ressource donnée, la logique passe à la ressource suivante.

Les itérations doivent s'arrêter lorsque cette condition est violée ou lorsque toutes les ressources ont été allouées.

Dans l'image ci-dessous, l'étape 0 est l'étape initiale. J'ai utilisé une couleur orange pour montrer les changements à chaque étape, en espérant que vous pouvez découvrir le processus.

NOTE :

Ce processus est biaisé à la manière dont les utilisateurs sont répertoriés de gauche à droite et ne distribuent pas le travail uniformément entre les utilisateurs. C'est-à-dire qu'un utilisateur peut travailler plus fort que le reste simplement parce qu'il/elle apparaît devant les autres.

enter image description here

2
NoChance

Peut-être que vous pourriez être sur-pensant cela. Organisez des tâches dans une simple file d'attente et une commande en fonction de la priorité. Avoir chaque utilisateur prendre la première tâche disponible devrait suffire. Des tâches plus longues pourraient prendre plus de temps à examiner, et courtes moins de temps, donc l'ordre dans lequel les utilisateurs semblent collecter la tâche suivante changeront lorsqu'ils terminent la tâche précédente et se présentent pour la prochaine. Cela n'a pas vraiment besoin d'être trop compliqué.

Les tâches préalablement affectées peuvent avoir des inconvénients sérieux. Ceci est fondamentalement un système de poussée et il a tendance à donner lieu à des "déchets" plus souvent que non. La mise en œuvre d'un système de traction serait beaucoup plus efficace et moins gaspillée en termes de planification et de ressources, car vous ne finirez pas de gérer les problèmes de synchronisation si les estimations de travail sont anormales ou sont interrompues en changeant de circonstances au sein de l'équipe.

0
S.Robins