Vous êtes sur la page 1sur 9

Chapitre 3

Algorithme du simplexe

3.1 Solution de base admissible


P en forme standard.
A = (a1 , . . . , an )
Hypothèse : n ≥ m (plus de variables que d’équations) et rg(A)=m (pas d’équation
inutile).
Donc après rearrangement des vecteurs on peut écrire
A = (ai1 , . . . , aim , aim+1 , . . . , ain )
avec les m premiers vecteurs indépendants c.a.d.
A = B + N avec B(m, m) de rang m. D’où
!
xB
Ax = b iff (B + N) =b
xN

ce qui donne
xB = B −1 b + B −1 N(−xN )

Definition 1 B est appelée une base et xB = B −1 b la solution de base associée à B

Si xB ≥ 0 alors (xB , 0) est une solution admissible de P. Deux idées à retenir pour la
suite :
– une solution de base admissible est un sommet du polyhèdre d éfini par les contraintes.
– Le simplexe va faire passer d’une solution de base admissible à une autre qui améliore
la fonction objectif.

3.2 Solution de base admissible et polytope des contraintes


On considère que des polyhèdres situé dans l’orthant positif (xi ≥ 0 pour i = 1, . . . , n).
Les équations de définitions sont donc : des équations d’hyperplans et les contraintes xi ≥ 0.

1
2 CHAPITRE 3. ALGORITHME DU SIMPLEXE

Premier résultat : on suppose que Ax = b, x ≥ 0 avec rang(A) = m définit un ensemble


borné. Alors c’est un polytope de Rn−m .
Deuxième résultat : xB est une solution de base admissible ssi xB correspond à un
sommet du polytope associé.
Le polytope associé à
Ax = b
x≥0
donne xB = B −1 b + B −1 N(−xN ) avec xB , xN ≥ 0, c.a.d.

B −1 N(xN ) ≤ B −1 b
xN ≥ 0

ce qui donne bien un polytope de Rn−m .


Réciproquement, étant donné un polytope de Rn−m dans le premier orthant, ses équations
de définition sont :
xl ≥ 0 pour l = 1, . . . , n − m
Σl=n−m
l=1 ai,l xl ≤ bi pour i = 1, . . . , n.
d’ou
xk ≥ 0 pour k = 1, . . . , m
Σl=n−m
l=1 ai,l xl + xn = bi pour i = 1, . . . , n.
B donnée, on associe à x le x̂ de Rn−m obtenu en ne gardant que les valeurs xi 6∈ B.
On admettra que si (P) est un polytope et (C) est le problème standard associé, alors
1. x solution de base admissible de (C)
2. x̂ le sommet correspondant est un sommet de (P)

3.3 Méthode de Gauss-Jordan


3.3.1 Principe du pivotage
La méthode du pivot (Gauss-Jordan) pour résoudre un système d’équation linéaire
consiste à itérer les étapes suivantes :
1. à l’étape p, choisir une variable xj et une ligne r tel que le coefficient ar,j soit non-nul
2. garder cette ligne après l’avoir divisée par le coefficient ar,j (pour que le nouveau
coefficient de xj soit 1)
ligne r ← (ligne r)/ar,j
3. Ajouter cette ligne aux autres lignes après multiplication par le coefficient qui permet
de faire disparaitre xj .

ligne i ← ligne i − ai,k /ar,j ligne r


3.3. MÉTHODE DE GAUSS-JORDAN 3

4. on réarrange les variables de manière à ce que xj soit la pieme variable.


En itérant et regroupant les variables correspondant aux pivots on obtient une matrice
(Im , A′ ) avec I la matrice identité (m,m). Les variables qui correspondent à Im définissent
une base.

3.3.2 Maintenir l’ admissibilité de la base


Le principe du simplexe est d’appliquer la méthode de pivotage sur une matrice qui est
déjà de la forme (Im , A′ ) et telle que la base soit admissible. On verra comment on peut
toujours se ramener à ce cas plus tard. Cela correspond à :

a1 . . . am am+1 . . . an
1 0 . . 0 b1
 
!
0 1 0 . 0 xB  . 
= 
 
. . . . . A′ xN .

 
. . . . 0 bm
0 . . 0 1

et où bi ≥ 0 pour i = 1, . . . , m (sinon la base n’est pas admissible).

Forme tableau Les équations peuvent s’écrire :

x1 . . . . xm xm+1 . . xn
1 0 . . 0 0 b1

0 1 0 . 0 0 A .
. . . . . . = .
0 0 . . 0 1 bm

Ces équations définissent les m premières variables et on peut les écrire :

−xm+1 . . −xn
x1 b1
. = . A′
. .
xm bm

Les variables x1 , . . . , xm sont les variables de bases et les variables xm+1 , . . . , xn sont les
variables hors base. Pour avoir la base admissible, on met les variables hors bases égales à
0 et la valeur des variables de base se lit sur le tableau : xi = bi . La base est admissible ssi
bi > 0. Par abus de language, on identifiera la base et ses variables de base.
Le pivotage consiste à choisir une variable xj à faire entrer dans la base (donc choisir
une colonne j) à choisir une variable à faire sortir de la base xr (donc choisir une ligne r)
ce qui correspond à un pivot ar,j qui doit être non-nul.
Le pivotage donne un tableau tel que :
4 CHAPITRE 3. ALGORITHME DU SIMPLEXE

1. ligne r ← ligne r/ar,j


2. ligne i ← ligne i + ligne r(−ai,j /ar,j ) pour i 6= r
3. les variables xj et xr sont échangées et la colonne j est remplacée par la colonne des
coefficients multiplicateurs : 1/ar,j sur la ligne r et (−ai,j /ar,j ) sur les lignes i 6= j.

Maintien de l’admissibilité de la base. On a une nouvelle base admissible si les


nouveaux coefficients pour b sont ≥ 0. Ces coefficients sont :
* br /ar,j pour la ligne r
* bi − br (ai,j /ar,j )
Si la base précédente est admissible la nouvelle l’est ssi : ar,j > 0 et bi /ai,j ≥ br /ar,j
(pour les i tel que ai,j > 0.)

3.3.3 Amélioration de la fonction objectif


On rajoute aux calculs précédents la fonction objectif.
A = B + N avec B(m, m) de rang m et c = (cB , cN ). ce qui donne

Max z = cB xB + cN xN
xB = B −1 b + B −1 N(−xN )

Après remplacement
Max z = cB B −1 b − B −1 NxN + cN xN
Le premier terme s’écrit z0 = cB B −1 b et on écrit le second terme comme Σj6∈B (zj −cj )(−xj ).
On a la forme tableau

−xm+1 . −xj . −xn


z z0 . zj − cj . .
x1 b1 α1,j . .
. = . . .
. . . .
xm bm αm,j . .

Exemple :

Le pivotage consiste à
1. Choisir une variable à faire rentrer dans B (une colonne j)
2. Choisir une variable à faire sortir de B (une ligne r)
3. Effectuer le pivotage
Il faut de plus
* Garder l’admissibilite de la base
* Ameliorer la fonction objectif (au moins ne pas la dégrader).
3.4. ALGORITHME DU SIMPLEXE. 5

La valeur de la fonction objectif dans la nouvelle base après pivotage sur αr,j est

z0′ = z0 − (zj − cj )br /αr,j

On veut z0′ ≥ z0 . Pour maintenir l’admissibilité on a choisi αr,j > 0 et on sait que br ≥ 0,
donc il faut et il suffit que :
zj − cj < 0
Remarque : on ne choisit evidemment jamais de pivot sur la ligne de la fonction objectif.

3.4 Algorithme du Simplexe.


3.4.1 Description.
1. Partir d’une base admissible.
2. Chercher à effectuer un pivotage
(a) ∃j0 tel que zj0 − cj0 < 0, mais ∀i = 1, . . . m, αi,j0 ≤ 0 alors pas d’optimum fini,
STOP.
(b) ∀j, zj − cj ≥ 0, alors la base actuelle donne l’optimum qui est fini, STOP.
(c) un pivot existe avec les critères de choix donnés précédemment, effectuer le
pivotage et aller en 2.
Remarque : rien ne garantit que l’algorithme termine, et il existe des cas où il ne
termine pas. Pour assurer la terminaison, il faut soit mémoriser toutes les bases pour
éviter celles déjà calculées (couteux et impossible en pratique) soit utiliser des règles de
choix particulière des pivots (règle de Bland par exemple, voir chapitre suivant).

3.4.2 Correction de l’algorithme.


A chaque étape la base est admissible et la fonction objectif ne se dégrade pas. Il suffit
donc de montrer que les cas d’arrêt correspondent à ce qui est dit (optimum fini atteint ou
infini). Le cas pas de solution aux contraintes est éliminé car on suppose qu’on part d’une
base admissible.
– On suppose ∃j0 tel que zj0 − cj0 < 0 mais tous les αi,j0 ≤ 0.

Le système d’équation est vrai pour toutes les valeurs xj . Prenons xj = 0 pour
j 6= j0 . On a z = z0 + (zj0 − cj0 )(xj0 ) donc > z0 Pour une valeur xj0 quelconque
.
xi = bi + (zj0 − cj0 )(αi,j0 ) donc ≥ 0
.
positive on a une base admissible et une valeur de la fonction objectif et celle ci tend
vers +∞ quand xj0 tend vers +∞.
6 CHAPITRE 3. ALGORITHME DU SIMPLEXE

– On suppose ∀j tel que zj − cj ≥ 0 pour une base B. On considere une autre base
admissible B ′ qui donne une valeur z0′ a la fonction objectif. Le tableau obtenu pour
la base B définit une égalité valable pour toutes les valeurs des variables.

z = z0 + Σj6∈B (zj − cj )(−xj )

avec zj −cj > 0. Les variables xj de B’ ont une valeur positive vj car B ′ est admissible.
Par conséquent la valeur de z pour B ′ vaut z0 + Σj6∈B (zj − cj )(−vj ) ≤ z0 . Donc B
réalise l’optimum.

3.4.3 Terminaison
Règle de Bland : lors d’un pivotage, la variable qui entre est celle d’indice minimal
parmi celles qui peuvent rentrer et la variable qui sort est celle d’indice minimal parmi
celles qui peuvent sortir.

Proposition 1 L’algorithme du simplexe termine si on applique la règle de Bland.

Preuve par l’absurde : on suppose qu’il ne termine pas.


Alors il existe un cycle B → . . . → B.
Nécessairement z0 est constante le long du cycle, on peut le supposer nul.

z = z0 + Σj6∈IB (zj − cj )(−xj )

IB indices de la base B.
Pour un pivotage en r, j (xr sort, xj entre) on a :

z0′ = z0 − (zj − cj )(br /αi,j )

et donc br = 0.
et si br vaut 0, la valeur des autres bi ne change pas. Donc tous les bi pour une variable i
qui sortira valent 0. On peut éliminer les équations des variables qui restent toujours dans
la base.
On suppose que tous les bi sont 0 ainsi que z0 .
Tableau

−xm+1 . −xj . −xn


z 0 . zj − cj .
x1 0 α1,j
. = .
. .
xm 0 αm,j

q indice maximal des indices des variables de B.


3.4. ALGORITHME DU SIMPLEXE. 7

T1 tableau avant que xq rentre.

−xm+1 . −xq . −xn


z 0 . zq − cq .
x1 0 α1,j
. = .
. .
xm 0 αm,j

Alors zq − cq < 0 et zj − cj ≥ 0 pour tout j < q

z = Σj6=q,6∈IB (zj − cj ) (−xj ) + (zq − cq ) (−xq )


≥0 0<

T2 tableau juste avant que xq sorte (donc pour tout l 6= q, αl,p ≤ 0.

−xm+1 . −xp . −xn


z z0 . zp − cp .
x1 0 α1,p ≤ 0
. = .
xq = 0 αq,p > 0
. .
xm 0 αm,p ≤ 0
B′

On peut choisir les valeurs de certains xi dans les équations données par les tableaux T1 , T2
de manière à obtenir des égalités interessantes. On choisit xi = ξi tel que :
* ξp = 1
* ξi = 0 pour i 6∈ IB , i 6= p
* ξi donné par le tableau T2 sinon c.a.d.
* ξi = −αi,p ≥ 0
* ξq = −αq,p < 0
D’après T1 on a :

z = Σj6=q,j∈IB (zj − cj ) (−ξj ) + (zq − cq ) (−ξq )


≥0 0≤ 0< >0

donc z < 0 D’après T2

z = (zp − cp ) (−yp )
0< = −1 > 0

contradiction.
8 CHAPITRE 3. ALGORITHME DU SIMPLEXE

3.5 Exemples de déroulement du simplexe


Cas optimum fini.
Max z = 5x1 + 8x2
x1 + x2 ≤ 2
x1 − 2x2 ≤ 0
−x1 + 4x2 ≤ 1
x1 , x2 ≥ 0
Variables d’ecart e1 , e2 , e3 donnent une base admissible. On peut écrire la fonction objectif
avec les variables hors base : z = 0 + (−5)(−x1 ) + (−8)(−x2 ) d’où le tableau :

−x1 −x2
z 0 −5 −8
e1 2 1 1
e2 = 0 1 −2
e3 1 −1 4
Pivotage : on peut choisir la première ou la deuxième colonne. On choisit la seconde et on
calcule min(2/1,1/4) donc pivot 4.

−x1 −e3
z 2 −7 2
e1 7/4 5/4 −1/4
e2 = 1/2 1/2 1/2
x2 1/4 −1/4 1/4
On vérifie que z a bien augmenté. Nouveau pivot obligatoirement sur colonne 1 et on
calcule min((7/4)/(5/4),(1/2)/(1/2)) d’ou ligne 2

−e2 −e3
z 9 14 9
e1 1/2 −5/2 −3/2
x1 = 1 2 1
x2 1/2 1/2 1/2
Tous les coefficients zj − cj sont positifs ou nuls, donc arret sur l’optimum donné par la
base B = {e1 , x1 , x2 }, la valeur z = 9, et les variables de base e1 = 1/2, x1 = 1, x2 = 1/2,
les variables hors base valant 0.

Optimum infini
Max z = x1 + x2
−x1 + x2 ≤ 2
x2 ≤ 3
x1 , x2 ≥ 0
3.5. EXEMPLES DE DÉROULEMENT DU SIMPLEXE 9

Tableau
−x1 −x2
z 0 −1 −1
e1 2 −1 1
e2 3 0 1
On choisit colonne 2 et min(2/1,3/1) donne la ligne 1.
−x1 −e1
z 2 −2 1
x2 2 −1 1
e2 1 1 −1
Colonne 1 et min(1/1) donne la ligne 2
−e2 −e1
z 4 2 −1
x2 3 −1 0
x1 1 1 −1
Colonne 2 obligatoirement mais pas de pivot sur cette colonne donc optimum infini (ce
qu’on voyait sur la colonne 1 dès le départ).

Cas dégénéré
Max z = 2x1 + x2
x1 + 2x2 ≤ 2
x1 + x2 ≤ 2
x1 , x2 ≥ 0
Les variables d’écart donnent une base admissible :
−x1 −x2
z 0 −2 −1
e1 2 1 2
e2 2 1 1
On choisit la colonne 1 et on calcule min(2/1,2/1) les deux lignes sont possibles, on prend
la première.
−e1 −x2
z 4 2 3
x1 2 1 1
e2 0 −1 −1
On est à l’optimum avec une base dégénérée : une des variables de base vaut 0. On pourrait
refaire un pivotage (non autorisé dans le déroulement normal car le pivot serait négatif et
le coefficient de x2 dans z est positif) pour echanger e2 et x2 : dans ce cas la valeur de x2
resterait 0 et celle de z resterait 4.

Vous aimerez peut-être aussi