Ordonnancement Frédéric Meunier 25 janvier 2017 Ecole des Ponts, France Management de projet Le problème Collection I de tâches Pour chaque tâche i : durée di et des contraintes de la forme “la tâche i ne peut commencer que lorsque r% de la tâche j au moins a été effectué”. On veut trouver • durée minimale du projet. • tâches critiques : tâches pour lesquelles une modification de l’instant de début rallonge la durée du projet • marges : marge d’une tâche = intervalle de temps sur lequel on peut faire démarrer la tâche sans rallonger la durée du projet (en particulier, une marge nulle signifie une tâche critique) Modélisation “potentiel tâche” Graphe orienté D = (V , A) V = débuts des tâches A = relations de précédence Deux tâches fictives : Début et Fin Arc (I, J) muni d’une longueur `(I, J) = durée minimale séparant le début de I de celui de J Si ce projet a un sens, le graphe est acircuitique. Exemple Soit le projet suivant Tâches A B C D E F Description Construction voie ferrée Forage des puits Construction logements provisoires Pompage de l’eau (Fonds de mine) Aménagement fonds + ascenseurs Construction logements définitifs Durée (j) 80 70 30 30 50 40 Contraintes Début Début Début B A, D A, C Exemple Modélisé par le graphe : A D 80 70 0 30 30 Début B 0 Fin E 50 80 0 F C 30 40 Propriété tI et tI0 = instants au plus tôt et au plus tard auxquels commencer la tâche I, sachant que l’on veut tout terminer à l’instant tFin donné. Proposition tI est la longueur du plus long chemin de Début à I. tI0 est tFin moins la longueur du plus long chemin de I à Fin. Preuve. • pour chaque tâche I, on ne peut pas commencer avant la somme des longueurs des arcs du plus long chemin de Début à I. • on faisant débuter chaque tâche I précisément à la somme des longueurs des arcs du plus long chemin de Début à I, on peut commencer chaque tâche à l’instant tI . De même pour tI0 . Calcul de plus longs chemins RAPPEL Equation de programmation dynamique. Pour ηI = “longueur du plus long chemin de Début à I”, on a ηJ = max (ηI + `(I, J)). (I,J)∈A On peut calculer tous les ηI en O(m) où m est le nombre d’arcs. On peut calculer de même les πI , plus longs chemins de I à Fin. On a alors • tI := ηI • tI0 := tFin − πI • marge mI := tI0 − tI . chemins critiques = plus longs chemins de Début à Fin Toutes les tâches d’un chemin critique sont caractérisées par une marge nulle. Ordonnancement d’atelier Cadre n tâches, m machines • Chaque tâche doit passer sur chaque machine exactement une fois. • Une machine ne peut traiter au plus qu’une tâche à la fois. Passage d’une tâche j sur une machine k (opération) : requiert un temps pjk . Deux types d’objectif classique : • Minimiser le temps total • Minimiser la somme des instants de fins des tâches (ce qui revient à minimiser la durée moyenne) Les trois modèles de base Problème du Job-Shop : chaque tâche est muni d’un ordre total sur ses opérations. Problème du Flow-Shop : cas particulier du Job-Shop : l’ordre total est le même pour toutes les tâches. Problème du Open-Shop : les opérations peuvent être faites dans un ordre quelconque. On se place d’abord dans le cas non-préemptif : une opération, une fois commencée, ne peut être interrompue. Ordonnancement ordonnancer = fixer les instants tjk (début de passage de la tâche j sur la machine k ). Instant de fin de la tâche j : Cj := tj` + pj` où ` = arg maxk tjk . Les deux objectifs classiques : • Minimiser le temps total, ou makespan : Cmax = maxj Cj • Minimiser le temps moyen : P j Cj Problèmes difficiles • Flow-shop à 3 machines et minimisation du makespan Cmax : NP-difficile. • Flow-shop à 2 machines et minimisation du P Cj : j NP-difficile. • Open-shop à 3 machines et minimisation du makespan Cmax : NP-difficile. • Open-shop à 2 machines et minimisation du P j Cj : NP-difficile. Même avec des métaheuristiques ou des techniques de branch-and-bound, des instances job-shop à 20 machines et 20 tâches sont encore non résolues à ce jour ! Problèmes difficiles On ne connaît pas l’ordonnancement optimal pour l’instance suivante de flow-shop à 20 tâches et 5 machines Machines 1 2 3 4 5 1 2 3 4 5 6 7 8 9 Tâches 10 11 12 13 14 15 16 17 18 19 20 54 79 16 66 58 83 3 89 58 56 15 11 49 31 20 71 99 15 68 85 77 56 89 78 53 36 70 45 91 35 53 99 60 13 53 38 60 23 59 41 27 5 57 49 69 87 56 64 85 13 91 61 1 9 72 14 73 63 39 8 29 75 41 41 49 12 47 63 56 47 77 14 47 40 87 32 21 26 54 58 87 86 75 77 18 68 5 77 51 68 94 77 40 31 28 76 3 7 85 86 Quelques cas polynomiaux 1. Flow-shop à 2 machines et minimisation du makespan Cmax 2. Job-shop à 2 machines et minimisation du makespan Cmax 3. Job-shop à 2 tâches et minimisation du makespan Cmax 4. Open-shop à 2 machines et minimisation du makespan Cmax Flow-shop à 2 machines et minimisation du makespan Résolu en temps polynomial par l’algorithme de Johnson Produit une séquence j1 , j2 , . . . , jn = ordre dans lequel effectuer les tâches sur les deux machines. Algorithme de Johnson : Choisir la tâche j ayant le plus petit pj1 ou pj2 parmi tous les pji Appliquer récursivement l’algorithme sur les tâches 6= j : =⇒ j1 , j2 , . . . , jn−1 Si pj1 ≤ pj2 , retourner j, j1 , j2 , . . . , jn−1 Si pj1 > pj2 , retourner j1 , j2 , . . . , jn−1 , j Exemple Tâches A B C D E temps sur la machine 1 12 14 25 9 6 temps sur la machine 2 3 11 13 17 15 Exemple Tâches temps sur la machine 1 temps sur la machine 2 A 12 3 B 14 11 C 25 13 D 9 17 E 6 15 L’algorithme va successivement fixer : ...,A E, . . . , A E, D, . . . , A E, D, . . . , B, A E, D, C, B, A. Job-shop à 2 machines et minimisation du makespan Résolu en temps polynomial par l’algorithme de Jackson (adaptation de l’algorithme de Johnson) Algorithme de Jackson : Définir J12 := {j : j doit d’abord être effectué sur 1 puis sur 2} J21 := {j : j doit d’abord être effectué sur 2 puis sur 1} Effectuer • sur la machine 1 : J12 J21 • sur la machine 2 : J21 J12 où J12 et J21 sont ordonnés selon l’algorithme de Johnson. Job-shop à 2 tâches et minimisation du makespan Résolu en temps polynomial par l’algorithme de Brucker Idée : axe des abscisses = machines dans l’ordre dans lequel elles doivent être visitées par la tâche 1. axe des ordonnées = machines dans l’ordre dans lequel elles doivent être visitées par la tâche 2. solution réalisable = trajectoire dans le quart de plan positif faite de mouvements horizontaux (avancement tâche 1), verticaux (avancement tâche 2) et en diagonal (avancement simultanée sur les deux machines) Exemple tâche 1: M1 → M2 → M3 → M4 tâche 2: M2 → M4 → M3 → M1 tâche 2 M1 p24 p23 M3 M4 p22 M2 p21 p11 M1 p12 M2 p13 p14 M4 M3 un ordonnancement possible un autre ordonnancement possible tâche 1 Exemple commenté Job-shop à 2 tâches et 4 machines. Tâche 1 doit traverser les machines dans l’ordre M1 , M2 , M3 , M4 , avec des durées : 2, 3, 1, 2. Tâche 2 doit traverser les machines dans l’ordre M2 , M4 , M3 , M1 , avec des durées : 1, 2, 2, 1. Ordonnancement = chemin dans un graphe acircuitique. poids de cet arc: p24 tâche 2 M1 p24 poids de cet arc: p22 p23 M3 M4 p22 M2 p21 p11 M1 p12 M2 p13 p14 M4 M3 un ordonnancement possible un autre ordonnancement possible tâche 1 Algorithme Résoudre job-shop à 2 tâches et minimisation du makespan Cmax = chercher un plus court chemin dans un graphe acircuitique coût d’un arc = durée séparant ses deux extrémités Algorithme en O(m2 log(m)) Open-shop à 2 machines et minimisation du makespan Théorème Pour l’open-shop non préemptif à 2 machines et minimisation du makespan : à l’optimum n n X X Cmax = max max(pj1 + pj2 ), pj1 , pj2 . j j=1 j=1 Un ordonnancement optimal peut se trouver en temps polynomial. La preuve consiste à se ramener au cas à 3 tâches. Exemples Open-shop à 2 machines et minimisation du makespan Cmax M1 M2 Tâche 1 3 2 Tâche 2 3 2 3 Tâche 3 1 M1 M2 Tâche 1 2 1 Tâche 2 2 3 Tâche 3 2 2 Ici : somme des colonnes constante = 7 ; somme des lignes ≤ 7. Dans ce cas, on peut toujours réaliser un ordonnancement de durée = 7. Open-shop préemptif Théorème A l’optimum, on a Cmax = max max j m X k =1 ! pjk , max k n X pjk . j=1 De plus, un tel ordonnancement se trouve en temps polynomial Preuve On note Q l’ensemble des matrices m × n à coefficients dans {0, 1} et ayant au plus un 1 sur chaque ligne et sur chaque colonne. Théorème (Birkhoff-Von Neumann) Soit A = ((aij )) une matrice m × n telle que • aij ≥ 0 • • Pm Pi=1 n j=1 aij ≤ 1 pour tout j aij ≤ 1 pour tout i Alors A s’écrit comme combinaison convexe de matrices de Q. Combinaison convexe de matrices de Q : A = P tout i, et avec i λi = 1. P i λi Qi avec Qi ∈ Q et λi > 0 pour Fin de la preuve Posons T := max maxj P n p , max p . k k =1 jk j=1 jk Pm P = ((pjk )) Birkhoff-Von NeumannP =⇒ T1 P peut s’écrire comme combinaison convexe i λi Qi de matrices de Q. Ordonnancement : • sur les λ1 T premiers instants, pour tout (j, k ) entrée non nulle de la matrice Q1 , on fait passer la tâche j sur la machine k • sur les λ2 T instants suivants, pour tout (j, k ) entrée non nulle de la matrice Q2 , on fait passer la tâche j sur la machine k • etc.