Ordonnancement
On se propose d'atteindre un objectif dont la réalisation suppose l'exécution de plusieurs tâches soumises à diverses contraintes.
1) Déterminer l'ordre et un calendrier d'exécution des diverses taches compatibles avec les contraintes de façon à minimiser un critère, le plus souvent le temps global de réalisation du projet.
2) Repérer les éléments critiques du projet (qui ne peuvent être ralentis sans retarder l'ensemble du projet).
3) Améliorer le projet en:
Ø Allongeant des taches non critiques (diminution du coût).
Ø Diminuer des taches critiques (accélération au meilleur coût).
Ø Intégrer de nouvelles contraintes.
Les problèmes d'ordonnancement se rencontrent dans de nombreux domaines: La construction et les travaux publics, la gestion de la production et l'organisation d'ateliers, la gestion de projet (en particulier de projets informatiques), la conception de systèmes d'exploitation multi-tâches en informatique, etc....
Nous allons définir des notions dans le cas d'un problème où
1) L'ensemble des tâches est connu de manière statique et n'évolue pas avec le déroulement du projet.
2) L'exécution d'une tâche ne peut pas être interrompue (tâche non morcelable),
Soit n le nombre de tâches, numérotées 1, 2, ... , i, ..., n .
Notations:
ddi = date de début de la tâche i
dfi = date de fin de la tâche i
di = durée
d'exécution de la tâche i
Si l'exécution de la tâche i ne peut pas être interrompue,
on obtient: dfi=ddi+di
L'ordonnancement est alors totalement défini par les dates
de début des tâches.
A une tâche i sont souvent associées deux dates extrêmes:
ai = date de
disponibilité de la tâche i
bi = date d'échéance
ou de livraison de la tâche i
Un ordonnancement réalisable devra vérifier les contraintes: ai £ ddi £ dfi £ bi
Les tâches peuvent être liées par des relations d'antériorité. Souvent, elles se réduisent à des relations de succession simple:
"Pour commencer la tâche k , la tâche i doit être terminée"
La succession simple se traduit ici par ddk ³ dfi ou de préférence : ddk - ddi ³ di
On dit simple par
opposition à la contrainte suivante:
"Pour commencer la tâche k , la tâche i doit être commencée depuis
3 unités de temps"
qui se traduit ici par
ddk ³ ddi
+ 3 ou de préférence : ddk
- ddi ³ 3
De telles contraintes sont appelées contraintes potentielles, leur forme général est:
ddk - ddi ³
d(i, k)
où d(i, k) est un nombre quelconque (positif ou non), dont la signification dépendra de la situation concernée.
On se limitera dans un premier temps, à des contraintes potentielles correspondant à des relations de succession simple. Le cas général sera étudié ensuite.
La réalisation des tâches nécessitent l'emploi de ressources spécifiques. Leur limitation à chaque instant conduit à ce que l'on appelle les contraintes cumulatives.
La disponibilité des
ressources peut être constante au cours du temps, ou bien évoluer, généralement
selon un échéancier connu. On distinguera deux cas:
1) Les ressources renouvelables:
Les ressources utilisées par l'exécution d'une tâche redeviennent disponibles dès que la tâche est terminée: Les machines, la main d'œuvre sont des ressources renouvelables.
2) Les ressources
consommables
Elles disparaissent avec l'exécution de la tâche à laquelle elles sont allouées: Les ressources monétaires (financement des tâches), les matières premières sont des ressources consommables.
Le critère le plus souvent utilisé consiste à minimiser la durée totale, c'est à dire la date de la fin des travaux.
On peut aussi chercher à minimiser une fonction économique dépendant des retards pris par l'exécution des tâches par rapport aux dates d'échéance. Par exemple, avec les notations précédentes, le retard de la tâche i s'écrit: Ri = Max( dfi - bi , 0 )
Minimiser le plus grand retard = Max { Ri ; i=1 ... n }
Minimiser la somme des retards = Ri
Minimiser
une somme pondérée des retards = ci Ri
Minimiser un coût calculé en fonction de l'utilisation des ressources nécessaires aux tâches.
On dispose de 2 représentations graphiques possibles élaborées vers la fin des années 1950:
Ø Méthode PERT (Program Evaluation Research Task) (mis au point par la NASA dans le cadre de la construction des fusées Polaris).
Ø Méthode MPM (Méthode Potentiel Metra) par B. Roy.
Dans les 2 cas on doit :
Ø décomposer le projet en tâches de durées connues.
Ø répertorier les antériorités
Ø répertorier les autres contraintes.
Un exemple:
Taches |
A |
B |
C |
D |
E |
F |
G |
H |
Durées |
12 |
7 |
6 |
5 |
4 |
7 |
15 |
4 |
Antécédents |
|
|
A,B |
A,B |
B |
C,D |
A,E |
D,E |
Ce tableau se lit, par exemple: La tâche C ne peut commencer que si les tâches A et B sont terminées et elle dure 6 unités de temps.
Aussi appelé Graphe Potentiel Tâche ou AON (Activity on Node).
On construit un graphe valué orienté G(X,U), aussi appelé graphe potentiel taches en associant à chaque tache i un sommet Xi de X et à chaque contrainte potentielle écrite sous la forme: ddk - ddi ³ a(i,k) un arc (Xi, Xk) de valeur a(i,k) qui on le verra peut même être négative.
On ajoute aussi un sommet "début" et un sommet "fin", repères des dates de début et de fin des travaux.
Exemple
Ici il n'y a que des contraintes de succession simple, les arcs sortants d'un
sommet ont donc tous la même longueur (a(i,k) = di pour tout k).
Le sommet "début" est avant le début de toutes
les tâches et le sommet "fin" après la fin de toutes les tâches. Par
souci de clarté on se contente d'attacher ces sommets par des arcs non déduisibles
(par exemple "début"èC
est inutile puisque C est après la fin de A).
Aussi appelé Graphe Potentiel Etape ou AOA (Activity on Arc).
On construit un graphe valué orienté G = ( X , U ) tel que:
Les sommets correspondent maintenant à des étapes "après la fin des tâches antérieures " et "avant le début des tâches suivantes". On doit encore ajouter une étape "début" et une étape "fin".
Les arcs représentent
Soient des tâches réelles (chaque tâche est représentée par un arc de valeur la durée de celle-ci).
Soient des tâches fictives. Ces dernières ont pour objet de représenter des antériorités. Les tâches fictives sont également valuées. On notera a(i, k) la valeur d'un arc fictif reliant les étapes i et k. Pour le moment on pose a(i, k) = 0.
Le graphe P.E.R.T. correspondant à l'exemple ci-dessus est :
-Version 1 –
On remarque qu'il y a beaucoup d'arcs et de sommets. Il est possible d'envisager d'autres représentations, celle-ci a pour elle de proposer une solution systématique (graphe totalement développé).
- Version 2 -
Un problème
d'ordonnancement peut-être représenté par plusieurs graphes PERT. Le graphe
PERT comporte plus de sommets et d'arcs que le graphe Potentiels - Tâches, mais
permet une visualisation des étapes de fin des tâches et, de ce fait, une
meilleure compréhension des marges. Le graphe totalement développé est en fait
très proche du graphe MPM.
Quand on réduit un graphe PERT, il faut faire attention de ne pas perdre d'informations. Un procédé de vérification demande d'énumérer pour chaque tache la liste des taches antécédentes (en sautant les taches fictives).
Le résultat doit être conforme au problème posé. Ici les tâches antécédentes de G sont: E, A, B.
L'hypothèse ne parle que de A et E mais il n'y a pas contradiction puisque l'on sait par ailleurs que B est avant E.
Dans les deux cas, on a associé au problème d'ordonnancement
un graphe orienté dont les arcs sont porteurs d'informations sur la durée des
tâches et les relations de précédence entre celles-ci.
Définition. On appelle ordonnancement réalisable un système de dates dt(X) associées aux sommets X du graphe (représentant les tâches ou les étapes du problème) et vérifiant:
Pour tout arc (Xi, Xj) : dt(Xj) - dt(Xi) ³ d(i, j), d(i, j) étant la longueur de l'arc (Xi, Xj) :
On fixe une origine du temps en posant arbitrairement dt("début") = 0.
Proprièté: Pour tout chemin C allant du sommet "début" du projet à un sommet donné Xi
, et pour tout ordonnancement, on a:
dt(Xi) ³ longueur du chemin C
En effet, soit un chemin C = { Début, X1 , X2 , ... , Xi }
Les contraintes potentielles correspondantes s'écrivent:
dt(X1) - dt(Début) ³ d(Début, X1)
dt(X2) - dt(X1) ³
d(X1, X2)
…….
dt(Xi-1) - dt(Xi-2) ³ d(Xi-2, Xi-1)
dt(Xi) - dt(Xi-1) ³
d(Xi-1, Xi)
D'où, en faisant la somme des inégalités:
dt(Xi) = dt(Xi) -
dt("Début") ³ = longueur du chemin C
Donc la date d'un sommet du graphe (date d'une étape) est donc supérieure ou égale à la longueur du plus long chemin allant du sommet début des travaux au sommet considéré.
Rappel: Le problème admet des ordonnancements réalisables si et seulement si le graphe associé ne comporte aucun circuit de longueur strictement positive.
Les seules contraintes prises en compte sont les contraintes potentielles (contraintes de succession) et l'on cherche à proposer un jeu de dates aux sommets qui minimise la durée totale du projet.
La fonction critère est donc minimiser (date(Fin) - date(Début)) = minimiser (date(Fin)).
En prenant comme date, pour chaque étape, la longueur du plus long chemin allant du "début" des travaux à l'étape considérée, on obtient un ordonnancement réalisable particulier, appelé ordonnancement au plus tôt.
Un plus long chemin allant du début à la fin des travaux est appelé le chemin critique. Sa longueur, qui est la date au plus tôt du sommet fin des travaux, est la durée totale minimum compatible avec les contraintes d'antériorité.
Les tâches de ces chemins critiques sont les tâches critiques: Tout retard dans leur réalisation (donc toute augmentation de leur durée) est intégralement répercuté sur la durée totale minimum.
Pour des problèmes ne présentant que contraintes potentielles de succession simples (ce que nous envisageons pour le moment) on peut donc utiliser l'algorithme de Bellman.
Il faut cependant savoir que dans le cas général le graphe peut présenter des circuits et imposer l'utilisation de l'algorithme de Ford
Cas de notre exemple: la
durée totale minimum est de 27 et les tâches critiques sont A et G.
La durée totale minimum étant connue grâce au calcul des dates au plus tôt, on peut se demander quel retard peuvent prendre les tâches non critiques sans augmenter la durée totale minimum (les tâches critiques ne pouvant prendre aucun retard).
Il suffit de déterminer, pour chaque sommet, le plus long chemin allant de ce sommet à la fin des travaux: la date au plus tard est alors égale à la durée totale minimum (déjà calculée avec les dates au plus tôt) moins cette longueur.
Il peut aussi sembler plus simple de considérer le graphe obtenu en inversant le sens de tous les arcs et
en calculant la longueur des plus longs chemins allant de la fin des travaux
(devenue la racine du graphe) à chaque sommet.
On procède de la même façon. Pour l'exemple précédent, on obtient les dates au
plus tôt et au plus tard suivantes:
Attention aux dates associées aux sommets. Si (X, Y) est un arc encadrant une tâche A, tôt(X) est la date au plus tôt du début de A, tard(Y) est la date au plus tard de la fin de A.
En appelant tôt(X) (resp tard(X)) la date au plus tôt (resp. tard) de la tâche X, on voit qu'une date dt(X) de début de X compatible avec la durée totale des travaux doit vérifier tôt(X) <= dt(X)<= tard(X).
Cependant retarder le début de X n'est peut-être pas sans conséquences sur le début des autres tâches.
C'est le retard maximum que l'on peut imposer au début d'une tâche sans modifier la durée totale du projet: (Les marges totales des tâches critiques sont toujours nulles).
Dans le cas du graphe MPM :Mt(i) = tard(i) - tôt(i).
Dans le cas du graphe PERT: Sa tache i de durée d(i) est encadrée par les étapes X(i), Y(i):
c'est Mt(i) =
tard(Y(i))-tôt(X(i))-d(i)
Exemple Mt(E) = 12 - 7 - 4 = 1.
Elle représente le retard
maximum que l'on peut imposer au début d'une tâche sans modifier les dates au
plus tôt des tâches suivantes.
Pour la tâche i, on a Ml(i) = min(tôt(z)/ z successeur de i) - tôt(x(i)) - d(i).
Exemple Ml(E) = 11 - 7 - 4 = 0.
Remarque: Tache critique èMarge totale = 0 è Marge libre = 0.
Offre une visualisation
différente d'un ordonnancement en représentant les taches par une bande
horizontal dont la position est fixée sur l'axe des abscisse par les dates de
début et de fin.
On obtient donc des diagrammes différents selon que l'on utilise un ordonnancement au plus tôt, au plus tard, ou intermédiaire:
Pour l'exemple traité plus haut dans le cours associé à un ordonnancement au plus tôt, on obtient:
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
D |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
F |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
G |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
H |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Une ressource est dite renouvelable si son utilisation pour la réalisation d'une tâche la laisse à nouveau disponible une fois la tâche terminée.
Exemple: les équipements ou la main d'œuvre. (par opposition aux matières premières qui sont consommées par la tâche).
On associe au diagramme de Gantt un diagramme montrant le cumul des ressources utilisées au même moment. Exemple:
Avec une demande de ressource de 7 pour A, 4 pour B, 3 pour C et de 6 pour D.
Diagramme de Gantt associé aux dates au plus tôt:
On en déduit la courbe de charge associée
Diagramme de Gantt associé aux dates au plus tard:
On en déduit la courbe de charge associée
On considère le problème:
Tâches |
A |
B |
C |
D |
Durées |
7 |
8 |
6 |
9 |
Antécédents |
- |
- |
A , B |
B |
Coûts |
7 |
7 |
7 |
7 |
Pour lequel on a un financement par tranches de 10 aux dates 0, 5 et 10.
On trace sur un même graphe la courbe des besoins cumulés et celle des ressources cumulées
L'ordonnancement est réalisable si à tout moment la courbe des ressources excède celle des besoins.
On peut noter que cette condition n'est pas satisfaite dans notre exemple: Entre les dates 4 et 5 d'une part, et aussi entre les dates 8 et 10.
On recherche alors l'amplitude de la plus longue de ces périodes, ici : 2.
On obtient une solution réalisable en ajoutant +2 à toutes les dates au plus tard: On obtient:
La modélisation des problèmes d'ordonnancement par un graphe de type MPM permet également la gestion de contraintes plus élaborées que les contraintes potentielles d'antériorité simples vues jusqu'à présent.
Le principe général est le suivant:
Un arc (A, B) de valeur dt traduit le fait que deb(B)-deb(A) >= dt.
On se ramène donc systématiquement aux dates de début des tâches, et de se fait il peut apparaître des arcs négatifs et des circuits dans le graphe MPM correspondant.
La recherche des dates au plus tôt et au plus tard peut donc imposer l'utilisation de l'algorithme de Ford.
1) Pour commencer la tache B il faut que A (durée da) soit fini depuis au moins dt.
Pour commencer la B il faut que A soit commencée depuis au moins dt.
3) Pour commencer la tâche B il faut que A soit fini depuis au plus dt.
fin(A) +dt >=
deb(B) è deb(A) + da + dt >= deb(B) è deb(A)-deb(B) >= -(da+dt)
4) La tâche B doit suivre la tâche A sans délai:
Open
Workbench: téléchargeable à http://www.openworkbench.org/