Programmation Linéaire
Transcription
Programmation Linéaire
Algorithme du simplex Cas particuliers Simplex : forme matricielle Programmation Linéaire - Cours 2 P. Pesneau [email protected] Université Bordeaux 1 Bât A33 - Bur 265 P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Sommaire 1 Algorithme du simplex Sur un exemple simple Méthode du dictionnaire - version générique 2 Cas particuliers 3 Simplex : forme matricielle P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Retournons dans le yaourt ! Reprenons l’exemple du 1er cours Forme normale : Max 4xA + 2xA + xA + xA , 5xB xB 2xB xB xB ≤ 800 ≤ 700 ≤ 300 ≥0 Forme standard : Max z = 4xA + 2xA + xA + xA , 5xB + xB + 2xB + xB + xB , P. Pesneau [email protected] 0 s1 + s1 0 s2 + 0 s3 s2 s1 , s2 , s3 s3 Programmation Linéaire - Cours 2 = 800 = 700 = 300 ≥0 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Initialisation Max z = 4xA + 2xA + xA + xA , 5xB + xB + 2xB + xB + xB , 0 s1 + s1 0 s2 + 0 s3 s2 s1 , s2 , s3 s3 = 800 = 700 = 300 ≥0 Reformulons ce système linéaire en écrivant les variables d’écarts et la variable objectif en fonction des autres variables. z s1 s2 s3 = = = = 0 800 700 300 + − − 4xA 2xA xA + − − − 5xB xB 2xB xB On garde en mémoire le sens d’optimisation (maximisation) ainsi que la non-négativité des variables. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Remarques z s1 s2 s3 = = = = 0 800 700 300 Posons xA = xB = 0 : intersection des hyperplans associés aux contraintes xA ≥ 0 et xB ≥ 0 on obtient pour les variables d’écarts s1 = 800, s2 = 700 et s3 = 300 l’objectif z vaut 0 P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Choix de l’arête de déplacement z s1 s2 s3 = = = = 0 800 700 300 + − − 4xA 2xA xA + − − − 5xB xB 2xB xB Se déplacer sur une arête qui améliore l’objectif. Ceci revient à augmenter une variable fixée à 0, ici xA ou xB . Quelle variable choisir ? On choisit une variable ayant un impact positif sur l’objectif. Prenons par exemple xB qui a le plus grand impact positif. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Déplacement sur l’arête z s1 s2 s3 = = = = 0 800 700 300 + − − 4xA 2xA xA + − − − 5xB xB 2xB xB Jusqu’où peut-on augmenter xB ? On regarde l’impact de l’augmentation de xB sur les variables s1 , s2 et s3 (aucun impact sur xA qui reste nulle) s1 = 800 − xB ≥ 0 ⇔ xB ≤ 800 s2 = 700 − 2xB ≥ 0 ⇔ xB ≤ 350 s3 = 300 − xB ≥ 0 ⇔ xB ≤ 300 xB augmente de 300 afin que toutes les variables restent ≥ 0 La variable s3 va s’annuler et on a xA = s3 = 0 on se trouve à l’intersection des hyperplans formés par les contraintes xA ≥ 0 et xB ≤ 300. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Pivotage z s1 s2 s3 = = = = 0 800 700 300 + − − 4xA 2xA xA + − − − 5xB xB 2xB xB Réécrire le système avec les variables non nulles en fonction des variables fixées à 0. z s1 s2 xB = = = = 1500 500 100 300 + − − 4xA 2xA xA − + + − 5s3 s3 2s3 s3 Solution associée ? P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique On continue ? z s1 s2 xB = = = = 1500 500 100 300 + − − 4xA 2xA xA − + + − 5s3 s3 2s3 s3 Peut-on encore améliorer l’objectif ? Oui car xA a un impact positif sur l’objectif Jusqu’où peut-on augmenter xA ? s1 = 500 − 2xA ≥ 0 ⇔ xA ≤ 250 s2 = 100 − xA ≥ 0 ⇔ xA ≤ 100 xA n’a aucun impact sur xB xA augmente de 100 afin que toutes les variables restent ≥ 0 La variable s2 va s’annuler et on a s2 = s3 = 0 on se trouve à l’intersection des hyperplans formés par les contraintes xA + 2xB ≤ 700 et xB ≤ 300. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Pivotage z s1 s2 xB = = = = 1500 500 100 300 + − − 4xA 2xA xA − + + − 5s3 s3 2s3 s3 Réécrire le système avec les variables non nulles en fonction des variables fixées à 0. z s1 xA xB = = = = 1900 300 100 300 − + − 4s2 2s2 s2 + − + − 3s3 3s3 2s3 s3 Solution associée ? P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique On continue ? z s1 xA xB = = = = 1900 300 100 300 − + − 4s2 2s2 s2 + − + − 3s3 3s3 2s3 s3 Peut-on encore améliorer l’objectif ? Oui car s3 a un impact positif sur l’objectif Jusqu’où peut-on augmenter s3 ? s1 = 300 − 3s3 ≥ 0 ⇔ s3 ≤ 100 On voit que xA augmente quand s3 augmente. xA reste positif. xB = 300 − s3 ≥ 0 ⇔ s3 ≤ 300 s3 augmente de 100 afin que toutes les variables restent ≥ 0 La variable s1 va s’annuler et on a s1 = s2 = 0 on se trouve à l’intersection des hyperplans formés par les contraintes 2xA + xb ≤ 800 et xA + 2xB ≤ 700. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Pivotage z s1 xA xB = = = = 1900 300 100 300 − + − 4s2 2s2 s2 + − + − 3s3 3s3 2s3 s3 Réécrire le système avec les variables non nulles en fonction des variables fixées à 0. z s3 xA xB = = = = 2200 100 300 200 − + + − 2s2 2 3 s2 1 3 s2 2 3 s2 − − − + s1 1 3 s1 2 3 s1 1 3 s1 Solution associée ? P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique On continue ? z s3 xA xB = = = = 2200 100 300 200 − + + − 2s2 2 3 s2 1 3 s2 2 3 s2 − − − + s1 1 3 s1 2 3 s1 1 3 s1 Peut-on encore améliorer l’objectif ? Non car toutes les variables fixées à 0 ont un impact négatif sur l’objectif Nous avons la solution optimale xA = 300 et xB = 200 (s3 = 100 et s1 = s2 = 0) pour un objectif de 2200. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Problème linéaire sous la forme P cx max Pj j j a s.c. j i,j xj ≤ bi xj ≥ 0 Sur un exemple simple Méthode du dictionnaire - version générique pour i = 1, . . . , m pour j = 1, . . . , n Ajout des variables d’écart et d’une variable objectif Pn z= cx Pnj=1 j j xn+i = bi − pour i = 1, . . . , m j=1 ai,j xj Le problème revient à maximiser z en gardant les variables xj ≥ 0 pour j = 1, . . . , n + m. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Dictionnaires A chaque itération, la solution courante est associée à un système d’équations qui la définit : z= xi = z̄+ b̄i − P c̄ x Pj∈N j j j∈N āi,j xj pour tout i ∈ B Ce système s’appelle un dictionnaire. Les variables de gauche sont appelées variables de base et notées m. xB ∈ IR+ L’ensemble des variables en base est appelé base. B représente les indices des variables en base. Les variables qui ne sont pas dans la base, sont appelées variables n. hors-base et notées xN ∈ IR+ N représente l’ensemble des indices des variables hors-base. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Dictionnaires z= xi = z̄+ b̄i − P c̄ x Pj∈N j j j∈N āi,j xj pour tout i ∈ B B et N forment une partition de l’ensemble des indices : B ∪ N = {1, . . . , n, n + 1, . . . , n + m} B∩N =∅ Chaque dictionaire définit une solution de base que l’on obtient en posant xN = 0. un dictionnaire est réalisable si la solution de base associée est telle que xB ≥ 0. La solution est elle-même réalisable. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Dictionnaire initial z= xn+i = Initialement : bi − Pn cx Pnj=1 j j j=1 ai,j xj pour i = 1, . . . , m La base initiale est formée des variables d’écart xn+1 , . . . , xn+m , c’est-à-dire B = {n + 1, . . . , n + m}. Les variables hors-base sont les variables intiales du problème, N = {1, . . . , n}. Attention, la base initiale peut ne pas être réalisable. On verra plus tard ce qu’il faut faire dans ce cas. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Solutions de base / itération Solutions de base Toutes les solutions réalisables ne sont pas associées à une base (ou un dictionnaire). Mais chaque point extrême réalisable est représenté par au moins un dictionnaire. Le simplex considère exclusivement les solutions de base réalisables. Un théorème fondamental de la programmation linéaire dit que si le problème admet une solution optimale, alors, il en existe une en un point extrême. Itération A chaque itération de l’algorithme du simplex, une variable hors-base va entrer dans la base, tandis qu’une variable en base sortira de la base → pivotage. Cette opération revient à se déplacer d’un point extrême à un point extrême voisin le long d’une arête du polyèdre. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Choix de la variable entrante z= xi = z̄+ b̄i − P c̄ x Pj∈N j j j∈N āi,j xj pour tout i ∈ B Les coefficients c̄j , j ∈ N sont appelés les coûts réduits. Ils représentent l’impact de l’augmentation d’une variable sur l’objectif. Condition d’optimalité : La solution de base est optimale si et seulement si tous les coûts réduits sont négatifs ou nuls : c̄j ≤ 0, pour tout j ∈ N . P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Choix de la variable entrante z= xi = z̄+ b̄i − P c̄ x Pj∈N j j j∈N āi,j xj pour tout i ∈ B Choix de la variable entrant en base : On choisit une variable dont le coût réduit est positif : choisir xk , k ∈ N tel que c̄k > 0. Règle de pivotage : Il peut y avoir plusieurs variables candidates pour entrer en base. La règle de pivotage permet de choisir, parmi toutes les variables candidates, celle qui va entrer en base. Exemples de règle de pivotage : Choisir la variable de plus grand côut réduit. Choisir la variable d’indice le plus petit. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Choix de la variable sortante z= xi = z̄+ b̄i − P c̄ x Pj∈N j j j∈N āi,j xj pour tout i ∈ B Supposons que la variable xk est choisie pour entrer en base. Le vecteur formé par les coefficient āi,k , i ∈ B indique l’impact sur les variables en base de l’augmentation de la variable xk . Si āi,k ≤ 0, l’augmentation de xk entrainera une augmentation de xi . Si āi,k > 0, l’augmentation de xk entrainera une diminution de xi ⇒ attention à la positivité de xi . xi = b̄i − āi,k xk ≥ 0 ⇒ xk ≤ P. Pesneau [email protected] b̄i āi,k Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Choix de la variable sortante z= xi = z̄+ b̄i − P c̄ x Pj∈N j j j∈N āi,j xj pour tout i ∈ B Choix de la variable sortante : La variable qui sort de la base est la première variable à s’annuler lorsque xk (la variable entrante) augmente : b̄i : āi,k > 0 Choisir s ∈ B tel que s = argmini∈B āi,k Il peut y avoir plusieurs variables candidates pour sortir de la base. Si c’est le cas, la base suivante sera dégénérée. Problème non-borné : Si āi,k ≤ 0 pour tout i ∈ B, il n’y a pas de candidat pour sortir de la base et le problème est non-borné. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sur un exemple simple Méthode du dictionnaire - version générique Pivotage z= xi = z̄+ b̄i − P c̄ x Pj∈N j j j∈N āi,j xj pour tout i ∈ B Il reste à reconstruire le système d’équation ci-dessus pour la nouvelle base. C’est le pivotage. Si on considère que B et N n’ont pas encore été remis à jour, le nouveau système s’obtient par : ā z= z̄ + c̄k āb̄s,ks + P j∈N \{k} (c̄j xk = b̄s ās,k − P ās,j j∈N \{k} ās,k xj xi = b̄i − āi,k āb̄s,ks − P j∈N \{k} (āi,j P. Pesneau [email protected] s,j − c̄k ās,k )xj 1 −c̄k ās,k xs 1 − ās,k xs ā s,j − āi,k ās,k )xj 1 +āi,k ās,k xs ∀i ∈ B \ {s} Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Sommaire 1 Algorithme du simplex 2 Cas particuliers Phase I du simplex Bases dégénérées Solutions optimales multiples 3 Simplex : forme matricielle P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Phase I du simplex Cette phase permet de trouver une solution de base réalisable initiale lorsque la base donnée par les variables d’écart n’est pas réalisable. D’où vient le problème ? P j ai,j xj ≤ bi avec bi < 0. Après ajout de la variable d’écart et écriture sous forme de dictionnaire, on obtient : P xn+i = bi − j ai,j xj . Comme bi < 0 la solution de base n’est pas réalisable. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Que faire ? 1 2 3 4 Pour chaque contrainte telle que bi < 0, on ajoute une ′ avec un coefficient de −1 en plus de la variable artificielle xn+i variable d’écart : P ′ j ai,j xj + xn+i − xn+i = bi Remplacer l’objectif initial par P ′ . minimiser i:bi <0 xn+i Eliminer les variables en base de l’objectif en les remplaçant par l’expression donnée par le dictionnaire. La base initiale est donnée par les variables artificielles des contraintes avec bi < 0 et les variables d’écarts des contraintes avec bi ≥ 0. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Résultat : A la fin de cette résolution : ′ > 0, alors les variables S’il existe au moins un i tel que xn+i artificielles sont nécessaires pour avoir une solution réalisable. Alors, il n’existe pas de solution réalisable au problème initial. Le problème initial est irréalisable. ′ = 0 pour tout i tel que bi < 0, toutes les variables Si xn+i artificielles sont hors-base. On a une solution de base réalisable pour le problème initial donnée par la base optimale de la Phase I. 1 2 3 4 Supprimer les variables artificielles. Reprendre l’objectif initial. Eliminer les variables en base de l’objectif en les remplaçant par leur expression donnée par le dictionnaire. Reprendre la résolution normale du simplex. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Bases dégénérées Quand plusieurs variables sont candidates pour sortir de la base, la nouvelle solution de base aura une (ou plusieurs) variables de base prenant la valeur 0. On dit alors que la solution de base est dégénérée. Exemple : z x4 x5 x6 = = = = 0 1 3 2 + + − + 2x1 0x1 2x1 1x1 − + + − 1x2 0x2 4x2 3x2 + − − − 8x3 2x3 6x3 4x3 Solution : (0, 0, 0, 1, 3, 2) et z = 0. On fait entrer x3 en base. x4 , x5 et x6 sont candidates pour sortir de la base. Choisissons x4 . P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Bases dégénérées z x3 x5 x6 = = = = 4 1 2 0 0 + + − + 2x1 0x1 2x1 1x1 − + + − 1x2 0x2 4x2 3x2 − − + + 4x4 1 2 x4 3x4 2x4 + + + − 3x2 0x2 2x2 1x2 − − + + 1x4 1 2 x4 3 2 x4 7 2 x4 Solution : (0, 0, 21 , 0, 0, 0) et z = 4. x1 entre en base et x5 sort. z x3 x1 x6 = = = = 4 1 2 0 0 − + − − 1x5 0x5 1 2 x5 1 2 x5 Solution : (0, 0, 21 , 0, 0, 0) et z = 4. x2 entre en base et x6 sort. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Bases dégénérées z x3 x1 x2 = = = = 4 1 2 0 0 − + − − 5 2 x5 0x5 3 2 x5 1 2 x5 − + − − 3x6 0x6 2x6 1x6 + − + + 19 2 x4 1 2 x4 17 2 x4 7 2 x4 3x6 0x6 2x6 1x6 − − − − 19x3 2x3 17x3 7x3 Solution : (0, 0, 21 , 0, 0, 0) et z = 4. x4 entre en base et x3 sort. z x4 x1 x2 = = = = 27 2 1 17 2 7 2 − + − − 5 2 x5 0x5 3 2 x5 1 2 x5 − + − − 7 Solution optimale : ( 17 2 , 2 , 0, 1, 0, 0) et z = P. Pesneau [email protected] 27 2 . Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Solutions optimales multiples Il peut arriver que dans le dictionnaire optimal, des variables hors-bases possèdent des coûts réduits nuls : c̄i = 0, pour i ∈ N En effectuant une itération suplémentaire du simplexe en faisant entrer en base une variable xi telle que c̄i = 0, on obtient une nouvelle solution optimale de base (avec le même objectif). Si x1∗ et x2∗ sont deux solutions optimales, alors toutes solutions obtenues par une combinaison convexe de x1∗ et x2∗ est également une solution optimale : x = αx1∗ + (1 − α)x2∗ , ∀α ∈ [0, 1] est une solution optimale. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Phase I du simplex Bases dégénérées Solutions optimales multiples Terminaison Le nombre de dictionnaires possibles est m n+m En cas de dégénérescence, l’algorithme peut revenir sur une solution de base déjà visitée (→ cycle). En pratique néanmoins, cela se passe rarement. Il existe des règles de pivotage limitant les risques de cycle : règle de plus petit indice. perturbation des données : ajouter au membres de droites des contraintes des 0 < ǫ << coefficients. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Sommaire 1 Algorithme du simplex 2 Cas particuliers 3 Simplex : forme matricielle P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Notations matricielles En forme standard : Max s.c. cx Ax x =b ≥0 0 avec c= (c1 c2 ... cn 0 a1,2 a2,2 .. . ... ... a1,n a2,n .. . 1 A= |a1,1 |a2,1 . |.. |am,1 am,2 ... am,n x2 ... xn xt = (x1 P. Pesneau [email protected] 0) ... | | 1 .. xn+1 ... . | 1| xn+m ) Programmation Linéaire - Cours 2 b= |b1 | |b2 | .. . |bm | Algorithme du simplex Cas particuliers Simplex : forme matricielle Partitionnement des variables On peut partitionner les variables en deux sous-ensemble : Les variables en base : B Les variables hors-base : N Cette partition peut-être efectuée dans chacune des contraintes : P Pn+m P j∈N ai,j xj = bi pour i = 1, . . . , n. j∈B ai,j xj + j=1 ai,j xj = D’un point de vue matriciel, ce partitionnement revient à partitionner les colonnes de A et les composantes des vecteurs c et xt : ( cO 0 ( AO I ( xO xE ) = c ↔ ( cB cN ) = A ↔ ( AB AN ) = x ↔ ( xB xN ) ) = ( B N ) ) où O = {1, . . . , n} et E = {n + 1, . . . , n + m}. P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Dictionnaire au format matriciel Exprimons les variables en base en fonction des variables hors-base : Ax = b ⇔ AB xB + AN xN = b ⇔ BxB + NxN = b ⇔ xB = B −1 b − B −1 NxN On remarque que cette réécriture n’est possible que si B est une matrice inversible. Maintenant, en remplaçant xB dans l’objectif, on a : z = cx = cB xB + cN xN = cB (B −1 b − B −1 NxN ) + cN xN = cB B −1 b + (cN − cB B −1 N)xN On a : Max s.c. z = cB B −1 b + (cN − cB B −1 N)xN xB = B −1 b − B −1 NxN xB , xN ≥ 0 P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Solutions de base Toute sous-matrice carrée m × m de A inversible (les m colonnes/lignes de B sont linéairement indépendantes et forment une base de IR m ) est appelée matrice de base. A chaque matrice de base B est associé une solution de base définie par un dictionnaire. Max s.c. z = cB B −1 b + (cN − cB B −1 N)xN xB = B −1 b − B −1 NxN xB , xN ≥ 0 Solution de base : Condition de réalisabilité : Condition d’optimalité : xB = B −1 b z = cB B −1 b B −1 b ≥ 0 cN − cB B −1 N ≤ 0 P. Pesneau [email protected] Programmation Linéaire - Cours 2 Algorithme du simplex Cas particuliers Simplex : forme matricielle Algorithme du simplex matriciel On commence avec une solution de base réalisable donnée par un dictionnaire : Max z = cB B −1 b + (cN − cB B −1 N)xN s.c. xB = B −1 b − B −1 NxN xB , xN ≥ 0 1 2 3 4 Si c̄N = cN − cB B −1 N ≤ 0, alors cette solution est optimale, STOP. choisir une variable entrante k ∈ N telle que (c̄N )k > 0. Si (āi,k )i=1,...,m = (B −1 N)k ≤ 0, le problème est non borné, STOP. Choisir une variable sortante s ∈ B telle que −1 Bj,. b b̄j s = argminj∈B āj,k = B −1 N : āj,k > 0 j,. 5 .,k Pivoter : B = (B \ {s}) ∪ {k} et N = (N \ {k}) ∪ {s} et retourner en 1. P. Pesneau [email protected] Programmation Linéaire - Cours 2