• Aucun résultat trouvé

5.2 Une deuxième procédure par séparation et évaluation

5.2.2 Illustration de l'algorithme TCOR-2

Nous reprenons l'exemple déni dans le tableau 4.1 pour illustrer l'application de l'al- gorithme TCOR-2, et discuter de sa performance relativement à TCOR. L'application de l'algorithme TCOR-2 conduit à passer par les étapes suivantes :

Proc SetPivotLibreAmeliore(T ravailP ivot, T ravailLibre, Sequence_Carlier, T ) T ravailP ivot ← N U LL; T ravailLibre ← NULL ;

Arret ← f alse;

Sommet_i ← Premier sommet du chemin critique ; TantQue Arret = false et Sommet_i 6= NULL faire

Initialiser i au dernier travail sur le chemin critique appartenant à la pyramide de Sommet_i ; Ordrechemin_critique ← s ≺ i;

TantQue Arret = false et i 6= Sommet_i faire Déterminer OrdreSequence_Carlier entre s et i ;

Si OrdreSequence_Carlier 6= Ordrechemin_critique alors

Arret ← true;

T ravailP ivot ← Sommet_i ; T ravailLibre ← i;

SiNon

i ← P rec(i); / ∗ P rec(i) retourne le premier travail situé avant i sur le chemin critique et appartenant à la pyramide de Sommet_i ∗/ FinSi

FinTantQue

Si Arret = false alors

Initialiser i au premier travail sur le chemin critique appartenant à la pyramide de Sommet_i ; Ordrechemin_critique ← i ≺ s;

TantQue Arret = false et i 6= Sommet_i faire Déterminer OrdreSequence_Carlier entre s et i ;

Si OrdreSequence_Carlier 6= Ordrechemin_critique alors

Arret ← true;

T ravailP ivot ← Sommet_i ; T ravailLibre ← i;

SiNon

i ← Suiv(i); /∗ Suiv(i) retourne le premier travail situé après i sur le chemin critique et appartenant à la pyramide de Sommet_i ∗/ FinSi

FinTantQue FinSi

Si Arret = false alors

Sommet_i ← Prochain sommet à droite de Sommet_i

sur le chemin critique ; FinSi

FinTantQue

Si Arret = false alors

SetPivotLibre(TravailPivot,TravailLibre,T) ; /∗ utiliser la version 1 ∗/ FinSi

FinProc

5.2 Une deuxième procédure par séparation et évaluation 103

Proc TCOR-2(Solution, Loptimal

max , T)(∗)

Solution ← ∅; A_traiter ← ∅ ;

Calculer les bornes Lmax, Lmin pour le Noeud_racine ;

A_traiter ← A_traiter ∪ Noeud_racine ; CARLIER(Sequence_Carlier, Loptimale

max , T) ;

TantQue A_traiter 6= ∅ faire

N oeud_courant ← dépiler A_traiter ; Si Lmax= Loptimale

max alors

Solution ← Solution ∪ N oeud_courant ; SiNon

Si Lmin > Loptimal

max alors

Couper le Noeud_courant ; SiNon

SetPivotLibreAmeliore(T ravailP ivot, T ravailLibre, Sequence_Carlier, T ) ; Séparer Noeud_courant en deux ls : F ils_gauche et F ils_droit ;

Évaluer F ils_gauche et F ils_droit ;

/∗ Traiter F ils_gauche qui ne respecte pas la séquence de Carlier ∗/ Si Lmin

F ils_gauche ≤ Loptimalmax alors

A_traiter ← A_traiter ∪ F ils_gauche ; SiNon

Couper F ils_gauche ; FinSi

/∗ Traiter F ils_droit qui respecte si possible la séquence de Carlier ∗/ Si Lmin

F ils_droit ≤ Loptimalmax alors

A_traiter ← A_traiter ∪ F ils_droit ; SiNon Couper F ils_droit ; FinSi FinSi FinSi FinTantQue FinProc

Étape 1 : En appliquant, tout d'abord, l'algorithme de Carlier, nous obtenons la valeur optimale du retard Loptimal

max = −1, et une solution optimale est 6 ≺ 3 ≺ 2 ≺ 4 ≺ 1 ≺ 5 ≺ 7.

Le n÷ud racine N0, ayant la borne supérieure maxi∈TLmaxi = 11 > Loptimalmax , nous séparons

donc ce n÷ud. En utilisant l'algorithme SetPivotLibreAmeliore pour le chemin critique

2 ≺ 3 ≺ 6 ≺ 1 ≺ 4, le travail 2 est choisi comme le travail pivot, et 3 est le travail libre à

pivoter. Deux branchements sont alors envisagés : celui où r3 ← r2 et celui où d3 ← d2;

qui conduisent à créer les nouveaux n÷uds N1 et N2. (gure 5.12)

Les nouvelles bornes pour ces deux n÷uds sont indiquées sur la gure 5.12. Le n÷ud N1, ayant sa borne inférieure égale à 0, supérieure au Loptimalmax , est coupé. Seul le n÷ud N2

est donc à développer.

Fig. 5.12: Séparation du n÷ud N0

Étape 2 : Le chemin critique de N2 est3 ≺ 2 ≺ 6 ≺ 1 ≺ 4. Selon l'algorithme SetPivot-

LibreAmeliore, on choisit le travail 3 comme le pivot, et le travail 6 comme le travail libre à pivoter. Deux nouveaux branchements N3 et N4 sont envisagés (cf. gure 5.13) : celui où

r6 ← r3 et celui où d6 ← d3. La borne inférieure de ces deux n÷uds est égale à −1, on ne

peut donc couper aucun n÷ud. Le branchement est eectué sur N4, dont l'ordre entre le

pivot et la tâche libre est le même que celui de la séquence de Carlier.

Fig. 5.13: Séparation du n÷ud N2

Étape 3 : Le chemin critique du n÷ud N4 est 6 ≺ 3 ≺ 2 ≺ 1 ≺ 4. Le travail 4 est le

nouveau pivot et le travail 1 est choisi pour pivoter. Deux nouveaux n÷uds N5 et N6 sont

5.2 Une deuxième procédure par séparation et évaluation 105 égale à 2, qui est supérieure au retard optimal. N6 est alors coupé de l'arborescence. De

plus, N5 ayant ses deux bornes minimale et maximale égales à −1, est un n÷ud optimal. Sa

structure d'intervalles caractérise deux séquences optimales :6 ≺ 3 ≺ 2 ≺ 4 ≺ (1 − 5) ≺ 7, où

(1−5)est un groupe de travaux permutables. Il reste le n÷ud N3à développer (gure 5.14).

Fig. 5.14: Séparation du n÷ud N4

Étape 4 : Pour le n÷ud N3, le chemin critique est 3 ≺ 2 ≺ 6 ≺ 1 ≺ 4. Et deux travaux

2 et 6 sont choisis respectivement comme le travail pivot et celui libre à pivoter. Deux nouveaux n÷uds N7 et N8 sont à considérer : celui où r6 ← r2 et celui où d6 ← d2. N8,

possédant sa borne inférieure égale à 5 est éliminé. Nous continuons avec N7 (gure 5.15).

Fig. 5.15: Séparation du n÷ud N3

Étape 5 : Pour le n÷ud N7, le travail pivot choisi est le travail 4 et le travail libre

est 1. Deux nouveaux n÷uds N9 et N10 sont créés pour deux actualisations : r1 ← r4 et

d1 ← d4. Le n÷ud N10 est éliminé parce qu'il possède une borne minimale égale à 2. Nous

continuons avec le n÷ud N9 (gure 5.16).

Étape 6 : Pour le n÷ud N9, le chemin critique est 3 ≺ 2 ≺ 6 ≺ 4. Les travaux 6 et 4

sont chosis respectivement comme le pivot et le travail libre à pivoter. Nous obtenons deux n÷uds : N11 et N12. N11 ayant ses deux bornes égales à 0 et N12 ayant ses deux bornes

égales à 4, ils sont donc coupés, et l'exploration est achevée (gure 5.17).

Bien que le nombre d'étapes développées pour TCOR et TCOR-2 soit similaire, il est clair que TCOR-2 converge plus vite puisqu'une première structure d'intervalles optimale

Fig. 5.16: Séparation du n÷ud N7

Fig. 5.17: Séparation du n÷ud N9

est trouvée après trois étapes, au lieu de cinq pour TCOR. De plus le nombre de coupes directes est augmenté. Nous illustrons dans la suite les performances de TCOR-2 pour des instances de problème comptant de 10 à 500 travaux.