20090312a
Ce document est actuellement un projet alpha. Il est destin tre beaucoup chang, mme compltement
rcrite si ncessaire. L'algorithme tel que dcrit encore manque quelques fonctionnalits encore. Il est modifi
ainsi que les tests de rgression qui apporte de nouvelles usecases. Il est encore rendu public de donner
des ides et dj obtenir des commentaires. Actuellement 24 usecases de rgression sont couverts
avec succs par cet algorithme.
Contenu
[ Hide ]
1 Objectif
4 conventions
6 Explication dtaille
6.1.1 Identifier la faon dont une tche est assigne ses ressources disponibles
6.1.4 La structure principale stockant la faon dont les tches sont attribues aux ressources
8.1 Ruby
9 Remarques
11 contacts
[ Modifier ]Objectif
Le but de cet article est de prsenter un algorithme libre de mise niveau des ressources qui peuvent tre mis en
uvre facilement.
Il donnera des structures de donnes simples et des fonctions simples qui peuvent tre presque copis / colls
courir. On suppose que le lecteur possde dj une connaissance de base de la gestion de projet, ce qui signifie qu'il
sait sur le problme de la mise niveau des ressources l'intrieur d'un projet.
[ Modifier ] Lesdonnes
d'entre
Calendrier des disponibilits: il est un calendrier contenant un certain nombre d'heures de travail pour
chaque jour depuis le dbut jusqu' la fin du projet.
Tches: ils contiennent les attributs suivants:
Priorit: il mesure combien l'importance de cette tche est. Il est un nombre entier (plus le plus
important).
Liste des successeurs: une liste d'autres tches qui ne peuvent pas commencer moins celle-ci est
termine.
Liste des ressources assignables: une liste de rfrences aux ressources qui peuvent tre affectes
cette tche. Pour chaque ressource assignable, il est possible d'indiquer un montant maximal d'heures de
travail pour cette association.
Diffrentes faons d'attribuer un ensemble de ressources une tche (l'algorithme peut essayer plusieurs
tentatives et choisir le meilleur). Chaque voie peut tre rgl compte tenu de certains paramtres humains. Les
paramtres sont mdit avec des coefficients:
Il peut tre prfrable d'affecter seulement 1 ressource une tche si possible mme si la tche est
un peu retard.
Il peut tre prfrable de ne pas modifier les tches assignes d'une ressource trop souvent.
Il peut tre prfrable pour une tche de rutiliser les mmes ressources que ses prdcesseurs.
Les plus de ressources travaillent sur une tche, plus l'effort qu'il faudra pour terminer la tche en
raison de contraintes de la communication humaine.
[ Modifier ] Lesdonnes
de sortie
Calendrier des tches travailler sur: pour chaque jour, un ensemble de tches et de leurs heures de
travail correspondant.
[ Modifier ]Conventions
Les conventions de dnomination suivantes sont valables pour les explications suivantes:
... Reprsente une squence (pourrait tre undefined) des articles. Peut tre utilis dans les listes ([A, ..., Z]).
carte <TypeA, TypeB> reprsente un type de carte, dont les cls sont de type TypeA et les valeurs de type
TypeB.
liste <TypeA> reprsente un type de liste, le stockage des articles de type TypeA.
[NAMEA: TypeA, titreB: TypeB, ...] reprsente une liste d'lments numriques finis qui ont un nom donn et
un type donn. Cela peut tre considr comme une structure de donnes d'enregistrement. Les valeurs d'une telle
structure peuvent tre abrges [ValueA, ValueB], tant donn que ValueA est affecte l'attribut NAMEA, et ainsi
de suite.
T.MaximalResourceAllocation [R] reprsente le nombre maximal d'heures de la ressource R peut travailler sur
la tche T.
T.SharingResourcesTasksID est un identifiant qui est le mme pour toutes les tches qui peuvent partager au
moins 1 ressource. Elle peut tre considre comme un identifiant d'une partition des tches. Il identifie toutes les
tches qui pourraient influencer les uns des autres en raison des affectations de ressources.
La granularit des exemples dans ce document est de jours. Cependant, l'algorithme prend en compte la cession
heures. Ce choix dans le document a t faite pour des raisons de clart.
[ Modifier ]Prsentation
[ Modifier ]Principe
de base
L'ide principale de l'algorithme est de considrer, pour chaque tche, les ressources disponibles qui pourraient
travailler pour elle. Par consquent, un calendrier de la disponibilit des ressources pour chaque tche est construit.
Ensuite, les tches sont assignes 1 par 1, du plus important au moins important, leurs ressources
disponibles. Chaque fois qu'une tche est assigne, les ressources disponibles des autres tches sont mises jour en
consquence.
[ Modifier ]Computing
L'efficacit de l'algorithme rside dans l'ordonnancement des tches; qui est le calcul de l'importance des tches. Il est
obligatoire que les plus importants (les tches hautement prioritaires) sont affects leurs ressources avant les autres,
si possible.
Toutefois, il est possible que les tches de faible priorit doivent tre attribus avant les hautement prioritaires, sinon ils
retarderaient plus grands encore prioritaires en raison de dpendances. Ces retards peuvent tre vus que lorsque nous
attribuons des tches loin dans l'avenir, et peuvent difficilement tre considrs lors de l'attribution premiers.
Par consquent, le calcul de l'importance d'une tche ncessite d'essayer toutes les affectations possibles des tches
aux ressources. Il est impossible en raison de contraintes de performance.
Ceci est la raison pour laquelle l'algorithme fait une premire sorte de tches, en fonction de l'importance simplement
calcul (en utilisant des priorits et des chemins critiques). Il est alors possible que cet ordre ne sont pas toujours
optimale. Il peut tre compris lorsque l'algorithme se rend compte que la tche est retarde, mais aurait pu tre affect
aux ressources dans le pass qui ont dj t affect une autre tche. Par consquent, l'ordre des tches est modifi
dynamiquement en fonction de ces rsultats, et puis il essaie nouveau de les affecter dans ce nouvel
ordre. L'algorithme se souvient de chaque sorte qui a t essay et puis peut choisir parmi les chemins prvenus ou les
chemins les moins chers.
[ Modifier ] lestches
L'ide principale tant que nous devons trouver le meilleur type possible des tches, l'algorithme doit garder une trace
de tous les chemins essay. Ceci induit naturellement la cration d'un arbre de tous les chemins essay dj rencontrs
dans l'algorithme.
Chaque nud de cet arbre reprsente une tche assigne ses ressources d'une certaine faon. Une branche de cet
arbre reprsente une sorte donne des tches, et associ chaque noeud sont les consquences d'une telle cession (si
elle retarde tort d'autres tches ou non).
Ensuite, l'algorithme peut tre interprt comme trouver le meilleur chemin entre cet arbre, qui est celle qui minimise les
consquences.
Voici un exemple d'une cession qui doit rorganiser les tches.
[ Modifier ]Plusieurs
Chaque fois qu'une tche est assigne certaines de ses ressources, plusieurs tentatives sont faites pour le faire
diffremment, et alors la meilleure solution est maintenue. Chaque tentative est enregistre, avec les consquences
qu'elle a en termes de retards de tches, et il est alors possible de choisir entre les diffrentes faons dont l'un est le
meilleur.
[ Modifier ]architecture
Algorithme point d'entre reprsente la principale mthode de l'algorithme, la manipulation des entres et
trouver diffrentes faons de les affecter et comparer plusieurs solutions pour obtenir le meilleur.
Le gestionnaire de la rpartition des tches tente d'assigner une seule tche ses ressources. Il met ensuite
jour toutes les informations pertinentes qui pourraient tre touchs sur d'autres tches. Enfin, il vrifie si d'autres
tches peuvent accepter le rendez-vous.
Les chemins gestionnaire stocke tous les chemins essay (les trie de tches) l'algorithme obtenu, et pour
chacun d'entre eux stocke les consquences de ce chemin eu sur les tches. Ensuite, ce gestionnaire donne la
possibilit de rcuprer le meilleur chemin possible en fonction de cette information.
[ Modifier ]Rsum
Algorithme
2. Trier les tches par ordre d' importance simple. L'importance est calcule de manire rcursive que la valeur
maximale entre la priorit de la tche et l'importance de tous ses successeurs directs (successeurs qui pourrait
commencer juste aprs l'achvement de cette tche)
3. Appel d' une mthode rcursive qui tente d'assigner des tches 1 par 1:
3.1. Essayez plusieurs faons d'attribuer la tche ses ressources disponibles. Pour chaque voie:
3.1.1. Calculer les consquences de cette cession dans les tches suivantes non encore attribus (calculer
leur nouvel horaire minimal, selon de la disponibilit et les tches des nouvelles ressources des
dpendances).
3.1.2. Terminez la mmoire de chemins essay avec ces informations.
3.1.3. Si l'affectation ne se dplace pas des tches (leur minimum de date de fin) qui sont plus importants que
ceux dj attribus, appelez rcursivement la mthode qui assignera la tche suivante dans la liste. Rappelez
- vous toutes les solutions possibles renvoyes par cet appel, ainsi que des sentiers meilleurs possibles , il
peut proposer en cas de impossibilities.Once toutes les itrations ont t essays, soit renvoyer les solutions
possibles, ou trouver des chemins meilleurs possibles si aucune solution n'a t trouve.
3.2. S'il y a une meilleure voie qui peut tre prise ce stade, faire en revenant aux itrations avec le nouveau
chemin.
4. Choisir la meilleure solution parmi tous ceux mmoriss.
[ Modifier ]Explication
[ Modifier ]Premires
dtaille
donnes
[ Modifier ]Identifier la faon dont une tche est
des acteurs
mthodes d'algorithme
dtailles
Principal
[ Modifier ]Solution
Manager
SolutionManager :: findAssignmentForTasksList
SolutionManager :: tryPossibleSolution
SolutionManager :: assignCompleteTask
[ Modifier ]Assignment
Task Manager
TaskAssignmentManager :: assignPossibleSolution
TaskAssignmentManager :: shiftChildrenTasks
TaskAssignmentManager :: shiftTaskMinimalDates
TaskAssignmentManager :: computeShiftedDateHours
TaskAssignmentManager ::
removeCountedHoursFromResourcesBuffers
TaskAssignmentManager :: removeResourcesFromOtherTasks
TaskAssignmentManager :: notifyMinimalEndDateChanged
[ Modifier ]Importance
gestionnaire
ImportanceManager :: populateImportances
ImportanceManager :: getSortedTasks
ImportanceManager :: updatePredecessorsImportances
ImportanceManager :: updateImportance
[ Modifier ] Leschemins
Gestionnaire
PathsManager :: findPossibleBetterPathForTask
PathsManager :: computeShiftedTasksList
PathsManager :: findUnknownPathReorderingShiftedTasks
PathsManager :: computeNewPathMovingTask
PathsManager :: validateUnknownPath
PathsManager :: reorderBranch
PathsManager :: findPossibleBetterPathAlreadyKnown
PathsManager ::
getBestPathAmongBestShiftedImportancePaths
PathsManager :: findSmallestShiftedConsequencesPaths
PathsManager :: completeTriedPath
[ Modifier ] Lesimplmentations
[ Modifier ]Ruby
actuelles
2.
3.
4.
5.
.
Termin en 2,205 secondes.
24 tests, 24 assertions, 0 checs, 0
erreurs
En outre, vous pouvez parcourir l'arborescence SVN
ici: http://resourcelevel.svn.sourceforge.net/viewvc/resourcelev
el/trunk/ruby/
[ Modifier ]Remarques
La faon dont les tches sont tries est (ou devrait tre,
en cas de bugs) exhaustive. Cela signifie qu'une fois qu'il
a t dcid comment les tches sont attribues aux
ressources, l'algorithme doit trouver le genre optimale des
tches pour assurer ceux avec la plus grande priorit sera
accorde en premier.
PathsManager :: findPossibleBetterPathForTask : Un
goulot d'tranglement de performances de haut
niveau. Si cette mthode donne de meilleurs
chemins d'une manire stupide, il peut soit entraner
les mmes problmes que ceux rencontrs
auparavant par des chemins prcdents, ou
entraner des chemins choisis au hasard et donc
jamais trouver une bonne solution facilement.
TaskAssignmentManager ::
notifyMinimalEndDateChanged : Un faible goulot
d'tranglement au niveau. Cette mthode est
appele trs souvent, comme pour chaque mission
d' essayer, il va modifier toutes les tches affectes
de manire rcursive due l' limination des
ressources ou les dpendances de tches.
[ Modifier ] Desides
Il a t choisi de toujours
remplir PathNode_Type .TaskPaths avec la carte calcule
de tches accessibles dans PathsManager ::
completeTriedPath . Cela peut tre conteste que dans
certains cas, cette information sera inutile. Les cas sont
quand nous compltons un chemin qui se traduit par un
changement d'un successeur direct (ne faisant pas partie
du chemin critique) en raison de la stratgie d'affectation
seulement. Dans ce cas particulier, nous
n'appelons PathsManager ::
findPossibleBetterPathForTask mthode, de sorte que la
population peut tre inutile. Cependant, nous devons
nous assurer qu'il peut encore tre calcul plus tard (si le
chemin est choisi pour tre forc). Nous pourrions donc
penser peupler cette carte que lorsque ncessaire, mais
cela a 2 inconvnients majeurs:
[ Modifier ]Contacts
Tout commentaire, suggestion, remarque, ide ... est la
bienvenue.
Je prvois sur l'amlioration de cet algorithme beaucoup, et
trs reconnaissants toute aide que vous pouvez donner ce
sujet.
Vous pouvez utiliser la page de discussion ou mon email
contribuer.
Merci
Muriel Salvan