• Aucun résultat trouvé

Cas d'une tâche intermédiaire ou nale

5.2 Génération de plans temporellement admissibles

5.2.3 Calcul des intervalles d'exécution des tâches dans un plan faisable

5.2.3.2 Cas d'une tâche intermédiaire ou nale

Pour i 6= 0, les dates de début d'exécution possibles de chaque tâche t appartenant au niveau li, sont calculées à partir des dates de n des prédécesseurs de la tâche et de sa propre date de début au plus tôt possible (I

t ). Rappelons qu'un plan faisable contient seulement de contraintes de précédence conjonctives et simples. La méthode de calcul n'est pas exactement la même pour les n÷uds OU (contraintes simples) et pour les n÷uds ET (contraintes conjonctives) du graphe ET/OU. En eet, pour qu'une tâche de type OU soit exécutée, il faut que la tâche prédécesseur soit exécutée. Pour qu'une tâche de type ET soit exécutée, il faut absolument que toutes les

5.2. Génération de plans temporellement admissibles 91 tâches prédécesseurs soient exécutées.

Cas d'une tâche OU

Soit t ∈ TM ∪ TF. On note toujours ∆t = {d1 t, d2

t, ..., dm

t } l'ensemble des durées d'exécution de la tâche t. Si t a un seul prédécesseur t0 (t0 → t), avec Et0 = {e1t0, ..., ept0} alors les dates de début et de n de t sont calculées de la manière suivante :

1. Déterminer l'ensemble St (initialisé à ∅) des dates de début d'exécution de t comme suit :  Pour i = 1 jusqu'à i = p (p est le nombre de dates de n possibles de t0)

St= St∪ {max(It, eit0+ δt0,t)}.

Chaque date de n de la tâche t0 précédant la tâche t est candidate pour devenir une date de début possible de t. Pour calculer les dates de début possibles de t, nous choisissons le maximum entre la date de début au plus tôt de sa fenêtre temporelle et chaque date de n possible de t0, bien sûr en tenant compte des délais d'attente. Chaque résultat obtenu représente une date de début possible pour t.

2. Déterminer l'ensemble Et (initialisé à ∅) des dates de n d'exécution de t comme suit :  Pour i = 1 jusqu'à i = p

 Pour j = 1 jusqu'à j = m Et= Et∪ {eijt = sit+ djt}

Les dates de n d'exécution possibles de t sont calculées en ajoutant à chaque date de début trouvée à l'étape 1, ses diérentes durées d'exécution possibles.

3. Iij

t = [sit, eijt ]est un intervalle d'exécution possible de t tel que si

t∈ St et eij

t ∈ Et.

s1t6 = max(It6, e1t1) = max(6, 6) = 6 (rappelons que e2

t1 = 7 n'est pas valide) St6 = {6} e1t6 = s1t6 + d1t6 = 6 + 8 = 14 e2t6 = s1t6 + d2t6 = 6 + 9 = 15 e2t6 = s1t6 + d2t6 = 6 + 10 = 16 Et6 = {14, 15, 16} s1t7 = max(It7, e1t2) = max(5, 4) = 5 s2t7 = max(It7, e2t2) = max(5, 5) = 5 St7 = {5} e1t7 = s1t7 + d1t7 = 5 + 15 = 20 e2t7 = s1t7 + d2t7 = 5 + 17 = 22 Et7 = {20, 22} It6 = {[6, 14], [6, 15], [6, 16]} It7 = {[5, 20], [5, 22]}

Exemple 3 Supposons, pour simplier, que les délais entre les tâches sont égaux à zéro, le calcul des intervalles d'exécution de t6 et de t7 est représenté dans la table3.

De manière plus formelle, l'algorithme16résume le calcul des intervalles d'exécution possibles d'une tâche OU.

début It= ∅

pour tout i = 1..p faire si I t > eit0+ δt0,t alors si t= It sinon sit= eit0 + δt0,t n

pour tout j = 1..m faire eijt = sit+ djt Itij = [sit, eijt ] It= It∪ Itij n n n

Algorithme 16  Calcul des intervalles d'exécution possibles d'une tâche OU Cas d'une tâche ET

Soient t ∈ TM ∪ TF et ∆t = {dt1, d2t, ..., dmt } l'ensemble des durées d'exécution de la tâche t. Si t a un ensemble de prédécesseurs directs t1, t2, . . . , tn ([t1, t2, . . . , tn] → t) et si pour toute tâche ti (i = 1..n), Eti = {et1i, e2ti, ..., eji

ti} alors les dates de début et de n de t sont calculées de la manière suivante :

1. Déterminer l'ensemble St (initialisé à ∅) des dates de début d'exécution de t comme suit :  Calculer le maximum des dates de n (max(ek

ti+ δti,t)) des tâches précédentes de t.  St= St∪ {max(It, max(ekti+ δti,t))}

En eet, chaque date de n de chaque tâche t1, t2, . . . , tn prédécesseur de la tâche t est candidate pour devenir une date de début possible de t. Une date de n possible d'une tâche prédécesseur ti est une date de début possible pour t si, après l'ajout du délai d'attente, elle est supérieure à la date de début au plus tôt de t et elle est supérieure à toutes les dates de n possibles des autres tâches prédécesseurs de t.

2. Déterminer l'ensemble Et (initialisé à ∅) des dates de n d'exécution de t comme suit :  Pour k = 1 jusqu'à k = p (p représente la cardinalité de l'ensemble St déterminé à

l'étape 1)

 Pour r = 1 jusqu'à r = m (m est le nombre de durées d'exécution de t) Et= Et∪ {ekr

5.2. Génération de plans temporellement admissibles 93 Les dates de n d'exécution possibles de t sont calculées en ajoutant à chaque date de début trouvée à l'étape 1, ses diérentes durées d'exécution possibles.

3. Ikr

t = [skt, ekrt ]est un intervalle d'exécution possible de t tel que sk

t ∈ St et ekr

t ∈ Et.

De manière plus formelle, l'algorithme 17 calcule les intervalles d'exécution possibles d'une tâche ET .

début

max ← 0, It= ∅

pour tout i = 1..n faire pour tout k = 1..ji faire

si ek

ti+ δti,t > maxalors max = ek ti+ δti,t n n si I t > maxalors skt = It sinon skt = max n

pour tout r = 1..m faire ekrt = skt + drt Itkr = [skt, ekrt ] It= It∪ Ikr t n n

Algorithme 17  Calcul des intervalles d'exécution possibles d'une tâche ET

Exemple 4 Les intervalles d'exécution de t10 sont calculés dans la table 5.1. Remarquons que l'intervalle I23

t10 = [22, 32] a une date de n supérieure à I+

t10 = 30. Cet intervalle n'est donc pas valide. Si par contre nous avions I+

t10 < 24, alors tous les intervalles d'exécution de t10 dans ce plan faisable ne seraient pas valides puisqu'ils dépassèrent I+

t10. Par conséquent, nous considérons que la tâche t10 ainsi que le plan qui la contient ne sont pas valides.

Le nombre d'intervalles d'exécution de t dépend du nombre de dates de début d'exécution possibles calculées à l'étape1ci-dessus (qui elles-mêmes dépendent des dates de n d'exécution possibles de toutes les tâches précédentes) et du nombre de ses durées d'exécution possibles. Nous calculons l'ensemble des dates de n possibles de l'ensemble des tâches prédécesseurs de t,

s1 t10=max(I t10, max(e1 t6, e1 t7))=max(20, max(14, 20)) = 20 s2t10=max(I

t10, max(e1t6, e2t7))=max(20, max(14, 22)) = 22 s3t10=max(I

t10, max(e2t6, e1t7))=max(20, max(15, 20)) = 20 s4t10=max(I

t10, max(e2t6, e2t7))=max(20, max(15, 22)) = 22 s5t10=max(I

t10, max(e3t6, e1t7))=max(20, max(16, 20)) = 20 s6 t10=max(I t10, max(e3 t6, e2 t7))=max(20, max(16, 22)) = 22 St10 = {20, 22} e11 t10 = s1 t10+ d1 t10 = 20 + 4 = 24 e12t10 = s1t10+ d2t10 = 20 + 6 = 26 e13t10 = s1t10+ d3t10 = 20 + 10 = 30 e21t10 = s2t10+ d1t10 = 22 + 4 = 26 e22t10 = s2t10+ d2t10 = 22 + 6 = 28 e23 t10 = s2 t10+ d3 t10 = 22 + 10 = 32 Et10 = {24, 26, 28, 30, 32} It10 = {[20, 24], [20, 26], [20, 30], [22, 26], [22, 28], [22, 32]}

Tab. 5.1  Calcul des intervalles d'exécution possibles de la tâche t10 de l'exemple de la sec-tion5.1.5

noté E(t1, . . . , tn) comme suit :

E(t1, . . . , tn) = {max(etk1t1, ekt2t2, . . . , ektn

tn )/1 ≤ kt1 ≤ pt1. . . 1 ≤ ktn ≤ ptn}

où i = 1..n et ptireprésente la cardinalité de l'ensemble des dates de n d'exécution possibles de ti. Par exemple si une tâche t a trois prédécesseurs directs t1, t2 et t3qui terminent leurs exécutions à Et1 = {e1t1, e2t1, e3t1}, Et2 = {e1t2, et22, e3t2}et Et3 = {e1t3, e2t3}respectivement, l'ensemble E(t1, t2, t3) est composé de l'ensemble à 18 éléments au plus des dates de n d'exécution possibles suivant :

{max(e1t1, e1t2, e1t3), max(e1t1, e1t2, e2t3), . . .}

Au pire des cas, c.-à-d. si tous les maximums de toutes ces combinaisons sont diérents, nous avons :

|E(t1, . . . , tn)| = |Et1| · |Et2| · . . . · |Etn|

Une fois déterminé l'ensemble des dates de n possibles (E(t1, . . . , tn)) pour tous les prédé-cesseurs de la tâche t, nous calculons son nombre d'intervalles d'exécution possibles. Au pire des cas, ce nombre est égal à |E(t1, . . . , tn)| · |∆t|.