Algorithme du simplexe
On dispose d'un formalisme pour modéliser des problèmes réels : la programmation linéaire. On a appris à résoudre le problème à la main en deux dimensions. Intuition pour résoudre en dimension supérieure : se déplacer de sommet en sommet du polyèdre convexe formé par les contraintes linéaires.
Résumé : forme standard, points extrêmes et bases
Les variables supplémentaires sont appelées variables d'écart. Chaque variable d'écart est associée à une contrainte.
On dispose d'un problème linéaire à variables et contraintes. Si on annule variables, on obtient un système de équations à inconnues. Si la matrice associée est de rang (base), le système admet une solution unique. Pour résoudre le problème obtenu : pivot de Gauss.
Une solution de base réalisable correspond à un point extrême du polyèdre des contraintes. Pour calculer les valeurs des variables pour ces points on utilise le pivotage. Il reste à voir comment trouver une première base réalisable et comment passer d'une base réalisable à une autre.
Algorithme du simplexe
Base initiale
Calculons une solution initiale simple :
Choix de la base initiale : annuler les variables de décision et ne garder que les variables d'écart :
Exemple pas à pas
Réécrivons notre problème en fonction de notre base :
On parle de forme canonique : et les éléments de la base sont chacun exprimés en fonction d'une constante et des variables hors de la base. En affectant la valeur 0 aux variables hors base, le système se résout directement.
Comment améliorer la solution ? En augmentant ou (on choisit ), mais jusqu'où augmenter ? On sait que ( restant nul). En posant , on annule , qui sort de la base.
On remplace par dans la base :
Puis on remet le PL sous forme canonique :
Peut-on améliorer la solution ? Oui, car a un coefficient positif. Jusqu'où augmenter ? On sait que . En posant , on annule , qui sort de la base :
On remplace par en base et on réécrit le PL sous forme canonique :
Peut-on améliorer la solution ? Oui, car a un coefficient positif. Jusqu'où augmenter ? On sait que . En posant , on annule , qui sort de la base.
On remplace par en base et on écrit le PL sous forme canonique :
Peut-on améliorer la solution ? Non, car tous les coefficients sont négatifs dans l'objectif. La solution obtenue est donc et donc .
Description formelle de la méthode
Problème linéaire avec les variables d'écart et la variable objectif :
Dictionnaires
À chaque itération, la solution courante est associée à un système d'équations qui la définit :
Ce système s'appelle un dictionnaire. Les variables de gauche sont appelées variables de base et notées . L'ensemble des variables en base est appelé base. représente les indices des variables en base. Les variables qui ne sont pas dans la base sont appelées variables hors base et notées . représente l'ensemble des indices des variables hors-base.
- et forment une partition de l'ensemble des indices
- Chaque dictionnaire définit une solution de base que l'on obtient en posant
- Un dictionnaire est réalisable si la solution de base associée est telle que
Dictionnaire initial
- La base initiale est formée des variables d'écart , c'est-à-dire
- Les variables hors-base sont les variables initiales du problème,
- Attention : la base initiale peut ne pas être réalisable. On verra plus tard ce qu'il faut faire dans ce cas.
Itération (pivotage)
- À chaque itération de l'algorithme du simplexe, une variable hors-base va entrer dans la base, tandis qu'une variable en base sortira de la base, c'est le pivotage
- Cette opération revient à se déplacer d'un point extrême à un point extrême voisin le long d'une arête du polyèdre
Choix de la variable entrante
Les coefficients sont appelés les coûts réduits. Ils représentent l'impact de l'augmentation d'une variable sur l'objectif. La solution de base est optimale si et seulement si tous les coûts réduits sont négatifs ou nuls : (la condition est suffisante ; elle est aussi nécessaire en l'absence de dégénérescence).
On choisit une variable de dont le coût réduit est strictement positif. Il peut y avoir plusieurs variables candidates pour entrer en base. La règle de pivotage permet de choisir laquelle va entrer en base.
Choix de la variable sortante
Supposons que la variable est choisie pour entrer en base. Le vecteur formé par les coefficients indique l'impact sur les variables en base de l'augmentation de la variable .
-
Si , augmenter ne fait pas diminuer (augmentation ou stagnation) ;
-
si , augmenter entraîne une diminution de : il faut faire attention à la positivité de :
La variable qui sort de la base est la première variable à s'annuler lorsque (la variable entrante) augmente :
Il peut y avoir plusieurs variables candidates pour sortir de la base. Si c'est le cas, la base suivante sera dégénérée.
Le problème peut être non borné : si pour tout , il n'y a pas de candidat pour sortir de la base et le problème est non borné.
Pivotage
Mise à jour du système :
- on entre la variable en base et on sort ;
- on élimine de l'expression de ;
- on élimine de l'expression des .
Il reste à reconstruire le système d'équations ci-dessous pour la nouvelle base : c'est le pivotage.
On entre la variable en base et on sort . On divise l'équation de par pour ramener le coefficient de à 1. On élimine de l'expression de . On élimine de l'expression des .
Remarques
- On remarque que le type de la variable (décision ou écart) n'est pas pris en compte lors du pivotage
- Tenter de faire sortir les variables d'écart pour faire entrer les variables initiales n'est pas une bonne stratégie
- Seuls les coûts réduits doivent être pris en compte
- On s'arrête lorsque tous les coûts réduits sont négatifs ou nuls
Phase 1
Cette phase permet de trouver une solution de base réalisable initiale lorsque la base donnée par les variables d'écart n'est pas réalisable.
D'où vient le problème ?
Après l'ajout de la variable d'écart et écriture sous forme de dictionnaire, on obtient . Comme la solution de base n'est pas réalisable.
Calculer une solution initiale
- Pour chaque contrainte telle que , on ajoute une variable artificielle avec un coefficient de -1 en plus de la variable d'écart
- On crée un objectif artificiel
- Une base initiale pour le problème artificiel est obtenue avec les variables artificielles des contraintes avec et les variables d'écarts des contraintes avec
- On résout le problème avec l'algorithme du simplexe à partir de cette solution
Résultat de la phase 1
À la fin de cette résolution :
- s'il existe au moins un tel que , alors les variables artificielles sont nécessaires pour avoir une solution réalisable : le problème initial est irréalisable ;
- si pour tout tel que , les variables artificielles sont nulles (si certaines restent en base à la valeur 0, on les fait sortir par pivotage). On a une solution de base réalisable pour le problème initial donnée par la base optimale de la Phase I
- Supprimer les variables artificielles
- Reprendre l'objectif initial
- Utiliser l'algorithme du simplexe avec la solution initiale trouvée
Dégénérescence
Quand plusieurs variables sont candidates pour sortir de la base, la nouvelle solution de base aura une (ou plusieurs) variables de base prenant la valeur 0. On dit alors que la solution de base est dégénérée
Solutions optimales multiples
Il peut arriver que, dans le dictionnaire optimal, des variables hors base possèdent des coûts réduits nuls : . En effectuant une itération supplémentaire du simplexe et en faisant entrer en base une variable telle que , on obtient une nouvelle solution optimale de base (avec le même objectif). Si et sont deux solutions optimales, alors toute solution obtenue par une combinaison convexe de et , avec , est également une solution optimale.
Terminaison
En cas de dégénérescence, l'algorithme peut revenir sur une solution de base déjà visitée (cycle). En pratique néanmoins, cela se passe rarement. Il existe des règles de pivotage limitant les risques de cycle.
- règle du plus petit indice (règle de Bland), qui garantit la terminaison ;
- perturbation des données : ajouter aux membres de droite des contraintes des suffisamment petits.