le simplexe pour les nuls - pierre fritschpierre.fritsch.free.fr/simplexe/simplexe.pdf · le...
TRANSCRIPT
Le simplexe pour les nuls
Pierre Fritsch
12 décembre 2005
1 Le problème
On considère le problème de programmation linéaire suivant :
max(cT x|Ax ≤ b
)où c est un vecteur de taille n, b un vecteur de taille m et A une matrice de dimension
m × n. n représente donc le nombre d'inconnues, et m le nombre de contraintes. On
suppose m ≤ n et rang (A) = m.
2 Algorithme du simplexe
� Soit I un sous-ensemble de n éléments de {1, 2, . . . ,m} et soit x solution de AIx = bI .
� Soit y tel que yi = (cA−1I )i pour i ∈ I et yj = 0 pour j /∈ I.
� Si y ≥ 0 alors x est solution du système.
� Sinon soit i le plus petit indice tel que yh < 0 et soit Ui la colonne correspondante
de A−1I ; déterminer pour chaque ligne Lj de la matrice A la valeur vj = −LjUi.
� Si ∀j, vj ≤ 0 alors cx est non borné pour Ax ≤ b.
� Sinon soit j tel quebj−Ljx
vjsoit minimum parmi les vj positifs. On pose alors I :=
I \ {i} ∪ {j} et on calcule x, intersection des hyperplans correspondants.
3 Un petit exemple
Prenons le cas de 2 variables x et y. On veut maximiser 4x + 5y tout en respectant les
contraintes x + y ≤ 52x + y ≤ 8x + 2y ≤ 8
Ce système se met sous la forme
A =
1 12 11 2
b =
588
c =[
4 5]
1
On a donc n = 2 et m = 3.
Première étape
� On choisit I = {1, 2} . Les lignes correspondantes de A sont AI =[
1 12 1
]et celles
de b sont bI =[
58
]. On calcule x =
[32
], solution de AIx = bI .
� A−1I =
[−1 12 −1
]permet de calculer y =
[6 −1 0
], tel que yi =
(cA−1
I
)i=([
4 5] [
−1 12 −1
])i
=[
6 −1]ipour i ∈ I et yj = 0 pour j /∈ I.
� On n'a pas y ≥ 0.
� On prend donc i = 2 le plus petit indice tel que yh < 0 et Ui = U2 =[
1−1
]la
colonne correspondante de A−1I . On détermine pour chaque ligne Lj de la matrice
A la valeur vj = −LjUi −−LjU2 : v = −A U2 =
1 12 11 2
[1−1
]=
0−11
, i.e.v1 = 0 , v2 = −1 , v3 = 1 .
� On n'a pas ∀j, vj ≤ 0. J = {3} est l'ensemble des indices j pour lesquels vj est
strictement positif.
� Pour chaque élément j de J , on calculebj−Ljx
vj. Dans notre cas on se limite à j = 3
pour lequel b3−L3xv3
=8−
h1 2
i24 32
351 = 1. Cette quantité est la plus petite des
bj−Ljxvj
calculés. On garde donc j = 3 .
Deuxième étape
� On remplace donc I par I \ {i} ∪ {j} = {1, 2} \ {2} ∪ {3}, soit I = {1, 3} . On a
donc AI =[
1 11 2
]et bI =
[58
], qui donne x =
[23
], solution de AIx = bI .
� A−1I =
[2 −1−1 1
]donne cA−1
I =[
4 5] [
2 −1−1 1
]=
[3 1
]et y =
[3 0 1
].
� On a y ≥ 0 donc x =[
23
]est solution du système.
2