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.