Introduction à la Programmation Linéaire
Introduction à la Programmation Linéaire
Chapitre 2
Programmation linéaire 12
0.1 Un exemple
Dans une raffinerie on décompose du pétrole brut en appliquant des procédés physiques
ou chimiques afin d’obtenir de nouveaux produits. Ce qu’on obtient dépend du procédé
employé. On admet qu’une raffinerie fournit trois types de composants : du pétrole lourd
(noté S comme lourd), du pétrole moyen (M), du pétrole léger (L). Elle dispose de deux
procédés différents dont les coûts (énergie, amortissement des machines, travail) et les
résultats sont les suivants (pour dix unités de pétrole brut) :
le procédé 1, fournit 3 unités de L, 2 unités de M, 1 unité de L pour un coût de 3 unités
monétaires ;
le procédé 2, fournit 1 unités de L, 2 unités de M, 4 unité de L pour un coût de 5 unités
monétaires.
La raffinerie doit satisfaire une commande de 3 unités de S, 5 unités de M et 4 unités
de L et souhaite le faire au coût le plus bas possible. On suppose que les deux procédés
fonctionnent de manière indépendante et qu’ils peuvent utiliser une quantité quelconque
de pétrole brut.
Notons x1 la quantité de pétrole brut utilisée par le procédé 1 (en dizaine d’unité, x1 = 1, 5
signifie qu’on consomme 15 unités de brut par le procédé 1). On note de même x2 la
quantité consommée par l’utilisation du procédé 2.
Supposons qu’on utilise les procédés 1 et 2 avec des quantités de brut 10x1 et 10x2 , alors
les quantités produites sont :
2x1 + x2 pour S, 2x1 + 2x2 pour M, x1 + 4x2 pour L.
Pour que la commande soit satisfaite il faut donc qu’on ait
2x1 + x2 ≥ 3, 2x1 + 2x2 ≥ 5, x1 + 4x2 ≥ 4.
1. Une partie du contenu de ces notes est repris d’un cours de Martin Grötschel (Lineare Optimierung
(ADM II)) disponible sur internet [Link]
2. Ce document est une première version appelée à évoluer. Merci de me signaler les erreurs, coquilles,...
que vous repéreriez.
1
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
À ces contraintes il faut bien sûr ajouter le fait que x1 et x2 ne peuvent être négatives :
x1 ≥ 0, x2 ≥ 0.
On cherche donc des valeurs de x1 et x2 qui respectent ces contraintes telles que 3x1 + 5x2
soit le plus petit possible. C’est ce qu’on appelle un problème de programmation linéaire
ou d’optimisation linéaire. On l’écrit de la façon suivante :
Les lignes de niveau de la fonction objectif sont les ensembles 3x1 + 5x2 = t. Ce sont des
droites parallèles. Trois telles droites sont représentées en rouge ci-dessus. Ce qu’on cherche
ce sont les point de l’ensemble vert de niveau minimal (pour la fonction objectif). Plus
une droite rouge est haute, plus le niveau auquel elle correspond est élevé. On cherche
donc la droite rouge le plus bas possible qui touche l’ensemble vert. Cette droite est
représentée sur le schéma : elle passe par le point de coordonnées (2, 1/2). On en déduit
que le minimum recherché est 3.2 + 5.1/2 = 17/2 atteint pour x1 = 2 et x2 = 1/2.
2
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
On peut dire que les dessins faits montrent que nous avons bien résolu notre problème.
Mais si le nombre de variables concernées est plus grand (par exemple 333 ce qui est
tout à fait possible) alors ce type de visualisation sera beaucoup plus difficile (car notre
intuition géométrique en dimension 333 est très limitée). Il nous faut donc développer des
méthodes systématiques valables en toute dimension qui ne reposent pas sur notre vision
en dimension 2 ou 3.
Une notion naturelle en programmation linéaire est celle de programme dual. Introduisons
trois variables positives ou nulles y1 , y2 , y3 , multiplions chacune des contraintes
2 1 y1 3
x 1 3
A= 2 2 x= c= y = y2 b = 4 .
x2 5
1 4 y3 5
Alors le premier problème s’écrit
minhc, xi s.c. Ax ≥ b, x ≥ 0,
3
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
où il faut comprendre qu’un vecteur est supérieur ou égal à un autre si chacune des
coordonnées du premier est supérieure à la coordonnée correspondante du deuxième. Le
deuxième problème s’écrit
maxhb, yi s.c. t Ay ≤ c, y ≥ 0.
Séparation de points
max δ,
s.c. ∀i = 1, . . . , 7 y(qi ) ≤ ax(qi ) + b + δ, ∀i = 1, . . . , 8 y(pi ) ≥ ax(pi ) + b − δ.
On peut chercher à séparer les deux ensembles de points par autre chose que des droites
(des paraboles, des courbes de degré trois,...) ou encore résoudre ce genre de problème en
dimension plus grande.
Alternative à la droite de régression linéaire
On cherche à minimiser la quantité
n
X
|yi − axi − b|
i=1
Une solution analytique comme celle que nous utilisons pour minimiser
n
X
(yi − axi − b)2
i=1
qui mène à la droite de régression est difficile à décrire simplement. Mais donner une
solution algorithmique basée sur une présentation du problème comme programme linéaire
est possible :
min l1 + l2 + . . . + ln ,
4
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Les problèmes de programmation linéaire sont résolus par des opérations très classiques
sur les matrices (essentiellement la méthode du pivot de Gauss). Les contraintes et la
fonction à optimiser sont de nature linéaire. Pour bien comprendre les problèmes et leurs
résolutions l’outil matriciel (calculatoire et théorique) est essentiel. Considérons les ma-
trices suivantes :
x1 1
1 0 1 0 0 x2
2
4
A = 2 1 0 1 0 x = x3 c = 0 b = 10 .
−1 1 0 0 1
x4 0 5
x5 0
Les vecteurs colonnes de A sont les résultats de la multiplication de A par ces vecteurs
de la base canonique. Par exemple
0
1 0 1 0 0 1 0
A.e2 = 2 1 0 1 0 0 = 1 .
−1 1 0 0 1
0 1
0
Définition 0.1. Soit P une partie de Rd . On appelle sous-espace affine engendré par P
le plus petit sous-espace affine contenant P .
5
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
x + E = {x + u ∈ Rd /u ∈ E}
Soient u et v deux vecteurs appartenant tous les deux à Rd . On dit que u est inférieur à
v si chaque coordonnée de u est inférieure à v : pour tout i = 1, . . . , d, ui ≤ vi 3
Soit A une matrice m × m et b ∈ Rm . Notons ai,j les coefficients de A. L’ensemble
C(A, b) = {x : Ax ≤ b} est l’ensemble des x tels que, pour tout i allant de 1 à m on ait
n
X
ai,j xj ≤ bj .
j=1
Pour i allant de 1 à m, notons li le vecteur de Rn dont les coordonnées sont les ai,j :
6
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
la première égalité est vraie car y satisfait les contraintes du programme dual, la deuxième
est un calcul de transposée de produit de matrice, l’inégalité est vraie car x satisfait les
contraintes du problème primal et car y ≥ 0.
Ce que montre le calcul précédent est que si les contraintes sont vérifiées, toutes les valeurs
de la fonction objectif hc, xi sont inférieures ou égales à celles, hb, yi, du programme dual.
On en déduit que si on trouve une valeur commune aux deux fonctions obejectif en deux
points dans les ensembles définis par les contraintes alors on a résolu les deux problèmes
en même temps.
Si l’ensemble défini par les contraintes du problème primal n’est pas vide mais que la
fonction objectif n’est pas majorée sur cet ensemble alors nécessairement l’ensemble défini
par les contraintes du problème dual est vide (et on a une affirmation symétrique).
Si aucun des deux ensembles définis par les contraintes n’est vide alors la fonction objectif
du problème primal est majorée donc a une borne supérieure, celle du problème dual est
minorée, donc a une borne inférieure. Ces bornes sont-elles atteintes ? Sont-elles égales ?
Considérons l’ensemble C(A, b) = {x : Ax ≤ b}. C’est une intersection de m demi-
espaces : on appelle un tel ensemble un polyèdre.
Pour répondre à ces questions nous allons étudier les propriétés des ensembles de contraintes
qui sont appelés des polyèdres. Ce sont des exemples de parties dites convexes d’espaces
vectoriels. Commençons par étudier les convexes en général. Ce sont des ensembles appa-
raissant souvent en optimisation.
7
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Définition 0.4. Soit C une partie de Rd . On dit que C est convexe si lorsque x et y sont
deux points de C, alors le segment joignant ces deux points [x, y] = {tx + (1 − t)y / t ∈
[0, 1]} est lui aussi inclus dans C.
8
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Une face d’un convexe C de Rd est une partie F de C telle que si x ∈ F est barycentre à
coefficients positifs de deux points y et z de C alors y et z appartiennent aussi à F .
On appelle point extrémal d’un convexe fermé C une face réduite à un point c’est-à-dire
un point x de C tel que si x = αy + (1 − α)z avec α ∈]0, 1[, y et z dans C alors x = y = z.
Lorsque C est un polyèdre on appelle sommets ses points extrémaux. Comment trouver
les sommets d’un polyèdre C(A, b) ? En a-t-il ? Si le rang de A n’est pas n alors C(A, b)
contient une droite et n’a pas de sommet. En effet, dans ce cas le noyau de l’application
φA : x 7→ Ax est de dimension suprérieure ou égale à 1 car la formule du rang donne
dim KerφA + dim ImφA = n,
donc si dim ImφA < n alors dim KerφA ≥ 1. Or si x ∈ C(A, b) et z ∈ KerφA alors
A(x + z) = Ax + Az = Ax + 0 = Ax ≤ b. Cela signifie que x + z appartient à C(A, b). Si
KerφA n’est pas réduit à 0, C(A, b) contient donc une droite (à moins qu’il ne soit vide
auquel cas il n’a pas non plus de point extrémaux).
9
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Théorème 0.6. (projection sur un convexe) Soit C un convexe fermé inclus dans Rd .
Pour tout x n’appartenant pas à C il existe un unique point pC (x) de C minimisant la
distance de x aux points de C c’est-à-dire tel que
Ce point pC (x) est appelé projection de x sur C. Il est caractérisé par la propriété que
pour tout z ∈ C on a
hx − pC (x), z − pC (x)i ≤ 0.
(ce qui signifie que l’angle fait par les vecteurs x − pC (x) et z − pC (x) est obtus).
10
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
hx − y∞ , x − z∞ i ≤ kx − y∞ kkx − z∞ k
ce qui donne
λ2 kpC (x) − zk2 + 2λhx − pC (x), pC (x) − zi ≥ 0.
11
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Si on suppose maintenant λ > 0 on peut diviser par λ. On obtient que pour tout λ ∈]0, 1]
on a
λkpC (x) − zk2 + 2hx − pC (x), pC (x) − zi ≥ 0.
En faisant tendre λ vers 0, on voit que ceci n’est possible que si hx − pC (x), pC (x) − zi ≥ 0,
ce qui est la même chose que hx − pC (x), z − pC (x)i ≤ 0.
Le théorème de projection fournit ce qu’on appelle des hyperplans et des demi-espaces
d’appui pour le convexe C. Si y ∈
/ C alors
La première inégalité vient du fait que les deux produits scalaires hpC (y)−y, pC (y)−pC (z)i
et hz − pC (z), pC (y) − pC (z)i sont négatifs ou nuls. La deuxième est l’inégalité de Cauchy-
Schwarz.
Théorème 0.7. (Minkowski) Soit C un convexe fermé borné inclus dans Rd . Alors C est
l’enveloppe convexe de ses points extrémaux.
Théorème 0.8. Soit C un convexe fermé inclus dans Rd ne contenant pas de droite. Alors
C est l’enveloppe convexe de ses points extrémaux et de ses demi-droites extrémales.
12
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
une demi-droite. Si c’est un segment alors il est l’enveloppe convexe de ses deux extrémités
qui sont ses deux points extrémaux. Si c’est une demi-droite alors il coïncide évidemment
avec l’enveloppe convexe de sa demi-droite extrémale.
Soit k un entier naturel. Supposons que le résultat soit vrai pour tout convexe fermé de
dimension inférieur ou égal à k. Montrons qu’il l’est alors pour tout convexe de dimension
k + 1. Soit C un convexe fermé de dimension k + 1 ne contenant pas de demi-droite. Le
convexe C est inclus dans un espace Rd qui n’est pas nécessairement Rk+1 mais quitte à
remplacer Rd par Af f (C) on peut supposer que C est inclus dans Rk+1 et d’intérieur non
vide. Soit x un point du bord de C. Il existe y ∈/ C tel que x = pC (y). L’hyperplan
est un hyperplan d’appui pour C : H contient pC (y) et C est inclus dans l’un des demi-
espaces définis pas H :
L’ensemble H ∩ C est donc un convexe fermé (car intersection de deux convexes fermés),
non vide (car il contient pC (y)), de dimension inférieure ou égale à k (car il est inclus dans
H). Par hypothèse de récurrence H ∩ C est l’enveloppe convexe de ses points extrémaux
et de ses demi-droites extrémales. Or les points extrémaux de H ∩ C sont extrémaux dans
C. Cela provient du fait que H est un hyperplan d’appui de C : tous les points de C sont
du même côté de H. Si x est un point extrémal de H ∩ C et barycentre à coefficients
positifs de deux points y et z de C alors y et z doivent être sur H (sinon l’un serait d’un
côté de H, l’autre de l’autre côté, ce qui est impossible). On en déduit que y et z sont
donc dans H ∩ C. Or x est extrémal dans H ∩ C donc y = z = x. Nous avons donc montré
que les points du bord de C étaient dans l’enveloppe convexe de ses points extrémaux et
de ses demi-droites extrémales... à condition d’expliquer pourquoi il existe un point y ∈ /C
tel que pC (y) = x.
Prenons une suite (yk ) de points qui ne soient pas dans C telle que lim yk = x. Alors
p(yk ) tend vers x. Notons Sk (x, 1) la sphère de rayon 1 centrée en x et zk l’intersection
de la demi-droite [x, yk ) avec Sk (x, 1). Alors (zk ) est une suite de points à distance 1 de
x qui sont projetés sur les points p(yk ) qui tendent vers x. Comme la sphère Sk (x, 1)
est compacte, on peut extraire de (zk ) une suite convergente vers une limite z. Alors
d(z, x) = 1, z ∈
/ C et (par continuité de p) p(z) = x.
Considérons maintenant un point x de l’intérieur de C. Notons Sk la sphère unité de Rk+1
(c’est-à-dire l’ensemble des vecteurs de norme 1). Pour v ∈ Sk considérons la demi-droite
Dv = {x + λv / λ ≥ 0},
E = {v ∈ Sk / Dv ⊂ C}.
13
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Par hypothèse E ne contient pas deux vecteurs opposés (car C ne contient pas de droite).
Comme C est fermé, E est fermé aussi. Les deux ensembles E et −E sont donc deux
parties fermées disjointes de Sk . Ce sont donc deux parties compactes disjointes et comme
telles elles sont à distance positive l’une de l’autre. On en déduit que leur réunion ne peut
pas être égale à Sk . Prenons v0 ∈ Sk \ (E ∪ −E). Alors Dv0 6⊆ C et D−v0 6⊆ C. Cela signifie
qu’il existe λ et µ positifs tels que
Autrement dit x est sur un segment joignant deux points du bord de C. Ces deux points
sont dans l’enveloppe convexe des points extrémaux et des demi-droites extrémales de C
(d’après la première partie de la démonstration), donc x aussi.
Proposition 0.9. Soit C un convexe fermé inclus dans Rd . Il est compact si et seulement
s’il ne contient pas de demi-droite.
Démonstration Une demi-droite n’est pas bornée donc si C contient une demi-droite, C
n’est pas borné. Supposons que C ne soit pas bornée. Montrons qu’il contient une demi-
droite. Comme C n’est pas borné, il existe une suite (xk )k≥0 telle que lim kxk = +∞.
Considérons alors la suite des vecteurs
xk − x0
uk = .
kxk − x0 k
Ce sont des vecteurs de norme 1 donc des éléments de Sk . Or Sk est compacte, donc on
peut extraire de (uk )k≥0 une suite convergente (ukj )j≥0 vers une limite l appartenant à
Sk . Pour tout j, xkj appartient à C, donc x0 + ukj aussi (si j est assez grand, car c’est
un point du segment [x0 , xkj ]). Comme C est fermé, on en déduit que x0 + l appartient
à C. Maintenant on peut voir que tout point de la forme x0 + λl, avec λ ≥ 0, est limite
de x0 + λukj (qui appartient à C si j est assez grand) donc est dans C. Conclusion : C
contient la demi-droite {x0 + λl / λ ∈ R+ }.
Corollaire : un polyèdre compact est l’enveloppe convexe d’un nombre fini de points. Un
polyèdre ne contenant pas de droites est l’enveloppe convexe d’un nombre fini de points
et de demi-droites.
Question : Un polyèdre peut-il contenir une droite et avoir un sommet ?
14
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
C(A, b) = {x ∈ Rn / Ax = b, x ≥ 0},
où A est une matrice m × n. Notons r le rang de A. Si r < m alors, soit le système est
incompatible, et dans ce cas C(A, b), soit le système est équivalent à un système A0 x = b0
avec une matrice r × n de rang r (en enlevant m − r lignes superflues). Nous supposerons
maintenant que m ≤ n et que A est de rang m.
Si m = n le système Ax = b a une unique solution, C(A, b) est un point si A−1 b ≥ 0, et
vide sinon. Le cas le plus intéressant est m < n : C(A, b) est l’intersection de {x / x ≥ 0}
et d’un sous-espace affine de dimension n − m : s’il n’est pas vide, alors pour tout point
x0 de C(A, b), on a
C(A, b) = [x0 + ker φA ] ∩ {x / x ≥ 0}.
0.7.1 L’algorithme
maxhc, xi s.c. Ax = b, x ≥ 0.
C(A, b) = {x ∈ Rn / Ax = b, x ≥ 0}.
4. Wikipédia ; https ://[Link]/wiki/Algorithme_du_simplexe
15
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Pour décrire l’algorithme il est pratique d’introduire certaines notations. Les sommets de
C(A, b) sont calculés à partir de matrices m×m obtenues en choisissant m colonnes parmi
les n colonnes de A. On décrira un tel choix en indiquant quelles colonnes sont choisies
(B) et quelles colonnes ne le sont pas (N ). On se donnera deux familles d’indices B et N
telles que les pi soient tous différents des qj (et vice-versa) et telles que en prenant les pi
et les qi on obtienne tous les indices de 1 à n. On notera AB la matrice obtenue à partir de
A en ne conservant que les colonnes dont les numéros sont dans B, AN a matrice obtenue
à partir de A en ne conservant que les colonnes dont les numéros sont dans N . La matrice
AN est une matrice m × (n − m), la matrice AB est une matrice carrée m × m.
Lorsque B est donné et x ∈ Rn on note xB le vecteur de Rm dont les coordonnées sont
celles de x de numéros dans B, xN le vecteur de Rn−m dont les coordonnées sont celles
de x de numéros dans N .
Si AB est inversible on dit que c’est une matrice de base de A (la famille B elle même est
alors souvent qualifiée de base...). Dans ce cas le vecteur x défini par xB = A−1
B b, xN = 0
est dit solution de base. Si AB est une base les xj pour j dans B sont dites variables de
base, les xk pour k dans N sont dites variables hors base.
Si AB est une base, on dit que AB et la solution de base sont admissibles si A−1
B b ≥ 0.
−1
Une base admissible est dite dégénérée si certaines des coordonnées de AB b sont nulles,
non dégénérée si A−1
B b > 0.
Proposition 0.11. Le polyèdre C(A, b) ne contient pas de droites. Il est donc égal à l’en-
veloppe convexe de l’ensemble de ses points extrémaux et de ses demi-droites extrémales.
Démonstration Une droite ne peut pas être incluse dans l’ensemble {x / x ≥ 0} a fortiori
pas dans C(A, b). Montrons qu’une droite contient toujours des points dont certaines co-
ordonnées sont négatives. Soit D une droite. Elle peut être représentée paramétriquement
par un point et un vecteur directeur
D = {a + λv / λ ∈ R},
où a et v sont deux vecteurs et v un vecteur directeur de D n’est pas nul. Soit i0 tel que
vi0 ne soit pas nul. Suivant le signe de vi0 on a
ou
lim ai0 + λvi0 = −∞ et lim ai0 + λvi0 = +∞.
λ→+∞ λ→−∞
Dans tous les cas pour certaines valeurs de λ la coordonnée numéro i0 de a + λv est
négative.
16
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
En particulier C(A, b) a des sommets. Soit c ∈ Rn . Supposons que hc, xi soit majorée sur
C(A, b), alors le problème a une solution et le maximum est atteint en un sommet de
C(A, b). Le convexe C(A, b) ne contient pas de droite donc est égal à l’enveloppe convexe
de ses points extrémaux et de ses demi-droites extrémales. Notons si pour i allant de 1
à r les sommets de C(A, b). Les extrémités des demi-droites sont des points extrémaux.
On peut numéroter les sommets de telle façon que les premiers soient des extrémités de
demi-droites extrémales. Si C(A, b) contient s demi-droites extrémales elles sont de la
forme
{si + λvi / λ ≥ 0}.
Soit x un élément de C(A, b). Comme C(A, b) est ’enveloppe convexe de ses points ex-
trémaux et de ses demi-droites extrémales, il existe des nombres positifs ou nuls αi , λj ,
i = 1, . . . , r, j = 1, . . . , s, tels que ri=1 αi = 1 et
P
s
X r
X
x= αj (sj + λj vj ) + αi si .
j=1 i=s+1
ce qui contredirait le fait que hc, xi est majorée sur C(A, b) (nous nous sommes placé sous
cette hypothèse). Mais alors on a
s
X r
X
hc, xi = hc, αj (sj + λj vj ) + αi si i
j=1 i=s+1
s
X r
X
= αj (hc, sj i + λj hc, vj i) + αi hc, si i
j=1 i=s+1
Xs r
X
≤ αj hc, sj i + αi hc, si i
j=1 i=s+1
Xr
= αi hc, si i
i=1
r
!
X
≤ αi maxhc, si i
i
i=1
= maxhc, si i
i
17
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Démonstration L’égalité
xB
(AB , AN ) =b
xN
s’écrit AB xB + AN xN = b. En multipliant par A−1
B on obtient
xB = A−1 −1
B b − AB AN xN .
A = A−1
B AN = (ars )r=1...,m;s=1,...n−m , b = AB −1b
AB epi = AB 0 epi
(ces vecteurs sont les vecteurs colonne de AB et AB 0 qui coïncident). On en déduit que
A−1
B 0 AB est l’identité sur V ect{epi / i 6= r}. D’autre part AB 0 eqs est la colonne numéro qs
de A c’est-à-dire
AB 0 eqs = AN eqs .
18
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
hc, xi =t cB A−1 t t −1
B b + ( cN − cB AB AN )xN .
19
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
où l’on noté 0N le vecteur dont les coordonnées d’indice dans N sont nulles. Or le vecteur
(AB −1b, 0N ) est un sommet de C(A, b). Nous avons montré que si c ≤ 0 alors le sommet
associé à B est un point où la fonction objectif est maximale.
Supposons maintenant que le sommet x = (AB −1b, 0N ) associé à B est un point où la
fonction objectif est maximale. De l’inégalité
hc, yi ≤ hc, xi
on tire
hcB , A−1 −1
B bi + hc, yN i ≤ hcB , AB bi + 0, donc hc, yN i ≤ 0.
autrement écrit
hc, xi = hc, xi + hc, λei i = hc, xi + λci .
Comme hc, xλ i ≤ hc, xi cela entraîne que ci est négatif ou nul.
20
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Par ailleurs x0qs = br /ars et les autres coordonnées de x0 sont nulles, donc x0 est un sommet
de C(A, b).
Calculons maintenant la fonction objectif en x0 :
Or
On en déduit que hcB 0 , ηi − cpr est strictement positif, et comme xpr l’est aussi (car on
suppose que le sommet n’est pas dégénéré), on a
En pratique l’algorithme du simplexe fait partie des fonctions classiques des programmes
de calculs usuels (comme les tableurs). Pour décrire comment il fonctionne nous allons
le décrire sous la forme de tableaux successifs sur quelques exemples. Considérons le
programme linéaire suivant
max x1 + 2x2
21
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
sous contraintes
maxhc, xi s.c. Ax = b, x ≥ 0,
À partir de ces données nous construisons le tableau suivant que nous allons transformer
à partir des règles de pivotage définies plus haut.
1 2 0 0 0 0
1 0 1 0 0 4 x3
2 1 0 1 0 10 x4
-1 1 0 0 1 5 x5
Les traits du tableau définissent quatre zones : la ligne en haut à gauche est le vecteur des
coûts réduits, en bas à gauche on reconnaît A, en bas à droite b et des noms de variables.
Les noms de variables indiquent quel sommet du polyèdre est considéré. Ici c’est le sommet
dont les coordonnées sont (0, 0, 4, 10, 5). En ce sommet la fonction objectif est nulle : c’est
la signification du 0 figurant en haut à droite.
Pour choisir comment nous allons transformer ce tableau on considère les coordonnées
positives du vecteur des coûts réduits figurant (en rouge ci-dessous) et nous choisissons
un pivot parmi les coefficients positifs dans les colonnes correspondantes (en vert).
1 2 0 0 0 0
1 0 1 0 0 4 x3
2 1 0 1 0 10 x4
-1 1 0 0 1 5 x5
22
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
Ici on peut choisir l’une ou l’autre des deux premières colonnes. Si l’on choisit la première
on calcule 4/1 = 4 et 10/2 = 5 pour pivot il faut prendre le 1 (en violet ci-dessous)
1 2 0 0 0 0
1 0 1 0 0 4 x3
2 1 0 1 0 10 x4
-1 1 0 0 1 5 x5
Si l’on choisit la deuxième colonne on calcule 10/1 = 10 et 5/1 = 5 pour pivot il faut
prendre le deuxième 1 (en violet ci-dessous)
1 2 0 0 0 0
1 0 1 0 0 4 x3
2 1 0 1 0 10 x4
-1 1 0 0 1 5 x5
Supposons qu’on ait choisit la première solution. Alors on utilise le pivot pour annuler
tous les coefficients de la colonne correspondante en faisant des opérations sur les lignes
(première ligne moins la deuxième, troisième moins deux fois la deuxième, quatrième plus
la deuxième). On obtient
0 2 -1 0 0 -4
1 0 1 0 0 4 x1
0 1 -2 1 0 2 x4
0 1 1 0 1 9 x5
0 2 -1 0 0 -4
1 0 1 0 0 4 x1
0 1 -2 1 0 2 x4
0 1 1 0 1 9 x5
0 2 -1 0 0 -4
1 0 1 0 0 4 x1
0 1 -2 1 0 2 x4
0 1 1 0 1 9 x5
23
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
0 0 3 -2 0 -8
1 0 1 0 0 4 x1
0 1 -2 1 0 2 x2
0 0 3 -1 1 7 x5
0 0 3 -2 0 -8
1 0 1 0 0 4 x1
0 1 -2 1 0 2 x2
0 0 3 -1 1 7 x5
0 0 0 -1 -1 -15
1 0 0 1/3 -1/3 5/3 x1
0 1 0 1/3 2/3 20/3 x2
0 0 1 -1/3 1/3 7/3 x3
Tous les coûts réduits sont négatifs. Nous avons trouvé le sommet qui maximise la fonction
objectif : (5/3, 20/3, 7/3, 0, 0), et la valeur du maximum : 15.
Si on avait choisi la deuxième colonne on aurait obtenu :
1 2 0 0 0 0
1 0 1 0 0 4 x3
2 1 0 1 0 10 x4
-1 1 0 0 1 5 x5
3 0 0 0 -2 -10
1 0 1 0 0 4 x3
3 0 0 1 -1 5 x4
-1 1 0 0 1 5 x2
3 0 0 0 -2 -10
1 0 1 0 0 4 x3
3 0 0 1 -1 5 x4
-1 1 0 0 1 5 x2
0 0 0 -1 -1 -15
1 0 1 -1/3 1/3 7/3 x3
1 0 0 1/3 -1/3 5/3 x1
0 1 0 1/3 2/3 20/3 x2
24
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
C’est bien la même solution que celle que nous avions trouvé en choisissant la première
colonne. Nous n’avons parcouru le même chemin de sommets pour parvenir à l’optimum
mais nous aboutissons finalement au même.
Considérons un autre exemple (celui de l’introduction) :
sous contraintes
sous contraintes
3 5 4 0 0 0
2 2 1 1 0 3 s1
1 2 4 0 1 5 s2
3 5 4 0 0 0
2 2 1 1 0 3 s1
1 2 4 0 1 5 s2
2 3 0 0 -1 -5
7/4 3/2 0 1 0 7/4 s1
1/4 1/2 1 0 1/4 5/4 x3
2 3 0 0 -1 -5
7/4 3/2 0 1 0 7/4 s1
1/4 1/2 1 0 1/4 5/4 x3
25
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
0 9/7 0 -8/7 -1 -7
1 6/7 0 4/7 0 1 x1
0 2/7 1 -1/7 1/4 1 x3
0 9/7 0 -8/7 -1 -7
1 6/7 0 4/7 0 1 x1
0 2/7 1 -1/7 1/4 1 x3
L’algorithme est fini : la fonction objectif est maximale au sommet (0, 7/6, 2/3, 0, 0) et sa
valeur maximale est 17/2.
Dans les exemples précédents il est facile de trouver le vecteur des coût réduits car on
commence avec un sommet dont les coordonnées différentes de 0 sont artificielles. Que se
passe-t-il si on un problème est déjà donné sous forme standard ? On peut calculer un
sommet et le vecteur des coûts réduits correspondant. Une autre manière de procéder est
d’introduire là aussi des variables artificielles. Voyons comment sur un exemple :
max x1 − x2 + 2x3
sous contraintes
max x1 − x2 + 2x3
sous contraintes
1 -1 2 0 0 0 0
2 -3 1 1 0 0 3 s1
1 -2 -1 0 1 0 1 s2
3 -5 0 0 0 1 4 s3
0 1 3 0 -1 0 -1
0 1 3 1 -2 0 1 s1
1 -2 -1 0 1 0 1 x1
0 1 3 0 -3 1 1 s3
26
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
0 0 0 -1 1 0 -2
0 1/3 1 1/3 -2/3 0 1/3 x3
1 -5/3 0 1/3 1/3 0 4/3 x1
0 0 0 -1 -1 1 0 s3
0.7.3 Cyclage
x1 , x2 , x3 , x4 , x4 , x6 , x7 ≥ 0.
4/5 -18 -1 -1 0 0 0 0
16/5 -84 -12 8 1 0 0 0 x5
1/5 -5 -2/3 1/3 0 1 0 0 x6
1 0 0 0 0 0 1 1 x7
0 3 2 -3 -1/4 0 0 0
1 -105/4 -15/4 5/2 5/16 0 0 0 x1
0 1/4 1/12 -1/6 -1/16 1 0 0 x6
0 105/4 15/4 -5/2 -5/16 0 1 1 x7
0 0 1 -1 1/2 -12 0 0
1 0 5 -15 -25/4 105 0 0 x1
0 1 1/3 -2/3 -1/4 4 0 0 x2
0 0 -5 15 25/4 -105 1 1 x7
27
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
7/5 -33 -3 0 0 3 0 0
-8/5 36 4 0 1 -24 0 0 x5
3/5 -15 -2 1 0 3 0 0 x4
1 0 0 0 0 0 1 1 x7
4/5 -18 -1 -1 0 0 0 0
16/5 -84 -12 8 1 0 0 0 x5
1/5 -5 -2/3 1/3 0 1 0 0 x6
1 0 0 0 0 0 1 1 x7
Nous sommes revenus au tableau de départ ! Tout ça pour rien... On dit qu’il y a eu
cyclage. Cela peut se produire quand les sommets parcourus sont dégénérés.
Ce que nous avons montré est que les problèmes de programmation linéaire pouvaient
se résoudre grâce à des opérations simples sur des tableaux et que des algorithmes de
résolution existaient. La résolution de tels problèmes peut se faire grâce à un tableur.
Je recopie quelques photos d’écran qui donnent une idée de la méthode à suivre. Vous
trouverez facilement plus de détails sur internet...
28
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
29
L3 MiaSHS 2017-2018 Optimisation Universités de Rennes 1 & 2
30