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