Cours 3: Programmation linéaire

Transcription

Cours 3: Programmation linéaire
Cours 3: Programmation linéaire
• Position du problème
• Algorithme du simplexe générique
• Dualité.
• Dégénérescence et terminaison de l’algorithme
1-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Cours 3: Programmation linéaire
• Position du problème
• Algorithme du simplexe générique
• Dualité.
• Dégénérescence et terminaison de l’algorithme
2-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un problème de programmation linéaire
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Problème: Trouver un point x = (x1 , . . . , xn ) qui
• satisfait les m contraintes ai,1 x1 + . . . + ai,n xn ≤ bi ,
• et maximise le produit c · x = c1 x1 + . . . + cn xn .
3-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un problème de programmation linéaire
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Problème: Trouver un point x = (x1 , . . . , xn ) qui
• satisfait les m contraintes ai,1 x1 + . . . + ai,n xn ≤ bi ,
• et maximise le produit c · x = c1 x1 + . . . + cn xn .
Reformulation matricielle: on cherche max(c · x | Ax ≤ b).
3-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un problème de programmation linéaire
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Problème: Trouver un point x = (x1 , . . . , xn ) qui
• satisfait les m contraintes ai,1 x1 + . . . + ai,n xn ≤ bi ,
• et maximise le produit c · x = c1 x1 + . . . + cn xn .
Reformulation matricielle: on cherche max(c · x | Ax ≤ b).
Remarque: Les ai,j , bi et ci peuvent être négatifs, on peut donc
modéliser des contraintes ≥ ou = et chercher min au lieu de max.
3-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
• 10 lys, 20 roses, 10 jonquilles: 5 euros
4-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
• 10 lys, 20 roses, 10 jonquilles: 5 euros
Problème Quels bouquets préparer si on est assuré de tout vendre ?
4-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
4-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
Contraintes: sur les lys: 10x + 10y ≤ 50
sur les roses: 10x + 20y ≤ 80
sur les jonquilles: 20x + 10y ≤ 80
4-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
Contraintes: sur les lys: 10x + 10y ≤ 50
sur les roses: 10x + 20y ≤ 80
sur les jonquilles: 20x + 10y ≤ 80
x≥0
y≥0
4-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
Contraintes: sur les lys: 10x + 10y ≤ 50
sur les roses: 10x + 20y ≤ 80
sur les jonquilles: 20x + 10y ≤ 80
x≥0
y≥0
Fonction économique à maximiser: max(4x + 5y).
4-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
y
Contraintes: sur les lys: 10x + 10y ≤ 50
4
3
sur les roses: 10x + 20y ≤ 80
2
1
sur les jonquilles: 20x + 10y ≤ 80
0
x
0 1 2 3 4
x≥0
y≥0
Fonction économique à maximiser: max(4x + 5y).
4-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
y
Contraintes: sur les lys: 10x + 10y ≤ 50
4
20
3
sur les roses: 10x + 20y ≤ 80
23
2
22
1
sur les jonquilles: 20x + 10y ≤ 80
16
0
x
0 1 2 3 4
x≥0
y≥0
Fonction économique à maximiser: max(4x + 5y).
4-8
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
y
Contraintes: sur les lys: 10x + 10y ≤ 50
4
20
3
sur les roses: 10x + 20y ≤ 80
23
c
2
22
1
sur les jonquilles: 20x + 10y ≤ 80
16
0
x
0 1 2 3 4
x≥0
y≥0
Fonction économique à maximiser: max(4x + 5y).
4-9
Gilles Schaeffer
INF-550-3: Programmation linéaire
Un exemple bateau: le fleuriste
Donnée. En stock: 50 lys, 80 roses, 80 jonquilles.
Composition des bouquets au catalogue:
• 10 lys, 10 roses, 20 jonquilles: 4 euros
x bouquets
• 10 lys, 20 roses, 10 jonquilles: 5 euros
y bouquets
Problème Quels bouquets préparer si on est assuré de tout vendre ?
y
Contraintes: sur les lys: 10x + 10y ≤ 50
4
20
3
sur les roses: 10x + 20y ≤ 80
23
c
2
22
1
sur les jonquilles: 20x + 10y ≤ 80
16
0
x
0 1 2 3 4
x≥0
y≥0
Fonction économique à maximiser: max(4x + 5y).
Lorsqu’on a les contraintes xi ≥ 0 on peut toujours penser en termes
économiques: produits finis, matières premières, bénéfice.
4-10
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
5-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
5-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
5-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
5-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
5-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
5-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
5-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
5-8
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide
5-9
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide
5-10
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide ou non borné
5-11
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide ou non borné
Le vecteur c indique la direction dans
laquelle on optimise: max(c · x | x ∈ P )
5-12
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide ou non borné
Le vecteur c indique la direction dans
laquelle on optimise: max(c · x | x ∈ P )
L’optimum peut être à l’infini.
5-13
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide ou non borné
Le vecteur c indique la direction dans
laquelle on optimise: max(c · x | x ∈ P )
L’optimum peut être à l’infini.
5-14
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide ou non borné
Le vecteur c indique la direction dans
laquelle on optimise: max(c · x | x ∈ P )
L’optimum peut être à l’infini.
S’il est fini, il est atteint en un sommet.
C’est toujours le cas si P est borné.
5-15
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide ou non borné
Le vecteur c indique la direction dans
laquelle on optimise: max(c · x | x ∈ P )
Par convexité, un sommet est optimum si
et seulement si il est meilleur que ses voisins.
5-16
Gilles Schaeffer
INF-550-3: Programmation linéaire
Interprétation géométrique
Donnée: Une matrice réelle A = (ai,j ) de taille m × n,
un vecteur b = (b1 , . . . , bm ) de taille m,
un vecteur c = (c1 , . . . , cn ) de taille n.
Chaque équation ai,1 x1 + . . . + ai,n xn ≤ bi coupe l’espace en 2,
le long d’un l’hyperplan normal au vecteur Li = (ai,1 , . . . , ai,n ) .
L’ensemble des x satisfaisant Ax ≤ b
forme un polyhèdre convexe P
éventuellement vide ou non borné
Le vecteur c indique la direction dans
laquelle on optimise: max(c · x | x ∈ P )
Par convexité, un sommet est optimum si
et seulement si il est meilleur que ses voisins.
optimum local ⇒ optimum global
5-17
Gilles Schaeffer
INF-550-3: Programmation linéaire
Cours 3: Programmation linéaire
• Position du problème
• Algorithme du simplexe générique
• Dualité.
• Dégénérescence et terminaison de l’algorithme
6-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
7-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
7-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
Remarques: Glouton...
7-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
Remarques: Glouton...
Qu’est ce qu’un sommet, un voisin ?
7-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
Remarques: Glouton...
Qu’est ce qu’un sommet, un voisin ?
Sommet = intersection de n hyperplans,
donné par I = {indices des n équations}
7-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
Remarques: Glouton...
Qu’est ce qu’un sommet, un voisin ?
Sommet = intersection de n hyperplans,
donné par I = {indices des n équations}
Voisin = partage n − 1 équations
7-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
Remarques: Glouton...
Qu’est ce qu’un sommet, un voisin ?
Sommet = intersection de n hyperplans,
donné par I = {indices des n équations}
Voisin = partage n − 1 équations
n=2
⇒ un sommet a n(m − n) voisins ?
m=5
7-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
Remarques: Glouton...
Qu’est ce qu’un sommet, un voisin ?
Sommet = intersection de n hyperplans,
donné par I = {indices des n équations}
Voisin = partage n − 1 équations
n=2
⇒ un sommet a n(m − n) voisins ?
m=5
On veut un voisin qui soit un sommet de P .
7-8
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, premier essai
• Initialiser x avec un sommet quelconque de P
• Tant qu’on a pas trouvé une direction infinie où c·x croit,
et qu’il existe x0 voisin de x avec c · x0 > c · x,
faire x := x0 .
Remarques: Glouton...
Qu’est ce qu’un sommet, un voisin ?
Sommet = intersection de n hyperplans,
donné par I = {indices des n équations}
Voisin = partage n − 1 équations
n=2
⇒ un sommet a n(m − n) voisins ?
m=5
On veut un voisin qui soit un sommet de P .
Le long d’une arête (I \ {i}), seul le premier
voisin rencontré est dans P : comparer les distances.
7-9
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0
• il existe u tq c · u > 0 et Au ≤ 0
8-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0
• il existe u tq c · u > 0 et Au ≤ 0
8-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0 ⇔ l’optimum est borné
• il existe u tq c · u > 0 et Au ≤ 0
8-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0 ⇔ l’optimum est borné
• il existe u tq c · u > 0 et Au ≤ 0
8-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0 ⇔ l’optimum est borné
• il existe u tq c · u > 0 et Au ≤ 0 ⇔ ∞
8-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0 ⇔ l’optimum est borné
• il existe u tq c · u > 0 et Au ≤ 0 ⇔ ∞
En effet: c = yA ⇒ cu = yAu
donc si y ≥ 0 et Au ≤ 0, on a cu ≤ 0.
8-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0 ⇔ l’optimum est borné
• il existe u tq c · u > 0 et Au ≤ 0 ⇔ ∞
En effet: c = yA ⇒ cu = yAu
donc si y ≥ 0 et Au ≤ 0, on a cu ≤ 0.
Application: si au cours de l’exécution
on rencontre une arête de direction u tq
Au ≤ 0 et cu > 0, on a trouvé une direction
de croissance infinie et on peut s’arrêter.
8-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Détecter les directions infinies où c · x croı̂t.
Si le polyhèdre n’est pas borné, c · x peut croı̂tre indéfiniment:
Lemme: les 2 cas suivants s’excluent mutuellement:
P
• c s’écrit c = i yi Li avec les yi ≥ 0 ⇔ l’optimum est borné
• il existe u tq c · u > 0 et Au ≤ 0 ⇔ ∞
En effet: c = yA ⇒ cu = yAu
donc si y ≥ 0 et Au ≤ 0, on a cu ≤ 0.
Application: si au cours de l’exécution
on rencontre une arête de direction u tq
Au ≤ 0 et cu > 0, on a trouvé une direction
de croissance infinie et onPpeut s’arrêter.
Si au point xI , on a c = i∈I yi Li avec yi ≥ 0,
on a trouvé l’optimum.
8-8
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
9-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
9-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
Si yk ≥ 0 pour tout k ∈ I, on a trouvé l’optimum.
9-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
Si yk ≥ 0 pour tout k ∈ I, on a trouvé l’optimum.
• Sinon on choisit i ∈ I tq yi < 0 et on considère l’arête définie
par les équations de I 0 = I \ {i}. Soit u son vecteur directeur
tq Li u = −1 (on s’éloigne): u est une colonne de (AI )−1 .
9-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
Si yk ≥ 0 pour tout k ∈ I, on a trouvé l’optimum.
• Sinon on choisit i ∈ I tq yi < 0 et on considère l’arête définie
par les équations de I 0 = I \ {i}. Soit u son vecteur directeur
tq Li u = −1 (on s’éloigne): u est une colonne de (AI )−1 .
• Calculer la vitesse vers Lj quand on suit u: vj = Lj · u.
9-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
Si yk ≥ 0 pour tout k ∈ I, on a trouvé l’optimum.
• Sinon on choisit i ∈ I tq yi < 0 et on considère l’arête définie
par les équations de I 0 = I \ {i}. Soit u son vecteur directeur
tq Li u = −1 (on s’éloigne): u est une colonne de (AI )−1 .
• Calculer la vitesse vers Lj quand on suit u: vj = Lj · u.
si vj ≤ 0 on s’éloigne de l’hyperplan Lj : si ∀j, max = ∞.
9-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
Si yk ≥ 0 pour tout k ∈ I, on a trouvé l’optimum.
• Sinon on choisit i ∈ I tq yi < 0 et on considère l’arête définie
par les équations de I 0 = I \ {i}. Soit u son vecteur directeur
tq Li u = −1 (on s’éloigne): u est une colonne de (AI )−1 .
• Calculer la vitesse vers Lj quand on suit u: vj = Lj · u.
si vj ≤ 0 on s’éloigne de l’hyperplan Lj : si ∀j, max = ∞.
• Parmi les voisins sur l’arête, prendre celui qui est dans P .
C’est celui qui est le plus proche parmi ceux du bon côté:
b −L x
donné par un des j tels que vj > 0 qui minimisent j vjj I .
9-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version générique
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
Si yk ≥ 0 pour tout k ∈ I, on a trouvé l’optimum.
• Sinon on choisit i ∈ I tq yi < 0 et on considère l’arête définie
par les équations de I 0 = I \ {i}. Soit u son vecteur directeur
tq Li u = −1 (on s’éloigne): u est une colonne de (AI )−1 .
• Calculer la vitesse vers Lj quand on suit u: vj = Lj · u.
si vj ≤ 0 on s’éloigne de l’hyperplan Lj : si ∀j, max = ∞.
• Parmi les voisins sur l’arête, prendre celui qui est dans P .
C’est celui qui est le plus proche parmi ceux du bon côté:
b −L x
donné par un des j tels que vj > 0 qui minimisent j vjj I .
faire I = I \ {i} ∪ {j}, recalculer xI et reprendre.
9-8
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, analyse
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
Si on avance vers le sommet xJ , J = I \ {i} ∪ {j}, alors:
P
• c = k∈I yk Lk , avec yi < 0.
10-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, analyse
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
Si on avance vers le sommet xJ , J = I \ {i} ∪ {j}, alors:
P
• c = k∈I yk Lk , avec yi < 0.
Comparons l’objectif c · xI avec c · xJ :
10-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, analyse
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
Si on avance vers le sommet xJ , J = I \ {i} ∪ {j}, alors:
P
• c = k∈I yk Lk , avec yi < 0.
Comparons l’objectif c · xI avec c · xJ :
bj −Lj xI
vj
bj −Lj xI
vj
u = c · xI +
c·u
• c · xJ = c · xI + c ·
P
or c · u = k∈I yk Lk · u = −yi > 0 puisque u est dans les
hyperplans Lk , k 6= i et Li · u = −1.
10-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, analyse
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
Si on avance vers le sommet xJ , J = I \ {i} ∪ {j}, alors:
P
• c = k∈I yk Lk , avec yi < 0.
Comparons l’objectif c · xI avec c · xJ :
bj −Lj xI
vj
bj −Lj xI
vj
u = c · xI +
c·u
• c · xJ = c · xI + c ·
P
or c · u = k∈I yk Lk · u = −yi > 0 puisque u est dans les
hyperplans Lk , k 6= i et Li · u = −1.
⇒ comme prévu xJ améliore l’objectif...
10-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, analyse
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
Si on avance vers le sommet xJ , J = I \ {i} ∪ {j}, alors:
P
• c = k∈I yk Lk , avec yi < 0.
Comparons l’objectif c · xI avec c · xJ :
bj −Lj xI
vj
bj −Lj xI
vj
u = c · xI +
c·u
• c · xJ = c · xI + c ·
P
or c · u = k∈I yk Lk · u = −yi > 0 puisque u est dans les
hyperplans Lk , k 6= i et Li · u = −1.
⇒ comme prévu xJ améliore l’objectif... sauf si bj − Lj x = 0 !
10-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, analyse
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
Si on avance vers le sommet xJ , J = I \ {i} ∪ {j}, alors:
P
• c = k∈I yk Lk , avec yi < 0.
Comparons l’objectif c · xI avec c · xJ :
bj −Lj xI
vj
bj −Lj xI
vj
u = c · xI +
c·u
• c · xJ = c · xI + c ·
P
or c · u = k∈I yk Lk · u = −yi > 0 puisque u est dans les
hyperplans Lk , k 6= i et Li · u = −1.
⇒ comme prévu xJ améliore l’objectif... sauf si bj − Lj x = 0 !
Si plus de n hyperplans Lk passent par xI , certaines arêtes dégénèrent
et on peut avoir xJ = xI , l’algorithme risque de boucler.
10-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, analyse
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
Si on avance vers le sommet xJ , J = I \ {i} ∪ {j}, alors:
P
• c = k∈I yk Lk , avec yi < 0.
Comparons l’objectif c · xI avec c · xJ :
bj −Lj xI
vj
bj −Lj xI
vj
u = c · xI +
c·u
• c · xJ = c · xI + c ·
P
or c · u = k∈I yk Lk · u = −yi > 0 puisque u est dans les
hyperplans Lk , k 6= i et Li · u = −1.
⇒ comme prévu xJ améliore l’objectif... sauf si bj − Lj x = 0 !
Si plus de n hyperplans Lk passent par xI , certaines arêtes dégénèrent
et on peut avoir xJ = xI , l’algorithme risque de boucler.
Une solution: perturber les bi pour éliminer les dégénérescences.
10-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
11-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
11-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
On peut toujours poser
de` variables
double)
`yx
´ i = yi − zi (le`nombre
´
´
et maximiser (c, −c) · z pour (A, −A) yz ≤ b et yz ≥ 0.
11-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
On peut toujours poser
de` variables
double)
`yx
´ i = yi − zi (le`nombre
´
´
et maximiser (c, −c) · z pour (A, −A) yz ≤ b et yz ≥ 0.
On cherche donc: argmax(cx | Ax ≤ b, x ≥ 0)
11-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
On peut toujours poser
de` variables
double)
`yx
´ i = yi − zi (le`nombre
´
´
et maximiser (c, −c) · z pour (A, −A) yz ≤ b et yz ≥ 0.
On cherche donc: argmax(cx | Ax ≤ b, x ≥ 0)
Si les bi sont positifs, (0, . . . , 0) est notre sommet initial.
11-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
On peut toujours poser
de` variables
double)
`yx
´ i = yi − zi (le`nombre
´
´
et maximiser (c, −c) · z pour (A, −A) yz ≤ b et yz ≥ 0.
On cherche donc: argmax(cx | Ax ≤ b, x ≥ 0)
Si les bi sont positifs, (0, . . . , 0) est notre sommet initial.
Sinon on cherche un sommet de P = {x | Ax ≤ b, x ≥ 0}
11-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
On peut toujours poser
de` variables
double)
`yx
´ i = yi − zi (le`nombre
´
´
et maximiser (c, −c) · z pour (A, −A) yz ≤ b et yz ≥ 0.
On cherche donc: argmax(cx | Ax ≤ b, x ≥ 0)
Si les bi sont positifs, (0, . . . , 0) est notre sommet initial.
Sinon on cherche un sommet de P = {x | Ax ≤ b, x ≥ 0}
On fait cela en cherchant parmi les (x1 , . . . , xn , t) tq
ai,1 x1 + . . . + ai,n xn − t ≤ bi pour tout i,
un point qui minimise t.
11-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
On peut toujours poser
de` variables
double)
`yx
´ i = yi − zi (le`nombre
´
´
et maximiser (c, −c) · z pour (A, −A) yz ≤ b et yz ≥ 0.
On cherche donc: argmax(cx | Ax ≤ b, x ≥ 0)
Si les bi sont positifs, (0, . . . , 0) est notre sommet initial.
Sinon on cherche un sommet de P = {x | Ax ≤ b, x ≥ 0}
On fait cela en cherchant parmi les (x1 , . . . , xn , t) tq
ai,1 x1 + . . . + ai,n xn − t ≤ bi pour tout i,
un point qui minimise t.
On connait un sommet initial (0, . . . , 0, T ) pour ce problème linéaire.
11-8
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, initialisation
Pour démarrer l’algorithme il faut avoir un sommet de P .
On cherche: argmax(cx | Ax ≤ b)
On peut toujours poser
de` variables
double)
`yx
´ i = yi − zi (le`nombre
´
´
et maximiser (c, −c) · z pour (A, −A) yz ≤ b et yz ≥ 0.
On cherche donc: argmax(cx | Ax ≤ b, x ≥ 0)
Si les bi sont positifs, (0, . . . , 0) est notre sommet initial.
Sinon on cherche un sommet de P = {x | Ax ≤ b, x ≥ 0}
On fait cela en cherchant parmi les (x1 , . . . , xn , t) tq
ai,1 x1 + . . . + ai,n xn − t ≤ bi pour tout i,
un point qui minimise t.
On connait un sommet initial (0, . . . , 0, T ) pour ce problème linéaire.
Il existe (et on obtient) un sommet de P ssi t = 0 dans sa solution.
11-9
Gilles Schaeffer
INF-550-3: Programmation linéaire
Cours 3: Programmation linéaire
• Position du problème
• Algorithme du simplexe générique
• Dualité.
• Dégénérescence et terminaison de l’algorithme
12-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
13-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Primal
max(4x + 5x0 )
10x + 10x0 ≤ 50
10x + 20x0 ≤ 80
20x + 10x0 ≤ 80
x ≥ 0, x0 ≥ 0
13-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Primal
× max(4x + 5x0 )
y1 10x + 10x0 ≤ 50
y2 10x + 20x0 ≤ 80
y3 20x + 10x0 ≤ 80
x ≥ 0, x0 ≥ 0
13-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Primal
× max(4x + 5x0 )
y1 10x + 10x0 ≤ 50
y2 10x + 20x0 ≤ 80
y3 20x + 10x0 ≤ 80
y1 ≥ 0, y2 ≥ 0, y3 ≥ 0.
x ≥ 0, x0 ≥ 0
⇒
13-4
Gilles Schaeffer
(10y1 + 10y2 + 20y3 )x + (10y1 + 20y2 + 10y3 )x0 ≤ 50y1 + 80y2 + 80y3
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Primal
× max(4x + 5x0 )
y1 10x + 10x0 ≤ 50
10y1 + 10y2 + 20y3 ≥ 4
y2 10x + 20x0 ≤ 80
10y1 + 20y2 + 10y3 ≥ 5
y3 20x + 10x0 ≤ 80
y1 ≥ 0, y2 ≥ 0, y3 ≥ 0.
x ≥ 0, x0 ≥ 0
⇒ 4x + 5x0 ≤ (10y1 + 10y2 + 20y3 )x + (10y1 + 20y2 + 10y3 )x0 ≤ 50y1 + 80y2 + 80y3
13-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Primal
× max(4x + 5x0 )
min(50y1 + 80y2 + 80y3 )
y1 10x + 10x0 ≤ 50
10y1 + 10y2 + 20y3 ≥ 4
y2 10x + 20x0 ≤ 80
10y1 + 20y2 + 10y3 ≥ 5
y3 20x + 10x0 ≤ 80
y1 ≥ 0, y2 ≥ 0, y3 ≥ 0.
x ≥ 0, x0 ≥ 0
⇒ 4x + 5x0 ≤ (10y1 + 10y2 + 20y3 )x + (10y1 + 20y2 + 10y3 )x0 ≤ 50y1 + 80y2 + 80y3
13-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Primal
Dual
× max(4x + 5x0 )
min(50y1 + 80y2 + 80y3 )
y1 10x + 10x0 ≤ 50
10y1 + 10y2 + 20y3 ≥ 4
y2 10x + 20x0 ≤ 80
10y1 + 20y2 + 10y3 ≥ 5
y3 20x + 10x0 ≤ 80
y1 ≥ 0, y2 ≥ 0, y3 ≥ 0.
x ≥ 0, x0 ≥ 0
⇒ 4x + 5x0 ≤ (10y1 + 10y2 + 20y3 )x + (10y1 + 20y2 + 10y3 )x0 ≤ 50y1 + 80y2 + 80y3
13-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Le théorème dit
Primal
Dual
× max(4x + 5x0 )
qu’on peut obtenir
min(50y1 + 80y2 + 80y3 )
y1 10x + 10x0 ≤ 50 une borne optimale 10y1 + 10y2 + 20y3 ≥ 4
y2 10x + 20x0 ≤ 80 par multiplicateur. 10y1 + 20y2 + 10y3 ≥ 5
y3 20x + 10x0 ≤ 80
y1 ≥ 0, y2 ≥ 0, y3 ≥ 0.
x ≥ 0, x0 ≥ 0
⇒ 4x + 5x0 ≤ (10y1 + 10y2 + 20y3 )x + (10y1 + 20y2 + 10y3 )x0 ≤ 50y1 + 80y2 + 80y3
13-8
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Théorème (cas inégalités+positivité). Si l’un des 2 problèmes suivant
(P)
max(cx | Ax ≤ b, x ≥ 0)
(D)
min(yb | yA ≥ c, y ≥ 0)
admet une solution finie, alors l’autre aussi et on a
min(yb | yA ≥ c, y ≥ 0) = max(cx | Ax ≤ b, x ≥ 0)
Interprétation. Retour au fleuriste.
Le théorème dit
Primal
Dual
× max(4x + 5x0 )
qu’on peut obtenir
min(50y1 + 80y2 + 80y3 )
y1 10x + 10x0 ≤ 50 une borne optimale 10y1 + 10y2 + 20y3 ≥ 4
y2 10x + 20x0 ≤ 80 par multiplicateur. 10y1 + 20y2 + 10y3 ≥ 5
Si on augmente la
0
y3 20x + 10x ≤ 80 denrée i de ∆i , le gain y1 ≥ 0, y2 ≥ 0, y3 ≥ 0.
x ≥ 0, x0 ≥ 0
augmente de ∆i yi .
⇒ 4x + 5x0 ≤ (10y1 + 10y2 + 20y3 )x + (10y1 + 20y2 + 10y3 )x0 ≤ 50y1 + 80y2 + 80y3
13-9
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Primal / Dual, cas général. Le théorème s’applique aux paires:
Primal
Dual
max(c1 x1 + . . . + cn xn )
min(b1 y1 + . . . + bm ym )
ai1 x1 + . . . ain xn ≤ bi pour i ∈ I a1j y1 + . . . amj ym ≥ cj pour j ∈ P
ai1 x1 + . . . ain xn = bi pour i ∈ E a1j y1 + . . . amj ym = cj pour j ∈ N
xj ≥ 0 pour j ∈ P .
yi ≥ 0 pour i ∈ I.
où m = |I| + |E| et n = |P | + |N |
14-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Primal / Dual, cas général. Le théorème s’applique aux paires:
Primal
Dual
max(c1 x1 + . . . + cn xn )
min(b1 y1 + . . . + bm ym )
ai1 x1 + . . . ain xn ≤ bi pour i ∈ I a1j y1 + . . . amj ym ≥ cj pour j ∈ P
ai1 x1 + . . . ain xn = bi pour i ∈ E a1j y1 + . . . amj ym = cj pour j ∈ N
xj ≥ 0 pour j ∈ P .
yi ≥ 0 pour i ∈ I.
où m = |I| + |E| et n = |P | + |N |
Les inégalité donnent dans le dual des variables contraintes à être positives,
les égalités des variables quelconques (penser à l’interprétation des variables
duales comme multiplicateurs).
14-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Primal/dual et théorème de dualité
Primal / Dual, cas général. Le théorème s’applique aux paires:
Primal
Dual
max(c1 x1 + . . . + cn xn )
min(b1 y1 + . . . + bm ym )
ai1 x1 + . . . ain xn ≤ bi pour i ∈ I a1j y1 + . . . amj ym ≥ cj pour j ∈ P
ai1 x1 + . . . ain xn = bi pour i ∈ E a1j y1 + . . . amj ym = cj pour j ∈ N
xj ≥ 0 pour j ∈ P .
yi ≥ 0 pour i ∈ I.
où m = |I| + |E| et n = |P | + |N |
Les inégalité donnent dans le dual des variables contraintes à être positives,
les égalités des variables quelconques (penser à l’interprétation des variables
duales comme multiplicateurs).
En TD: le théorème de dualité ⇒ maxflow = mincut
14-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Cours 3: Programmation linéaire
• Position du problème
• Algorithme du simplexe générique
• Dualité.
• Dégénérescence et terminaison de l’algorithme
15-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Dégénérescence et risque de bouclage
Dégénérescence: un sommet appartient à plus de n hyperplans.
Il n’est pas forcément acceptable de perturber.
16-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Dégénérescence et risque de bouclage
Dégénérescence: un sommet appartient à plus de n hyperplans.
Il n’est pas forcément acceptable de perturber.
Parmi les voisins de x{2,3} il y a
x{1,3} , x{1,4} , x{1,2} , x{2,4} .
16-2
Gilles Schaeffer
INF-550-3: Programmation linéaire
Dégénérescence et risque de bouclage
Dégénérescence: un sommet appartient à plus de n hyperplans.
Il n’est pas forcément acceptable de perturber.
1
Parmi les voisins de x{2,3} il y a
2
x{1,3} , x{1,4} , x{1,2} , x{2,4} .
Ce sont même ses plus proches voisins...
3
4
16-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Dégénérescence et risque de bouclage
Dégénérescence: un sommet appartient à plus de n hyperplans.
Il n’est pas forcément acceptable de perturber.
1
Parmi les voisins de x{2,3} il y a
2
x{1,3} , x{1,4} , x{1,2} , x{2,4} .
Ce sont même ses plus proches voisins...
3
4
En dimension supérieure il peut être nécessaire
de changer plusieurs lignes pour trouver un vrai voisin dans P .
Il peut y avoir un nombre exponentiel de faux voisins.
16-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Dégénérescence et risque de bouclage
Dégénérescence: un sommet appartient à plus de n hyperplans.
Il n’est pas forcément acceptable de perturber.
1
Parmi les voisins de x{2,3} il y a
2
x{1,3} , x{1,4} , x{1,2} , x{2,4} .
Ce sont même ses plus proches voisins...
3
4
En dimension supérieure il peut être nécessaire
de changer plusieurs lignes pour trouver un vrai voisin dans P .
Il peut y avoir un nombre exponentiel de faux voisins.
Notre algorithme du simplexe prend un voisin le plus proche: il faut bien le
choisir pour ne pas risquer de boucler indéfiniment en changeant I sans
changer xI : x{2,3} → x{1,3} → x{1,2} → x{2,3} .
16-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, version finale
Soit xI le sommet courant, solutions des n équations (Lk x = bk )k∈I
P
• Exprimer c dans la base {Lk }k∈I : c = k∈I yk Lk .
Si yk ≥ 0 pour tout k ∈ I, on a trouvé l’optimum.
• Sinon on choisit le plus petit i ∈ I tq yi < 0 et on considère
l’arête définie par les équations de I 0 = I \ {i}. Soit u son
vecteur directeur tq Li u = −1 (c’est une colonne de (AI )−1 ).
• Calculer la vitesse vers Lj quand on suit u: vj = Lj · u.
si vj ≤ 0 on s’éloigne de l’hyperplan Lj : si ∀j, max = ∞.
• Parmi les voisins sur l’arête, prendre celui qui est dans P ,
c’est celui qui est le plus proche parmi ceux du bon côté:
b −L x
le plus petit parmi les j tels que vj > 0 qui minimisent j vjj I .
faire I = I \ {i} ∪ {j}, recalculer xI et reprendre.
17-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, preuve de terminaison
Si l’algo boucle c’est qu’on est revenu au même I, sans changer c · xI
(c · xI croı̂t). On observe l’évolution des indices présents dans I.
18-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, preuve de terminaison
Si l’algo boucle c’est qu’on est revenu au même I, sans changer c · xI
(c · xI croı̂t). On observe l’évolution des indices présents dans I.
I
18-2
Gilles Schaeffer
I
INF-550-3: Programmation linéaire
Algorithme du simplexe, preuve de terminaison
Si l’algo boucle c’est qu’on est revenu au même I, sans changer c · xI
(c · xI croı̂t). On observe l’évolution des indices présents dans I.
inchangé
r
I
I0
I 00
I
Soit r le plus grand indice qui sort ou entre durant la boucle, et soient
I 0 et I 00 les ensembles d’indices à des temps de sortie et d’entrée de r.
18-3
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, preuve de terminaison
Si l’algo boucle c’est qu’on est revenu au même I, sans changer c · xI
(c · xI croı̂t). On observe l’évolution des indices présents dans I.
inchangé
r
I
I0
I 00
I
Soit r le plus grand indice qui sort ou entre durant la boucle, et soient
I 0 et I 00 les ensembles d’indices à des temps de sortie et d’entrée de r.
P
0
Comme r sort de I : c = i∈I 0 yi Li , avec yi ≥ 0 pour i < r, et yr < 0.
18-4
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, preuve de terminaison
Si l’algo boucle c’est qu’on est revenu au même I, sans changer c · xI
(c · xI croı̂t). On observe l’évolution des indices présents dans I.
inchangé
r
I
I0
I 00
I
Soit r le plus grand indice qui sort ou entre durant la boucle, et soient
I 0 et I 00 les ensembles d’indices à des temps de sortie et d’entrée de r.
P
0
Comme r sort de I : c = i∈I 0 yi Li , avec yi ≥ 0 pour i < r, et yr < 0.
Soit u la direction de l’arête sélectionnée lors du traitement de I 00 :
alors Li u = 0 pour i ∈ I 00 \ {r} et, comme r entre dans I 00 , on a Lj u ≤ 0
pour tout j < r avec bj − Lj u = 0. C’est le cas pour tout j ∈ I 0 \ I 00 .
18-5
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, preuve de terminaison
Si l’algo boucle c’est qu’on est revenu au même I, sans changer c · xI
(c · xI croı̂t). On observe l’évolution des indices présents dans I.
inchangé
r
I
I0
I 00
I
Soit r le plus grand indice qui sort ou entre durant la boucle, et soient
I 0 et I 00 les ensembles d’indices à des temps de sortie et d’entrée de r.
P
0
Comme r sort de I : c = i∈I 0 yi Li , avec yi ≥ 0 pour i < r, et yr < 0.
Soit u la direction de l’arête sélectionnée lors du traitement de I 00 :
alors Li u = 0 pour i ∈ I 00 \ {r} et, comme r entre dans I 00 , on a Lj u ≤ 0
pour tout j < r avec bj − Lj u = 0. C’est le cas pour tout j ∈ I 0 \ I 00 .
P
P
D’où cu = i∈I 0 yi Li u = i<r, i∈I 0 yi Li u + yr Lr u < 0.
18-6
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, preuve de terminaison
Si l’algo boucle c’est qu’on est revenu au même I, sans changer c · xI
(c · xI croı̂t). On observe l’évolution des indices présents dans I.
inchangé
r
I
I0
I 00
I
Soit r le plus grand indice qui sort ou entre durant la boucle, et soient
I 0 et I 00 les ensembles d’indices à des temps de sortie et d’entrée de r.
P
0
Comme r sort de I : c = i∈I 0 yi Li , avec yi ≥ 0 pour i < r, et yr < 0.
Soit u la direction de l’arête sélectionnée lors du traitement de I 00 :
alors Li u = 0 pour i ∈ I 00 \ {r} et, comme r entre dans I 00 , on a Lj u ≤ 0
pour tout j < r avec bj − Lj u = 0. C’est le cas pour tout j ∈ I 0 \ I 00 .
P
P
D’où cu = i∈I 0 yi Li u = i<r, i∈I 0 yi Li u + yr Lr u < 0.
Ceci contredit le choix de u pour améliorer l’objectif: (cu > 0).
18-7
Gilles Schaeffer
INF-550-3: Programmation linéaire
Algorithme du simplexe, complexité
Puisque le nombre de voisins d’un sommet est n(m − 1) au plus,
chaque étape a un coût polynomial.
`m´
Le nombre de sommets peut être exponentiel (jusqu’à n ) en m et n,
et il existe des exemples pour lesquels le simplexe visite effectivement
un nombre exponentiel de sommets... (Worst case analysis).
On constate que cela ne se produit quasiment jamais en pratique...
On peut montrer qu’en moyenne sur des problèmes aléatoires
l’algorithme est polynomial (Average case analysis).
Mieux on peut montrer que si on perturbe aléatoirement des données
arbitraires, l’algorithme reste polynomial (Smooth analysis).
19-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Programmation linéaire, algorithmes polynomiaux.
Le simplexe n’est pas polynomial mais presque...
De fait il existe des algorithmes polynomiaux pour la programmation
linéaire: notamment les méthodes de l’ellipsoide et du point intérieur.
Attention toutefois: il y a des algorithmes polynomiaux si on cherche
les optimaux à coordonnées dans R.
On verra que, contrairement à ce qui se passe pour les problèmes de
flots, le problème devient dur si on veut des solutions entières.
20-1
Gilles Schaeffer
INF-550-3: Programmation linéaire
Cours 3: Programmation linéaire
• Position du problème
• Algorithme du simplexe générique
• Dualité.
• Dégénérescence et terminaison de l’algorithme
Retenir: - Il existe d’excellentes boites noires pour résoudre les LP.
- Modélisation par LP (en PC). Thm Primal-Dual.
21-1
Gilles Schaeffer
INF-550-3: Programmation linéaire