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