Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Programmation Linéaire - Cours 5 P. Pesneau [email protected] Université Bordeaux 1 Bât A33 - Bur 265 P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Sommaire 1 Algorithme du simplex dual 2 Analyse de sensibilité 3 Quelques Rappels 4 Simplex révisé P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Changement de notations Primal : P cx max Pnj j j s.c. j=1 ai,j xj ≤ bi xj ≥ 0 i = 1, . . . , m j = 1, . . . , n (yn+i : i = 1, . . . , m) Variables d’écart : xn+i = bi − Dual : min s.c. Pn j=1 ai,j xj Pm i=1 bi yn+i Pm i=1 ai,j yn+i ≥ cj yn+i ≥ 0 pour i = 1, . . . , m j = 1, . . . , n i = 1, . . . , m (xj : j = 1, . . . , n) Variables d’excès : P yj = m i=1 ai,j yn+i − cj pour j = 1, . . . , n P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Complémentarité Une solution x primale réalisable et une solution y duale réalisable sont optimales si, et seulement si, ( ( x1 × y1 = 0 ... ... ... xn × yn = 0 xn+1 × yn+1 = 0 ... ... ... xn+m × yn+m = 0 ) ) xi est en base si et seulement si yi est hors-base, et inversement. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Dictionnaires Primaux / Duaux max s.c. 4x1 3x1 1x1 x1 min s.c. − + − , 13x2 2x2 3x2 x2 5y4 3y4 2y4 5y4 y4 + + − + , P. Pesneau [email protected] + + + , 3y5 1y5 3y5 2y5 y5 7x3 5x3 2x3 x3 ≥ ≥ ≥ ≥ ≤ ≤ ≥ 5 3 0 (y4 ) (y5 ) 4 −13 7 0 Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Dictionnaires Primaux / Duaux Ajoutons les variables d’écarts : max s.c. 4x1 3x1 1x1 x1 − + − , 13x2 2x2 3x2 x2 + + + , 7x3 5x3 2x3 x3 + 1x4 , x4 + , x5 x5 Ecrivons le dictionnaire initial : z x4 x5 = = = 0 5 3 + − − 4x1 3x1 1x1 P. Pesneau [email protected] − − + 13x2 2x2 3x2 + − − 7x3 5x3 2x3 Programmation Linéaire - Cours 5 = = ≥ 5 3 0 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Dictionnaires Primaux / Duaux Ajoutons les variables d’excès : min s.c. 5y4 3y4 2y4 5y4 y4 + + − + , 3y5 1y5 3y5 2y5 y5 − , y1 y1 − y2 , y2 − , y3 y3 = = = ≥ Ecrivons le dictionnaire initial : z y1 y2 y3 = = = = 0 −4 13 −7 P. Pesneau [email protected] + + + + 5y4 3y4 2y4 5y4 + + − + 3y5 1y5 3y5 2y5 Programmation Linéaire - Cours 5 4 −13 7 0 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Dictionnaires Primaux / Duaux Primal : z x4 x5 = = = 0 5 3 z y1 y2 y3 = = = = + − − 4x1 3x1 1x1 − − + 13x2 2x2 3x2 + − − 7x3 5x3 2x3 Dual : 0 −4 13 −7 + + + + 5y4 3y4 2y4 5y4 + + − + 3y5 1y5 3y5 2y5 Faisons entrer x1 en base et sortir x5 de la base dans le primal. (Attention, on va perdre la réalisabilité.) P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Dictionnaires Primaux / Duaux Primal : z x4 x1 = = = 12 −4 3 − + − 4x5 3x5 1x5 − − + 1x2 11x2 3x2 − + − 1x3 1x3 2x3 L’opération équivalente dans le dual consiste à faire entrer en base y5 et sortir de la base y1 . Dual : z y5 y2 y3 = = = = 12 4 1 1 − − + − 4y4 3y4 11y4 1y4 M ↔ −M T P. Pesneau [email protected] + + − + 3y1 1y1 3y1 2y1 Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Remarques Conditions d’optimalité du primal ⇔ Conditions de réalisabilité du primal conditions de réalisabilité du dual ⇔ conditions d’optimalité du dual L’algorithme du simplex primal va de solutions réalisables en solutions réalisables jusqu’à l’obtention de l’optimalité. L’algorithme du simplex dual va de solutions “optimales” en solutions “optimales” jusqu’à l’obtention de la réalisabilité. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Forme algébrique Soit B une base. Primal : z= s.c. cB B −1 b + (cN − cB B −1 N)xN xB = B −1 b − B −1 NxN xB , xN ≥ 0 Dual : z= s.c. cB B −1 b + (B −1 b)T yB yN = −(cN − cB B −1 N)T + (B −1 N)T yB yN , yB ≥ 0 On pose : b̄ = B −1 b, c̄ = cN − cB B −1 N, ā = B −1 A. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Algorithme du simplex dual On va appliquer l’algorithme du simplex dual, en suivant les opérations à partir des dictionnaires primaux. yi est en base ⇔ xi hors-base. yi est hors-base ⇔ xi en base. Quand on va effectuer un pivotage : yk entre en base et ys sort de la base. xk sort de la base et xs entre en base. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Algorithme du simplex dual Choix de la variable yk entrante dictée par la minimisation du dual : −1 k ∈ B telle que Bk,. b = b̄k < 0 ⇔ xk non réalisable. La base courante du dual N est optimale si b̄ ≥ 0 ⇔ xB est primale réalisable. La variable duale sortante est la première variable de base du dual à s’annuler : o n s s ∈ N telle que āk,s < 0 et āc̄k,s = mini āc̄k,ii : āk,i < 0 . ⇔ la variable primale entrante s ∈ N est la première dont le coût réduit s’annule. Le problème dual est non borné (irréalisabilité du primal) si āk,i ≥ 0 pour tout i ∈ N P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Exemple Primal Dual z x4 x1 z y5 y2 y3 = = = = = = = 12 −4 3 − + − 4x5 3x5 1x5 12 4 1 1 − − + − 4y4 3y4 11y4 1y4 − − + + + − + 1x2 11x2 3x2 − + − 1x3 1x3 2x3 3y1 1y1 3y1 2y1 La condition d’optimalité du primal est vérifiée ⇔ la solution duale associée est réalisable La solution du primal n’est pas réalisable ⇔ la solution duale associée n’est pas optimale. On va donc appliquer le simplex dual. Variable sortante (entrante pour le dual) : x4 (y4 ) Variable entrante (sortante pour le dual) : x3 (y3 ) P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Exemple Après pivotage : Primal Dual z x3 x1 = = = 8 4 −5 − − + 1x5 3x5 5x5 z y5 y2 y4 = = = = 8 1 12 1 + + − − 4y3 3y3 11y3 1y3 P. Pesneau [email protected] − + − − − + + 12x2 11x2 19x2 − + − 5y1 5y1 19y1 2y1 Programmation Linéaire - Cours 5 1x4 1x4 2x4 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Utilité Eviter la phase I : Si un dictionnaire est primal réalisable, on applique le simplex primal. Si un dictionnaire n’est pas réalisable mais satisfait aux conditions d’optimalité, on utilise le simplex dual. Si un dictionnaire n’est ni réalisable, ni optimal, alors on applique la phase I. Simplex primal plus efficace ? : La complexité empirique du simplex primal est en Θ(m + log n). Il est ainsi préférable d’avoir la plus grande valeur entre m et n dans le log. Si un problème a plus de contraintes que de variables, il est préférable d’utiliser le simplex dual. Réoptimisation post-optimale : Si on perturbe un problème et qu’on perd la réalisabilité, tout en gardant l’optimalité, il est indiqué d’appliquer le simplex dual. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Sommaire 1 Algorithme du simplex dual 2 Analyse de sensibilité 3 Quelques Rappels 4 Simplex révisé P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Analyse de sensibilité L’analyse de sensibilité consiste à analyser l’optimalité et la réalisabilité d’une base optimale lorsque l’on modifie le problème initial. Modification de l’objectif. Modification de capacité. Ajout d’une variable. Ajout d’une contrainte. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Modification de l’objectif c → c′ = c + ∆ Est-ce que la base reste réalisable ? Oui : b̄ = B −1 b ≥ 0 est indépendant de c. Est-ce que la base reste optimale ? ′ − c ′ B −1 N ≤ 0. Vérifier c̄ ′ = cN B Note : si cB′ = cB , alors ′ c̄N = ′ − c ′ B −1 N cN B ′ − c + c − c ′ B −1 N cN N N B ∆N + c̄N Réoptimisation : Si les conditions d’optimalité ne sont pas satisfaites, comme on garde une base réalisable, on applique l’algorithme du simplex primal à partir de la base courante. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Modification de capacité b b′ = b + ∆ → Est-ce que la base reste optimale ? Oui : c̄ = cN − cB B −1 N ≤ 0 est indépendant de b. Est-ce que la base reste réalisable ? Vérifier b̄ ′ = B −1 b ′ ≥ 0. Noter que : b̄ ′ = B −1 b ′ B −1 b + B −1 ∆ b̄ + B −1 ∆ Réoptimisation : Les conditions d’optimalité restant vérifiées, si on perd la réalisabilité, on applique l’algorithme du simplex dual à partir de la base courante. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Ajout d’une variable (colonne) Ajout de x0 → (c0 , a0 ) La nouvelle variable est ajoutée hors-base. La solution (x, x0 = 0) reste réalisable. La base reste-t-elle optimale ? Vérifier que le coût réduit de la nouvelle variable c0 − cB B −1 a0 ≤ 0. Noter que y ∗ = cB B −1 = −c̄E est disponible dans le dictionnaire optimal. Réoptimisation : Comme la base est réalisable, si le coût réduit de la nouvelle variable est > 0, on n’a pas l’optimalité. On applique l’algorithme du simplex primal à partir de la base courante. Attention à bien recalculer ā0 = B −1 a0 . P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Ajout d’une contrainte (ligne) Ajout de dx ≤ d0 Ajouter une contrainte revient à ajouter une variable y0 dans le dual. Quand on ajoute une contrainte, on ajoute aussi une nouvelle variable d’écart qui sera en base (coût réduit nul). La nouvelle base reste optimale. La base reste-t-elle réalisable ? Vérifier que dx ∗ ≤ d0 . Réoptimisation : Comme la base reste optimale (dual-réalisable), si la contrainte n’est pas satisfaite, on aura une solution irréalisable (non optimale dans le dual) → simplex dual. Note : lors de l’ajout de la nouvelle contrainte, il faudra penser à identifier chaque variable de base présente dans la contrainte avec leur valeur en fonction des variables hors-base. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Retour dans le yaourt Dictionnaire initial : Max 4x1 + 2x1 + 1x1 + 0x1 + 5x2 + 1x2 + 2x2 + 1x2 + 0x3 + 1x3 + 0x3 + 0x3 + 0x4 + 0x4 + 1x4 + 0x4 + 0x5 0x5 0x5 1x5 =z = 800 = 700 = 300 Dictionnaire final : Max 0x1 + 0x1 + 1x1 + 0x1 + 0x2 − 0x2 + 0x2 + 1x2 − 1x3 − 1 3 x3 − 2 3 x3 − 1 3 x3 + 2x4 + 2 3 x4 + 1 3 x4 + 2 3 x4 + 0x5 1x5 0x5 0x5 = z − 2200 = 100 = 300 = 200 On en déduit B = {5, 1, 2} et N = {3, 4}. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Informations issues des dictionnaires A partir du dictionnaire initial : Max 4x1 + 2x1 + 1x1 + 0x1 + 5x2 + 1x2 + 2x2 + 1x2 + 0 2 1 B = 0 1 2 , 1 0 1 0x3 + 1x3 + 0x3 + 0x3 + 0x4 + 0x4 + 1x4 + 0x4 + 0x5 0x5 0x5 1x5 1 0 N = 0 1 , 0 0 =z = 800 = 700 = 300 800 b = 700 300 cB = (0, 4, 5), cN = (0, 0) P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Informations issues des dictionnaires A partir du dictionnaire final : Max 0x1 + 0x1 + 1x1 + 0x1 + 0x2 − 0x2 + 0x2 + 1x2 − 1x3 − 1 3 x3 − 2 3 x3 − 1 3 x3 + 2x4 + 2 3 x4 + 1 3 x4 + 2 3 x4 + 0x5 1x5 0x5 0x5 = z − 2200 = 100 = 300 = 200 c̄N = cN − cB B −1 N = (−1, −2), 1 2 100 3 −3 B −1 N = 32 − 13 , B −1 b = 300 2 200 − 31 3 1 2 3 −3 1 B −1 AE = B −1 I = B −1 = 23 − 31 0 2 − 13 3 0 c̄E = cE − cB B −1 I = −cB B −1 = −y ∗ = (−1, −2, 0) P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Exemple analyse de sensibilité Question : Dans quelle mesure puis-je modifier ma quantité de lait en stock sans que cela change la réalisabilité ou l’optimalité de la base ? Changer b n’a d’influence que sur la réalisabilité de la base (et sur la valeur de l’objectif) mais pas sur l’optimalité. 0 On pose b ′ = b + ∆ avec ∆ = δ 0 100 − 32 δ δ ≤ 150 1 −1 ′ −1 −1 B b =B b+B ∆= ≥ 0 ⇔ δ ≤ 900 300 − 3 δ δ ≥ −300 200 + 32 δ On doit avoir −300 ≤ δ ≤ 150. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Exemple analyse de sensibilité Question : On veut produire un nouveau yaourt nature et sucré. Chaque kilo de ce yaourt nécessitera l’utilisation de 2 kilos de lait et 1 kilo de sucre. A partir de quel prix ce yaourt sera-t-il rentable ? Ici, on va ajouter une variable x6 hors-base. Pour que sa production soit rentable, il faut que son coût réduit dans la base précédement optimale soit > 0. Soit c6 le profit réalisé sur ce nouveau yaourt. Calculons c̄6 = c6 − cB B −1 N .,6 0 c6 − (1, 2, 0) 2 1 c6 − 4 Pour que c̄6 ≥ 0, on doit avoir c6 ≥ 4. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Exemple analyse de sensibilité Question : On veut maintenant prendre en compte la capacité de la chambre froide où sont stockés les yaourts. Cette chambre froide peut contenir au plus 400 kilos de yaourt. Quelle est l’influence sur la solution optimale. Il s’agit ici d’ajouter une contrainte : x1 + x2 ≤ 400 On peut tout d’abord remarquer que la contrainte est violée par la solution optimale. Si x7 est la variable d’écart associée à cette on ctrainte, on ajoute : x7 = 400 − x1 − x2 x7 = 400 − (300 − 23 x3 + 13 x4 ) − (200 + 31 x3 − 23 x4 ) x7 = −100 + 13 x3 + 31 x4 P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Sommaire 1 Algorithme du simplex dual 2 Analyse de sensibilité 3 Quelques Rappels 4 Simplex révisé P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Convention d’indexation des composantes de y Primal Dual Variables originales xO = (x1 , . . . , xn ) ↔ Variables d’écart yO = (y1 , . . . , yn ) Variables d’écart xE = (xn+1 , . . . , xn+m ) ↔ Variables originales yE = (yn+1 , . . . , yn+m ) Dictionnaire final : z= s.c. cB B −1 b + (cN − cB B −1 N)xN xB = B −1 b − B −1 NxN xB , xN ≥ 0 Solution z ∗ = cB B −1 b = cx ∗ = y ∗ b ∗ , . . . , y∗ −1 avec y ∗ = yE∗ = (yn+1 n+m ) = −c̄E = cB B P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Sommaire 1 Algorithme du simplex dual 2 Analyse de sensibilité 3 Quelques Rappels 4 Simplex révisé P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Simplex révisé Idée : ne calculer que ce qui est nécessaire. Ne pas calculer tous les dictionnaires. Exemple : c = (19, 13, 12, 17, 0, 0, 0) 3 2 1 2 1 0 0 A= 1 1 1 1 0 1 0 4 3 3 4 0 0 1 Avec B = {1, 3, 7}, N = {2, 4, 5, 6}, 3 1 0 54 xB = 63 , B = 1 1 0 , 4 3 1 15 P. Pesneau [email protected] 2 2 1 0 N= 1 1 0 1 3 4 0 0 Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Simplex révisé Trouver une variable entrante k de coût réduit positif : Calculer c̄N = cN − cB B −1 N : Calculer yE = cB B −1 en résolvant le système yE B = cB . 3 1 0 (y5 y6 y7 ) 1 1 0 = (19 12 0) 4 3 1 On obtient yE = (3.5 8.5 0). Calculer c̄N = cN − yE N 2 2 1 0 (13 17 0 0) − (3.5 8.5 0) 1 1 0 1 . 3 4 0 0 On obtient c̄N = (−2.5 1.5 − 3.5 − 8.5). x4 entre en base. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Simplex révisé Trouver une variable sortante s en augmentant la variable entrante jusqu’à la valeur t pour laquelle une variable de B s’annule : max {t ≥ 0 : B −1 b − B −1 N.,k t ≥ 0}. Calculer d = B −1 N.,k en résolvant le système Bd = N.,k d1 2 3 1 0 1 1 0 d2 = 1 d3 4 4 3 1 Ce qui donne d T = (0.5 0.5 0.5). b̄ = B −1 b, la valeur courante de xB est disponible. Calculer max{t ≥ 0 : tdi ≤ b̄i , i = 1, . . . , m} = min{ b̄dii , i = 1, . . . , m : di > 0} 54 63 15 , 0.5 , 0.5 } = min{ 0.5 On obtient tmax = 30 pour s = 7. x7 sort de la base. P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Simplex révisé Remettre à jour la solution de base. B = (B \ {s}) ∪ {k} N = (N \ {k}) ∪ {s} On obtient la solution associée en posant : xk = tmax xs = 0 xi = xi − tmax di pour i ∈ B \ {s}. Il faut encore remettre à jour B et N. B {4} = {1, 3, = ({1, 3,7} \ {7}) ∪ 3 1 2 39 xB = 48 , B = 1 1 1 , N = 4 3 4 30 P. Pesneau [email protected] 4} 2 0 1 0 1 0 0 1 3 1 0 0 Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Quelques remarques L’ordre des colonnes de B n’a pas d’importance à partir du moment ou il est cohérent avec l’ordre des composants de B. La méthode du simplex révisé demande nettement moins de travail que celle du simplex qui calcule tous les coefficients du nouveau dictionnaire. En pratique, la matrice B est factorisée, B = LU, pour une plus grande efficacité de résolution des systèmes yE B = cB et Bd = N.,k . P. Pesneau [email protected] Programmation Linéaire - Cours 5 Algorithme du simplex dual Analyse de sensibilité Quelques Rappels Simplex révisé Algorithme du simplex révisé Soit B, xB et B une base initiale et la solution associée. 1 2 3 4 5 Résoudre yE B = cB . Choisir une variable k ∈ N telle que c̄k = ck − yE A.,k > 0. S’il n’en existe pas, la solution est optimale, STOP. Résoudre Bd = A.,k . Trouver tmax = max{t ≥ 0 : xB − td ≥ 0}. S’il n’en existe pas, le problème est non-borné, STOP. Sinon, on choisi une variable s qui tombe à zéro dans xB − tmax d. Poser xB = xB − tmax d et remplacer xs par xk = tmax dans xB Poser B = (B \ {s}) ∪ {k} et remplacer la colonne s de B par A.,k . Retourner au pas 1. P. Pesneau [email protected] Programmation Linéaire - Cours 5