Vous êtes sur la page 1sur 19

5 Ordonnancement avec temps de livraison

Problème : 1/ri,delivery times/Cmax

Supposons qu’il existe, en plus du temps de traitement, un temps de finition ou de livraison


sur d’autres machines. Ce temps de traitement secondaire noté qi constitue la deuxième phase
de traitement des tâches. Ce problème est très difficile à résoudre.

Comme application, on peut imaginer la situation suivante, qu’on peut translater à d’autres
situations similaires : Un pizzario reçoit plusieurs commandes de pizzas, de différentes garni-
tures, de clients habitants des endroits différents et qu’il doit les livrer à leurs domiciles. Ici,
nous avons une seule machine et plusieurs tâches (différents formes et garnitures), chacune
nécessitant un temps de préparation et de cuisson et un temps de livraison.

30
L’heuristique (de Schrage, 1971) suivante basée sur l’idée qu’une tâche de plus grand temps
de finition est choisie parmi les tâches de plus petite date de disponibilité.

Algorithme 1/ri,delivery times/Cmax ;


début - t := min{ri} ;
Ti ∈T
- tantque T 6= ∅
faire - T 0 := {Ti ∈ T /ri ≤ t} ;
- Choisir Ti ∈ T 0 telle que pi = max0{pk /qk = max0{ql }} ;
Tk ∈T Tl ∈T
- Ordonnancer Ti à l’instant t ;
- Ci := t + pi ;
- T := T \ {Ti} ;
- t := max{Ci, min {rl }} ;
Tl ∈T,T 6=∅
fait ;
- Cmax := max {Ci + qi}
1≤i≤n
fin

31
Exemple 8 Soit à ordonnancer 7 tâches T1, . . . , T7 dont les dates de disponibilité, les temps
de traitement et les temps de finition sont donnés dans le tableau ci-dessous.

Ti T1 T2 T3 T4 T5 T6 T7
ri 10 13 11 20 30 0 30
pi 5 6 7 4 3 6 2
qi 7 26 24 21 8 17 0

32
Exemple 8 Soit à ordonnancer 7 tâches T1, . . . , T7 dont les dates de disponibilité, les temps
de traitement et les temps de finition sont donnés dans le tableau ci-dessous.

Ti T1 T2 T3 T4 T5 T6 T7
ri 10 13 11 20 30 0 30
pi 5 6 7 4 3 6 2
qi 7 26 24 21 8 17 0

La séquence obtenue par l’algorithme est : T6 , T1 , T2 , T3 , T4 , T5 , T7.

Ti T1 T2 T3 T4 T5 T6 T7
ti 10 15 21 28 32 0 35
Ci 15 21 28 32 35 6 37
C i + qi 22 47 52 53 43 23 37

La durée totale est 53

33
L’ordonnancement est :

T6 T1 T2 T3 T4 T5 T7
-

0 10 20 30 40 50 60 temps

La séquence optimale est : T6 , T3 , T2 , T4 , T1 , T5 , T7 de durée Cmax = 50.

34
6 Ordonnancement avec contraintes de précédence

Théorème 7 Le problème 1/prec/Cmax est résolu par l’algorithme suivant en O(n2).

n
P
Notons que Cmax = pi .
i=1

La séquence optimale est de la forme π(1), π(2), . . . , π(n) où π(i) est la tâche de la i-ième
position et correspond à un ordre topologique quelconque. Pour une description bien précise
de l’algorithme nous représentons les contraintes de précédence par la matrice d’adjacence
correspondante A = (aij ) où aij = 1 si et seulement si la tâche Tj est le successeur direct de la
tâche Ti. Soit ns(i) le nombre de successeurs immédiats de la tâche Ti.

35
Algorithme (problème 1/prec/Cmax) ;
n
P
début pour i := 1 haut n faire ns(i) := aij fait ;
j=1
S := T ;
pour k := n bas 1
faire trouver une tâche Tj de S avec ns(j) = 0 ;
S := S \ {Tj } ; ns(j) := +∞ ; π(k) := j ;
pour i := 1 haut n faire
si aij = 1 alors ns(i) := ns(i) − 1 fsi
fait
fait
fin

36
Exemple 7 Soit à ordonnancer 6 tâches T1, . . . , T6 dont les temps de traitement sont donnés
dans le tableau ci-dessous et le graphe de précédence est donné dans la figure ci-dessous.

Ti T1 T2 T3 T4 T5 T6
pi 1 5 3 7 9 4

T1
"!
J
J
J
J
J
J
J
# #
J^

T2 - T3
"!
J "!
J
J J
J J
J J
J J
J J
J J
# #
J^  #
J^

T4 T5 T6
"! "! "!

37
Le déroulement de l’algorithme nous donne :
— ns(1) = 2 ; ns(2) = 3 ; ns(3) = 2 ; ns(4) = 0 ; ns(5) = 0 ; ns(6) = 0 ;
— S := {T1, T2, T3, T4, T5, T6} ;
— k = 6 : j = 4 ; S = {T1, T2, T3, T5, T6} ; ns(4) = +∞ ; π(6) = 4 ;
ns(1) = 2 ; ns(2) = 2 ; ns(3) = 2 ; ns(4) = +∞ ; ns(5) = 0 ; ns(6) = 0 ;
— k = 5 : j = 5 ; S = {T1, T2, T3, T6} ; ns(5) = +∞ ; π(5) = 5 ;
ns(1) = 2 ; ns(2) = 1 ; ns(3) = 1 ; ns(4) = ns(5) = +∞ ; ns(6) = 0 ;
— k = 4 : j = 6 ; S = {T1, T2, T3} ; ns(6) = +∞ ; π(4) = 6 ;
ns(1) = 2 ; ns(2) = 1 ; ns(3) = 0 ; ns(4) = ns(5) = ns(6) = +∞ ;
— k = 3 : j = 3 ; S = {T1, T2} ; ns(3) = +∞ ; π(3) = 3 ;
ns(1) = 1 ; ns(2) = 0 ; ns(3) = ns(4) = ns(5) = ns(6) = +∞ ;
— k = 2 : j = 2 ; S = {T1} ; ns(2) = +∞ ; π(2) = 2 ;
ns(1) = 0 ; ns(2) = ns(3) = ns(4) = ns(5) = ns(6) = +∞ ;
— k = 1 : j = 1 ; S = ∅ ; ns(1) = +∞ ; π(1) = 2 ;
ns(1) = ns(2) = ns(3) = ns(4) = ns(5) = ns(6) = +∞ ;

La séquence optimale est donc T1, T2, T3, T6, T5, T4 avec Cmax = 29.

38
1/prec, pi = 1, ri/Cmax

Théorème 8 Le problème 1/prec, pi = 1, ri/Cmax est résolu en O(n2) par l’algorithme sui-
vant.

La première étape consiste à modifier les dates de disponibilité. Si la tâche Tj est un successeur
de de la tâche Ti et ri + pi > rj alors Tj ne peut pas débuter avant rj0 = ri + pi. Donc, on doit
remplacer rj par rj0 . Pour cela, on commence par ranger les tâches suivant une énumération
topologique (c’est-à-dire, si Ti < Tj alors i < j).

39
Procédure énumération topologique ;
début
1- i := 1 ;
2- tantque il existe un sommet v ∈ V sans précédesseur
faire - α(v) = i ;
- supprimer le sommet v et tous les arcs (v, j) ;
- i := i + 1 ;
fait ;
3- si V 6= ∅
alors le graphe G = (V, E) possède un circuit et il n’existe aucune énumération to-
pologique
fsi ;
fin ;

α(v) désigne le nouveau numéro du sommet v.

40
Ensuite, modifier les dates de disponibilité en utilisant la procédure suivante.

Procédure modifier ri ;
début pour i := 1 haut n − 1
faire pour j := i + 1 haut n
faire si Ti < Tj (immédiat) alors rj := max{rj , ri + 1} fsi
fait
fait
fin ;

Avec cette procédure nous avons : rj > ri si Ti < Tj .

En rangeant donc les tâches dans l’ordre croissant de leurs nouvelles dates de disponibilité,
on obtient un ordonnancement optimal. L’ordonnancement est constitué de plusieurs blocs
où chaque bloc est constitué d’un ensemble de tâches ordonnancées sans temps mort. La
procédure suivante construit les blocs de la solution optimale.

41
Procédure blocs ;
début
1- ranger les tâches dans l’ordre croissant de leurs nouvelles dates de disponibilité ;
2- t := r1 ; i := 1 ; j := 1 ; B1 := ∅ ;
3- tantque i ≤ n
faire - tantque ri ≤ t
S
faire - Bj := Bj {Ti} ;
- t := t + 1 ;
- i := i + 1 ;
- Ci := t ;
fait ;
- t := ri ; j := j + 1 ; Bj := ∅ ;
fait ;
fin ;

42
Exemple 8 Soit à ordonnancer 6 tâches T1, . . . , T6 dont les dates de disponibilité sont donnés
dans le tableau ci-dessous et le graphe de précédence est donné dans la figure ci-dessous.

Ti T1 T2 T3 T4 T5 T6
ri 0 0 3 3 2 8
TABLE 1 – Dates de disponibilité des tâches de l’exemple.
#

T1
"!
J
J
J
J
J
J
J
# #
J^

T2 - T3
"!
J "!
J
J J
J J
J J
J J
J J
J J
# #
J^  #
J^

T4 T5 T6
"! "! "!

F IGURE 1 – Graphe de précédence de l’exemple.

43
Le déroulement de l’algorithme nous donne :
— l’ordre topologique est : T1, T2, T3, T4, T5, T6 ;
— les nouvelle dates de disponibilité sont :

Ti T1 T2 T3 T4 T5 T6
ri0 0 1 3 3 4 8
TABLE 2 – Nouvelles dates de disponibilité.

— les différents blocs sont : B1 = {T1, T2} ; B2 = {T3, T4, T5} ; B3 = {T6} ;
— la solution optimale est :

T1 T2 T3 T4 T5 T6
-

0 1 2 3 4 5 6 7 8 9 temps
F IGURE 2 – Ordonnancement optimal des tâches.

Cmax = 9.

44
1/prec/Lmax

Théorème 9 Le problème 1/prec/Lmax est résolu en O(n2) par l’algorithme suivant.

Algorithme 1/prec/Lmax ;
début
1- modifier les dates échues comme suit : d∗i := min{di, min{dj /Ti < Tj }} ;
2- ordonnancer les tâches suivant l’ordre croissant des nouvelles dates échues en respectant
les contraintes de précédence ;
fin ;

45
1/prec, pi = 1/U

Théorème 10 Le problème 1/prec, pi = 1/U est NP-difficile (on ne connait pas un algorithme
efficace pour le résoudre).

46
7 Quelques résultats de complexité
Polynomial NP-difficile1
1//Cmax O(n) 1/set − up/Cmax
1/ri/Cmax O(nlogn) 1/ri, d˜i/Cmax
1/ri, deliverytimes/Cmax
1//Cw O(nlogn) 1/ri/C
1/ri, pi = 1/C O(nlogn)
1/pmtn, ri/C O(nlogn) 1/pmtn, ri/Cw
1//Lmax O(nlogn) 1/ri/Lmax
1/pmtn, ri/Lmax O(nlogn)
1//U O(nlogn) 1//Uw
1/pmtn, ri/U O(n5)
1//T
1/pmtn/T
1
On ne connait pas un algorithme efficace pour le résoudre.

47
Polynomial NP-difficile1
1/prec/Cmax O(n2)
1/prec, ri/Cmax O(n2)
1/prec, ri, pi = 1/Cmax O(n2)
1/prec, pmtn, ri/Cmax O(n2)
1/prec/Lmax O(n2)
1/sp/Cw O(nlogn) 1/tree, ri, pi = 1/Cw
1/tree, ri, pmtn/C
1/prec, pi = 1/U
1/prec, pi = 1/C
1/tree, pi = 1/Tw
1
On ne connait pas un algorithme efficace pour le résoudre.

48

Vous aimerez peut-être aussi