Vous êtes sur la page 1sur 8

TP Gestion de Projet

Language C++
M2 RO2MIR 2022-2023

N. BABOU
Partie 1: Résoudre le problème
Fm|prmu|Cmax
Problème Fm|prmu|Cmax
Résolution approchée
 Solution complete (Heuristique NEH)
 Solution partielle (adaptation de NEH avec 𝜎1 )
Borne inférieure
 Borne pour une instance complète
 Borne pour une instance partielle
 Branchement
 Parcours de l’arborescence
 Structure de 𝜎1
 Structure de 𝜎2
L’algorithme B&B(L,𝜎1 ):
Début
Soit 𝜎2𝑘 la keme opération (tâche) de 𝜎2 ;
Soit 𝐿𝐵𝜎1 la borne inferieure associée a 𝜎1 ou 𝜎1 une solution partielle ;
Si 𝐿𝐵𝜎1 > 𝐿 alors
Stériliser le nœud commençant par 𝜎1 ;
Soit 𝑈𝐵𝜎1 la solution donnée par l’heuristique avec 𝜎1 comme solution partielle ;
Si 𝑈𝐵𝜎1 = 𝐿 alors
Stopper le processus une solution avec un makespan égal à L est trouvée ;
Si 𝑈𝐵𝜎1 < 𝑈𝐵 alors
𝑈𝐵 = 𝑈𝐵𝜎1 ;
k=1 ;
Tant que 𝑘 ≤ |𝜎2 | alors
considérer 𝜎2𝑘 ;
𝜎1 = 𝜎1 ∪ 𝜎2𝑘 ;
𝜎2 = 𝜎2 \ 𝜎2𝑘 ;
Appeler B&B(L,𝜎1 ) ;
Heuristique NEH:
- Début
- Soit 𝑇1, 𝑇2, . . . , 𝑇𝑛 la liste de tâches rangées dans l’ordre décroissant de leurs durées globales.
- Placer la tâche T1 dans la séquence S;
- Pour i = 2 à n faire
- 𝐶′max = ∞;
- Pour k = 1 a i faire
- Construire une solution partielle en mettant la tâche Ti à la position k dans la séquence ;
- Calculer le makespan Cmax de cette solution partielle;
- Si Cmax < C′max alors
𝑏𝑒𝑠𝑡 = 𝑘 ;
𝐶′max = 𝐶𝑚𝑎𝑥 ;
- Placer la tache Ti à la position best dans la séquence S ;
- Appliquer cette séquence au problème ;
Heuristique NEH:

Procédures : Structure des données :


- Tri des tâches ; - m : nombre de machine
- Ordonnancement de la séquence ;
- n : nombre de tâche
- L’heuristique NEH.
- p[n][m]: temps de traitement
- Sub: sequence donnée par NEH
- Sub1 : sequence avec 𝜎1 comme
sequence partielle, continuée
avec NEH
Heuristique NEH:

Procédure Ordonnancer Formule avec l’ordre 𝑻𝒊𝒏𝒅[𝟏] , 𝑻𝒊𝒏𝒅[𝟐] ,…,𝑻𝒊𝒏𝒅[𝒏]


𝑗
• Pour une séquence de tâches (ou permutation) T1,
T2,…,Tn et une gamme de fabrication M1, M2,…, Mm, 𝑐𝑖𝑛𝑑[1]𝑗 = ෍ 𝑝𝑖𝑛𝑑[1]𝑘 ; 𝑗 = 1, … , 𝑚
la date de fin d’une tâche Ti sur une machine Mj est 𝑘=1
donnée par les expressions récursives : 𝑖

𝑐𝑖𝑛𝑑[𝑖]1 = ෍ 𝑝𝑖𝑛𝑑[𝑘]1 ; 𝑖 = 1, … , 𝑛
𝑗
𝑘=1
𝑐1𝑗 = ෍ 𝑝1𝑘 ; 𝑗 = 1, … , 𝑚 𝑐𝑖𝑛𝑑[𝑖]𝑗 = max 𝑐𝑖𝑛𝑑[𝑖−1]𝑗 , 𝑐𝑖𝑛𝑑[𝑖] 𝑗−1 + 𝑝𝑖𝑛𝑑[𝑖]𝑗 ;
𝑘=1
𝑖
𝑖 = 2, … , 𝑛; 𝑗 = 2, … , 𝑚
𝑐𝑖1 = ෍ 𝑝𝑘1 ; 𝑖 = 1, … , 𝑛
𝑘=1
𝑐𝑖𝑗 = max 𝑐 𝑖−1 𝑗 , 𝑐𝑖 𝑗−1 + 𝑝𝑖𝑗 ;

𝑖 = 2, … , 𝑛; 𝑗 = 2, … , 𝑚
Borne inférieure
Concernant la borne inférieure du flow-shop de permutation, nous considérons
celle de B. J. Lageweg, J. K. Lenstra et A. H. G. Rinnooy Kan (Lageweg et al., 1978).
Pour calculer cette borne nous allons d’abord résoudre des sous-problèmes à 2
machines avec des temps de latence.

Pour cela on choisit deux machines 𝑀𝑘 et 𝑀𝑙 (avec 𝑘 < 𝑙), ensuite on pose :
𝑝′1𝑖 = 𝑝𝑘𝑖 , ∀𝑖 = 1, … , 𝑛 𝑟𝑖 = σ𝑘−1
ℎ=1 𝑝ℎ𝑖
ℎ=𝑘+1 𝑝ℎ𝑖 , ∀𝑖 = 1, … , 𝑛 ainsi que ൞𝑞𝑖 = σℎ=𝑙+1 𝑝ℎ𝑖
𝐹2 𝑝𝑟𝑚𝑡, 𝑙𝑖 𝐶𝑚𝑎𝑥 : ൞𝑙𝑗 = σ𝑙−1 𝑚

𝑝′2𝑖 = 𝑝𝑙𝑖 , ∀𝑖 = 1, … , 𝑛 ∀𝑖 = 1, … , 𝑛
Borne inférieure
On obtient le sous-problème qui peut résolu à l’optimalité en temps
polynomial par l’algorithme de Mitten-Jackson. On note la solution
optimale obtenue : 𝑃∗ 𝑀𝑘 , 𝑀𝑙 . La borne inférieure est donc égale à :
𝐿𝐵 = min {𝑃∗ 𝑀𝑘 , 𝑀𝑙 + ′min { 𝑟𝑖 + 𝑞𝑖 ′ }}
1≤𝑘<𝑙≤𝑛 𝑖,𝑖 =1,…,𝑛
𝑖≠𝑖′
La solution du 𝐹2 𝑝𝑟𝑚𝑡, 𝑙𝑖 𝐶𝑚𝑎𝑥 est obtenue à partir de l’ordre définit
par la relation ≼ entre de tâches 𝑇𝑖 et 𝑇𝑖′ ainsi,
𝑇𝑖 ≼ 𝑇𝑖′ ⟺ min(𝑝′1𝑖 + 𝑙𝑖 , 𝑝′2𝑖 ′ + 𝑙𝑖′ ) ≤ min(𝑝′2𝑖 + 𝑙𝑖 , 𝑝′1𝑖′ + 𝑙𝑖′ )

Vous aimerez peut-être aussi