Algorithme du simplexe
Transcription
Algorithme du simplexe
Algorithme du simplexe Brice Mayag Cours RO Brice Mayag Algorithme du simplexe Cours RO 1 / 30 Exemple 1 Plan 1 Exemple 1 2 Exemple 2 3 L’algorithme général du simplexe: Les étapes du simplexe Retour à l’exemple 1 Retour à l’exemple 2 Brice Mayag Algorithme du simplexe Cours RO 2 / 30 Exemple 1 Exemple A l’approche des fêtes de Pâques, un artisan chocolatier décide de confectionner des oeufs en chocolat. En allant inspecter ses réserves, il constate qu’il lui reste 18 kg de cacao, 8 kg de noisettes et 14 kg de lait. Il a deux spécialités : l’oeuf Extra et l’oeuf Sublime. Un oeuf Extra nécessite 1 kg de cacao, 1 kg de noisettes et 2 kg de lait. Un oeuf Sublime nécessite 3 kg de cacao, 1 kg de noisettes et 1 kg de lait. Il fera un profit de 20 euros en vendant un oeuf Extra, et de 30 euros en vendant un oeuf Sublime. Combien d’oeufs Extra et Sublime doit-il fabriquer pour faire le plus grand bénéfice possible ? Cacao Noisette Lait Bénéfice Brice Mayag Oeuf Extra Oeuf Sublime 1 3 1 1 2 1 20 30 Algorithme du simplexe Stock 18 8 14 Cours RO 3 / 30 Exemple 1 Exemple Si on note x1 le nombre d’oeufs extra et x2 le nombre d’oeufs sublime alors le problème admet la modélisation suivante: Max z= 20 x1 x1 x1 2 x1 x1 + + + + , 30 x2 3 x2 x2 x2 x2 ≤ ≤ ≤ ≥ 18 8 14 0 La forme standard du problème sera: Max z = 20 x1 x1 x1 2 x1 x1 , Brice Mayag + + + + x2 , 30 x2 3 x2 x2 x2 x3 , + x3 + x4 ≥ 0 + x4 , x5 Algorithme du simplexe x5 = = = 18 8 14 Cours RO 4 / 30 Exemple 1 A partir de la forme standard, on construit le tableau suivant: Exemple (Dictionnaire 1) x3 x4 x5 z = = = = 18 − 8 − 14 − x1 x1 2 x1 20 x1 − − − + 3 x2 x2 x2 30 x2 Ce tableau est appelé dictionnaire Les variables x3 , x4 , x5 sont appelées variables de base Les variables x1 , x2 sont appelées variables hors-base La solution basique (ou solution de base) associée à un dictionnaire est obtenue en donnant la valeur 0 à toutes les variables hors-base. On aura donc comme solution de base x1 = 0, x2 = 0, x3 = 18, x4 = 8, x5 = 14. Le bénéfice correspondant est z = 0. Brice Mayag Algorithme du simplexe Cours RO 5 / 30 Exemple 1 En partant de cette solution basique, on va chercher à améliorer le bénéfice z. Pour cela on va choisir une variable hors-base dont le coefficient dans la dernière ligne (ligne de z) est positif. Par exemple x1 . Il est évident que si on fait croı̂tre x1 à partir de 0, les autres variables hors-base restant nulles, la valeur de la fonction économique z croı̂t aussi. Mais jusqu’où peut-on “pousser” x1 , tout en gardant x2 à zéro? Il faut aussi que la solution reste admissible. Les contraintes sur l’augmentation de x1 sont alors: x3 ≥ 0 ⇒ 18 − x1 ≥ 0 ⇒ x1 ≤ 18 x4 ≥ 0 ⇒ 8 − x1 ≥ 0 ⇒ x1 ≤ 8 x5 ≥ 0 ⇒ 14 − 2x1 ≥ 0 ⇒ x1 ≤ 7 La plus restrictive de ces contraintes est x1 ≤ 7 Brice Mayag Algorithme du simplexe Cours RO 6 / 30 Exemple 1 On fait un changement de dictionnaire en échangeant les rôles de x1 et x5 . Pour cela, on utilise la troisième équation du Dictionnaire 1 (équation contenant x5 ) pour exprimer x1 en fonction de x2 et x5 : 1 1 x1 = 7 − x2 − x5 2 2 On remplace ensuite x1 par cette expression dans les autres équations du dictionnaire: Exemple (Dictionnaire 2) x3 x4 x1 z = = = = 11 1 7 140 − − − + 5 x 2 2 1 x 2 2 1 x 2 2 20 x2 + + − − 1 x 2 5 1 x 2 5 1 x 2 5 10 x5 La variable x5 est sortie de la base et la variable x1 est entrée en base x3 , x4 , x1 deviennent les variables de base x1 et x5 deviennent les variables hors-base On aura donc comme solution de base du Dictionnaire 2 x1 = 7, x2 = 0, x3 = 11, x4 = 1, x5 = 0. Le bénéfice correspondant est z = 140. Brice Mayag Algorithme du simplexe Cours RO 7 / 30 Exemple 1 En partant de cette solution basique, on va chercher à améliorer le bénéfice z. Pour cela on va choisir une variable hors-base dont le coefficient dans la dernière ligne (ligne de z) est positif. Seule x2 a un coefficient positif. On fait donc entrer x2 dans la base. Mais jusqu’où peut-on “pousser” x2 , tout en gardant x5 à zéro? Il faut aussi que la solution reste admissible. Les contraintes sur l’augmentation de x2 sont alors: x3 ≥ 0 ⇒ x2 ≤ 22 5 x4 ≥ 0 ⇒ x2 ≤ 2 x1 ≥ 0 ⇒ x2 ≤ 14 La plus restrictive de ces contraintes est x2 ≤ 2 Brice Mayag Algorithme du simplexe Cours RO 8 / 30 Exemple 1 On fait un changement de dictionnaire en échangeant les rôles de x2 et x4 . On fait sortir x4 de la base et on fait rentrer x2 à sa place en faisant les mêmes manipulations que précédemment. On obtient le dictionnaire suivant: Exemple (Dictionnaire 3) x3 x2 x1 z = = = = 6 2 6 180 + − + − 5 x4 2 x4 x4 40 x4 − + − + 2 x5 x5 x5 10 x5 x3 , x1 , x2 deviennent les variables de base x4 et x5 deviennent les variables hors-base On aura donc comme solution de base du Dictionnaire 3 x1 = 6, x2 = 1, x3 = 6, x4 = 0, x5 = 0. Le bénéfice correspondant est z = 180. Brice Mayag Algorithme du simplexe Cours RO 9 / 30 Exemple 1 En partant de cette solution basique, on va chercher à améliorer le bénéfice z. Pour cela on va choisir une variable hors-base dont le coefficient dans la dernière ligne (ligne de z) est positif. Seule x5 a un coefficient positif. On fait donc entrer x5 dans la base. Mais jusqu’où peut-on “pousser” x5 , tout en gardant x4 à zéro? Il faut aussi que la solution reste admissible. Les contraintes sur l’augmentation de x5 sont alors: x3 ≥ 0 ⇒ x5 ≤ 3 x2 ≥ 0 ⇒ x5 ≥ −1 x1 ≥ 0 ⇒ x5 ≤ 6 La plus restrictive de ces contraintes est x5 ≤ 3 Brice Mayag Algorithme du simplexe Cours RO 10 / 30 Exemple 1 On fait un changement de dictionnaire en échangeant les rôles de x3 et x5 . On fait sortir x3 de la base et on fait rentrer x5 à sa place en faisant les mêmes manipulations que précédemment. On obtient alors le dictionnaire suivant: Exemple (Dictionnaire 4) x5 x2 x1 z = = = = 3 5 3 210 − − + − 1 2 1 2 1 2 x3 x3 x3 5 x3 + + − − 5 2 x4 1 2 x4 3 2 x4 15 x4 x5 , x1 , x2 deviennent les variables de base x3 et x4 deviennent les variables hors-base On aura donc comme solution de base du Dictionnaire 3 x1 = 3, x2 = 5, x5 = 3, x3 = 0, x4 = 0. Le bénéfice correspondant est z = 210. Tous les coefficients de la dernière ligne étant négatifs, nous avons trouvé la solution du problème: 3 oeufs Extra, 5 oeufs Sublime avec un reste de 0 kg de cacao, 0 kg de Noisette et 3 kgs de lait, le tout pour un bénéfice de 210 euros. Brice Mayag Algorithme du simplexe Cours RO 11 / 30 Exemple 2 Plan 1 Exemple 1 2 Exemple 2 3 L’algorithme général du simplexe: Les étapes du simplexe Retour à l’exemple 1 Retour à l’exemple 2 Brice Mayag Algorithme du simplexe Cours RO 12 / 30 Exemple 2 Exemple Une entreprise fabrique quatre produits. La fabrication de chaque produit nécessite une certaine quantité de ressources. Les ressources consommées, les stocks des ressources et les bénéfices des produits sont récapitulés dans le tableau suivant: Ressource A Ressource B Ressource C Bénéfice Produit 1 Produit 2 2 4 1 1 1 2 7 9 Produit 3 Produit 4 5 7 2 2 3 3 18 17 Stock 42 17 24 Écrire le programme linéaire permettant d’établir un plan de production de façon à maximiser le chiffre d’affaires. Brice Mayag Algorithme du simplexe Cours RO 13 / 30 Exemple 2 Exemple Si on note x1 ; x2 ; x3 ; x4 les quantités respectives de produits 1, 2, 3, 4, alors le problème admet la modélisation suivante: Max z = 7x1 2x1 x1 x1 x1 + + + + , 9x2 4x2 x2 2x2 x2 + + + + , 18x3 5x3 2x3 3x3 x3 + + + + , 17x4 7x4 2x4 3x4 x4 ≤ ≤ ≤ ≥ 42 17 24 0 Remarque Ce problème est mis ici sous sa forme canonique (avec la recherche du Maximum) Brice Mayag Algorithme du simplexe Cours RO 14 / 30 Exemple 2 Ce problème mis sous forme standard s’écrit: Exemple Max z= 7x1 2x1 x1 x1 x1 + + + + , 9x2 4x2 x2 2x2 x2 + + + + , 18x3 5x3 2x3 3x3 x3 + + + + , 17x4 7x4 2x4 3x4 x4 + , x5 x5 + x6 , x6 + , x7 x7 = 42 = 17 = 24 ≥0 Les variables x5 , x6 , x7 sont des variables d’écart qui mesurent pour chaque ressource l’écart entre la quantité initialement disponible et la quantité consommée par le plan de fabrication donné par les variables x1 , x2 , x3 et x4 . Brice Mayag Algorithme du simplexe Cours RO 15 / 30 Exemple 2 A partir de la forme standard, on construit le tableau suivant: Exemple (Dictionnaire 1) x5 x6 x7 z = = = = 42 − 17 − 24 − 2x1 x1 x1 7x1 − − − + 4x2 x2 2x2 9x2 − 5x3 − 2x3 − 3x3 + 18x3 − 7x4 − 2x4 − 3x4 + 17x4 Ce tableau est appelé dictionnaire Les variables x5 , x6 , x7 sont appelées variables de base Les variables x1 , x2 , x3 et x4 sont appelées variables hors-base La solution basique (ou solution de base) associée à un dictionnaire est obtenue en donnant la valeur 0 à toutes les variables hors-base. On aura donc comme solution de base x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 42, x6 = 17 et x7 = 24. Le bénéfice correspondant est z = 0. Brice Mayag Algorithme du simplexe Cours RO 16 / 30 Exemple 2 En partant de cette solution basique, on va chercher à améliorer le bénéfice z. Pour cela on va choisir une variable hors-base dont le coefficient dans la dernière ligne (ligne de z) est positif. Par exemple x3 . Il est évident que si on fait croı̂tre x3 à partir de 0, les autres variables hors-base restant nulles, la valeur de la fonction économique z croı̂t aussi. Mais jusqu’où peut-on “pousser” x3 , tout en gardant x1 , x2 et x4 à zéro? Il faut aussi que la solution reste admissible. Les contraintes sur l’augmentation de x3 sont alors: x5 ≥ 0 ⇒ 42 − 5x3 ≥ 0 ⇒ x3 ≤ 8.4 x6 ≥ 0 ⇒ 17 − 3x3 ≥ 0 ⇒ x3 ≤ 8.5 x7 ≥ 0 ⇒ 24 − 3x3 ≥ 0 ⇒ x3 ≤ 8 La plus restrictive de ces contraintes est x3 ≤ 8 Brice Mayag Algorithme du simplexe Cours RO 17 / 30 Exemple 2 On fait un changement de dictionnaire en échangeant les rôles de x3 et x7 . Pour cela, on utilise la troisième équation du Dictionnaire 1 (équation contenant x7 ) pour exprimer x3 en fonction de x1 , x2 , x4 et x7 : x3 = 8 − 1 2 1 x1 − x2 − x4 − x7 3 3 3 On remplace ensuite x3 par cette expression dans les autres équations du dictionnaire: Exemple (Dictionnaire 2) x5 x6 x3 z = = = = 2 1 8 144 − − − + 1 x 3 1 1 x 3 1 1 x 3 1 x1 − + − − 2 x 3 2 1 x 3 2 2 x 3 2 3x2 + + − − 5 x 3 7 2 x 3 7 1 x 3 7 6x7 − 2x4 − − x4 x4 La variable x7 est sortie de la base et la variable x3 est entrée en base x5 , x6 , x3 deviennent les variables de base x1 , x2 , x4 et x7 deviennent les variables hors-base On aura donc comme solution de base du Dictionnaire 2 est x1 = 0, x2 = 0, x3 = 8, x4 = 0, x5 = 2, x6 = 1 et x7 = 0. Le bénéfice correspondant est z = 144. Brice Mayag Algorithme du simplexe Cours RO 18 / 30 Exemple 2 En partant de cette solution basique, on va chercher à améliorer le bénéfice z. Pour cela on va choisir une variable hors-base dont le coefficient dans la dernière ligne (ligne de z) est positif. Seule x1 a un coefficient positif. On fait donc entrer x1 dans la base. Mais jusqu’où peut-on “pousser” x1 , tout en gardant x2 , x4 et x7 à zéro? Il faut aussi que la solution reste admissible. Les contraintes sur l’augmentation de x1 sont alors: x5 ≥ 0 ⇒ x1 ≤ 6 x6 ≥ 0 ⇒ x1 ≤ 3 x3 ≥ 0 ⇒ x1 ≤ 24 La plus restrictive de ces contraintes est x1 ≤ 3 Brice Mayag Algorithme du simplexe Cours RO 19 / 30 Exemple 2 On fait un changement de dictionnaire en échangeant les rôles de x1 et x6 . On fait sortir x6 de la base et on fait rentrer x1 à sa place en fait les mêmes manipulations que précédemment. On obtient le dictionnaire suivant: Exemple (Dictionnaire 3) x5 x1 x3 z = = = = 1 3 7 147 + − + − x6 3x6 x6 3x6 − x2 + x2 − x2 − 2x2 + + − − x7 2x7 x7 4x7 − 2x4 − − x4 x4 x5 , x1 , x3 deviennent les variables de base x6 , x2 , x4 et x7 deviennent les variables hors-base On aura donc comme solution de base du Dictionnaire 3 x1 = 3, x2 = 0, x3 = 7, x4 = 0, x5 = 1, x6 = 0 et x7 = 0. Le bénéfice correspondant est z = 147. Tous les coefficients de la dernière ligne étant négatifs, nous avons trouvé la solution du problème: (3, 0, 7, 0) Brice Mayag Algorithme du simplexe Cours RO 20 / 30 L’algorithme général du simplexe: Plan 1 Exemple 1 2 Exemple 2 3 L’algorithme général du simplexe: Les étapes du simplexe Retour à l’exemple 1 Retour à l’exemple 2 Brice Mayag Algorithme du simplexe Cours RO 21 / 30 L’algorithme général du simplexe: Dans l’algorithme du simplexe, chaque dictionnaire est matérialisé par un tableau appelé tableau du simplexe qui après la mise sous forme standard du problème linéaire se présente comme suit: Brice Mayag B xB1 .. . b b1 .. . x1 α11 .. . xBm c̄ bm z αm1 c̄1 ... xn+m . . . α1,n+m .. .. . . . . . αm,n+m ... c̄n+m Algorithme du simplexe Cours RO 22 / 30 L’algorithme général du simplexe: Les étapes du simplexe On considère le problème et sa forme standard (après ajout des m variables d’écart): Max n X cj xj j=1 n X Max aij xj ≤ bi , i = 1, . . . , m n+m X cj xj j=1 n+m X aij xj = bi , i = 1, . . . , m j=1 j=1 xj ≥ 0, j = 1, . . . , n xj ≥ 0, j = 1, . . . , n + m Les étapes de l’algorithme du simplexe sont: Étape 1: Initialisation du tableau du simplexe: b i = bi , c j = cj , αij = aij , z = 0 B xB1 .. . xBm c̄ b b1 .. . bm z Brice Mayag x1 α11 .. . αm1 c̄1 ... ... .. . ... ... xn+m α1,n+m .. . αm,n+m c̄n+m ⇒ B xB1 .. . xBm c̄ Algorithme du simplexe b b1 .. . bm 0 x1 a11 .. . am1 c1 ... ... .. . ... ... xn+m a1,n+m .. . am,n+m cn+m Cours RO 23 / 30 L’algorithme général du simplexe: B xB1 .. . b b1 .. . x1 α11 .. . xBm c̄ bm z αm1 c̄1 Les étapes du simplexe ... xn+m . . . α1,n+m .. .. . . . . . αm,n+m ... c̄n+m Étape 2: Choix de la colonne du pivot (variable à entrer dans la base): 1 2 Si c i ≤ 0, j = 1, . . . , n + m, alors STOP (la solution optimale est trouvée) Sinon, choisir une colonne s telle que c s > 0 Étape 3: Choix de la ligne du pivot (variable à sortir de la base): 1 Si αis ≤ 0, i = 1, . . . , m, alors STOP (la fonction objectif n’est pas bornée) 2 Sinon, choisir une ligne r telle que br bi : i = 1, . . . , m, αis > 0} = min{ αrs αis Brice Mayag Algorithme du simplexe Cours RO 24 / 30 L’algorithme général du simplexe: B xB1 .. . xBr .. . xBm c̄ b b1 .. . br .. . bm z x1 α11 .. . αr1 .. . αm1 c̄1 ... ... .. . ... .. . ... ... Les étapes du simplexe xs α1s .. . αrs .. . αms c̄s ... ... .. . ... .. . ... ... xn+m α1,n+m .. . αr,n+m .. . αm,n+m c̄n+m Étape 4: pivot (passage d’un tableau au tableau suivant): 1 Transformation de la ligne pivot: elle est divisée par l’élément pivot. ′ br = αrj br ; α′rj = j = 1, . . . , n + m αrs αrs 2 Transformation de la colonne pivot: toutes les cases sauf la case pivot deviennent zéro: α′is = 0, i = 1, . . . , r − 1, r + 1, . . . , m 3 Transformation des autres cases du tableau. On applique la règle suivante α′ij = αij − Brice Mayag αis αrj αis b r c s αrj c s br ′ , bi = bi − , c ′j = c j − , z′ = z + αrs αrs αrs αrs Algorithme du simplexe Cours RO 25 / 30 L’algorithme général du simplexe: Retour à l’exemple 1 Exemple (Reprenons l’exemple 1) Max z= 20 x1 x1 x1 2 x1 x1 , + + + + x2 , 30 x2 3 x2 x2 x2 x3 , + x3 + x4 ≥ 0 + x4 , x5 x5 = = = 18 8 14 Exemple (Première itération de l’algorithme) Choix de la colonne du pivot: choisir une colonne s telle que c s > 0. Ici, on choisit x1 . Choix de la ligne du pivot: choisir une ligne r telle que br = min{ abisi : i = 1, . . . , m, ais > 0}. Ici, on obtient la ligne de x5 . ars B x3 x4 x5 c̄ b 18 8 14 0 x1 1 1 2 20 x2 3 1 1 30 x3 1 0 0 0 x4 0 1 0 0 x5 0 0 1 0 Le pivot du tableau est donc le point d’intersection entre la colonne et la ligne du pivot. Brice Mayag Algorithme du simplexe Cours RO 26 / 30 L’algorithme général du simplexe: Retour à l’exemple 1 Exemple (Première itération de l’algorithme) B x3 x4 x5 c̄ b 18 8 14 0 x1 1 1 2 20 x2 3 1 1 30 x3 1 0 0 0 x4 0 1 0 0 x5 0 0 1 0 Exemple (Deuxième itération de l’algorithme) La ligne du pivot (2) est divisée par l’élément pivot et toutes les cases du pivot sauf la case pivot deviennent zéro. ′ ′ ′ ′ ′ b 1 = 18 − 1×14 = 3 − 1×1 = 1 − 1×0 = 0, = 11; b 2 = 8 − 1×14 = 1; a12 ; a13 = 1; a14 2 2 2 2 ′ ′ ′ ′ 20×0 20×0 20×0 1×1 a15 = 0 − 2 = −1/2; c̄2 = 30 − 2 = 0; c̄3 = 0 − 2 = 0; c̄4 = 0 − 2 = 0; c̄5′ = 0 − 20×1 = −10; z ′ = 0 + 20×14 = 140 2 2 B x3 x4 x1 c̄ Brice Mayag b 11 1 7 140 x1 0 0 1 0 x2 5/2 1/2 1/2 20 x3 1 0 0 0 Algorithme du simplexe x4 0 1 0 0 x5 −1/2 −1/2 1/2 −10 Cours RO 27 / 30 L’algorithme général du simplexe: Retour à l’exemple 1 Exemple (Troisième itération de l’algorithme) B x3 x2 x1 c̄ b 6 2 6 180 x1 0 0 1 0 x2 0 1 0 0 x3 1 0 0 0 x4 −5 2 −1 −40 x5 2 −1 1 10 Exemple (Quatrième itération de l’algorithme) B x5 x2 x1 c̄ Brice Mayag b 3 5 3 210 x1 0 0 1 0 x2 0 1 0 0 x3 1/2 1/2 −1/2 −5 Algorithme du simplexe x4 −5/2 −1/2 3/2 −15 x5 1 0 0 0 Cours RO 28 / 30 L’algorithme général du simplexe: Retour à l’exemple 2 Exemple (Reprenons l’exemple 2) Max z= 7x1 2x1 x1 x1 x1 + + + + , 9x2 4x2 x2 2x2 x2 + + + + , 18x3 5x3 2x3 3x3 x3 + + + + , 17x4 7x4 2x4 3x4 x4 + , x5 x5 + x6 , x6 + , x7 x7 = 42 = 17 = 24 ≥0 Exemple (Première itération de l’algorithme) B x5 x6 x7 c̄ Brice Mayag b 42 17 24 0 x1 2 1 1 7 x2 4 1 2 9 x3 5 2 3 18 x4 7 2 3 17 Algorithme du simplexe x5 1 0 0 0 x6 0 1 0 0 x7 0 0 1 0 Cours RO 29 / 30 L’algorithme général du simplexe: Retour à l’exemple 2 Exemple (Deuxième itération de l’algorithme) B x5 x6 x3 c̄ b 2 1 8 144 x1 x2 1 3 1 3 1 3 2 3 − 31 1 −3 21 3 x3 0 0 1 0 x4 2 0 1 −1 x5 1 0 0 0 x6 0 1 0 0 x7 − 35 − 32 x5 1 0 0 0 x6 −1 3 −1 −3 x7 −1 −2 1 −4 1 3 −6 Exemple (Troisième itération de l’algorithme) B x5 x1 x3 c̄ Brice Mayag b 1 3 7 147 x1 0 1 0 0 x2 1 −1 1 −2 x3 0 0 1 0 x4 2 0 1 −1 Algorithme du simplexe Cours RO 30 / 30