Skip to main content

PL - Cours 2

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émentaies sis_i sont appelées variables d'écart. Chaque variable d'écart est associée à une contrainte.

forme standardmaxz=i=1nciximaxz=i=1ncixii=1naijxibji=1naijxi+sj=bjxi0xi0sj0\begin{align*} && \text{forme standard} \\ \max z = \sum \limits_{i=1}^n c_i x_i && \max z = \sum \limits_{i=1}^n c_i x_i \\ \sum \limits_{i=1}^n a_{ij} x_i \leq b_j && \sum \limits_{i=1}^n a_{ij} x_i + s_j = b_j \\ x_i \geq 0 && x_i \geq 0 \\ && s_j \geq 0 \end{align*}

On dispose d'un problème linéaire à n+mn+m variables et mm contraintes. Si on annule nn variables, on obtient un système de mm équations à mm inconnues. Si la matrice associée est de rang mm (base), le système admet une solution unique. Pour résoudre le problème obtenu : pivot de Gauss.

Si on a une base réalisable, on a un point extrême c'est à dire une solution dominante. 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 simplex

Base initiale

Calculons une solution initiale simple

![plexemple]

maxz=5x+yx+y+s1=10xy+s2=1x+s3=3\begin{align*} \max z &= 5x+y \\ x+y+s_1 &=10 \\ x-y+s_2 &=1 \\ x+s_3 &=3 \end{align*}

Choix de la base initiale : annuler les variables de décisions, ne garder que les variables d'écart

Systeˋme obtenuSolution+s1=10s1=10,s2=1,s3=3+s2=1x=0,y=0+s3=3z=0+0=0\begin{align*} \text{Système obtenu} && \text{Solution} \\ +s_1 = 10 && s_1 = 10 , s_2 = 1, s_3 = 3 \\ +s_2 =1 && x=0 , y=0 \\ +s_3 =3 && z=0 + 0 = 0 \end{align*}

Exemple pas à pas

Réécrivons notre problème en fonction de notre base (s1,s2,s3)(s_1,s_2,s_3)

z=0+5x+ys1=10xys2=1x+ys3=3x\begin{align*} z &= 0 +5x + y \\ s_1 &= 10 -x -y \\ s_2 &=1 -x +y \\ s_3 &=3-x \end{align*}

On parle de forme canonique, zz 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 xx ou yy (on choisit xx) mais jusqu'où augmenter xx ? On sait que s1,s2,s30s_1, s_2, s_3 \geq 0. En posant x=1x=1, on annule s2s_2 qui sort de la base.

s1=10xx10s2=1xx1s3=3xx3\begin{align*} s_1 &= 10-x \Rightarrow x \leq 10 \\ s_2 &= 1-x \Rightarrow x \leq 1 \\ s_3 &= 3-x \Rightarrow x \leq 3 \end{align*}

On remplace s2s_2 par xx dans la base

z5x=0+y+s1+x=10yx=1s2+y+x+s3=3\begin{align*} z - 5x &= 0+y \\ +s_1 + x &= 10 -y \\ x &=1-s_2+y \\ +x+s_3 &=3 \end{align*}

Puis on remet le PL sous forme cannonique

z=55s2+6ys1=9+s22yx=1s2+ys3=2+s2y\begin{align*} z &= 5 - 5 s_2 + 6 y \\ s_1 &= 9 + s_2 - 2y \\ x &= 1-s_2+y \\ s_3 &=2+s_2-y \end{align*}

Peut on améliorer la solution ? Oui car yy a un coefficient positif. Jusqu'où augmenter yy ? On sait que s1,x,s30s_1, x, s_3 \geq 0. En posant y=2y=2, on annule s3s_3 qui sort de la base

s1=92yy9/2x=1+yy1s3=2yy2\begin{align*} s_1 &= 9 - 2y \Rightarrow y \leq 9/2 \\ x &= 1+y \Rightarrow y \geq -1 \\ s_3 = 2-y \Rightarrow y \leq 2 \end{align*}

On remplace s3s_3 par yy en base et on réecrit le PL sous forme cannonique

z=17+s26s3s1=5s2+2s3x=3s3y=2+s2s3\begin{align*} z&=17+s_2 - 6 s_3 \\ s_1 &=5-s_2+2s_3 \\ x&=3-s_3 \\ y &=2+s_2-s_3 \end{align*}

Peut on améliorer la solution ? Oui car s2s_2 a un coefficient positif. Jusqu'où augmenter s2s_2 ? On sait que s1,x,t0s_1,x,t \geq 0. En posant s2=5s_2 = 5 on annule s1s_1 qui sort de la base.

s1=5s2s25x=3s2+y=2+s2s2+\begin{align*} s_1 &= 5-s_2 \Rightarrow s_2 \leq 5 \\ x&=3 \Rightarrow s_2 \leq + \infty \\ y &=2+s_2 \Rightarrow s_2 \leq + \infty \end{align*}

On remplace s1s_1 par s2s_2 en base et on écrit le PL sous forme canonique.

z=22s14s3s2=5s1+2s3x=3s3y=7s1+s3\begin{align*} z&=22-s_1-4s_3 \\ s_2&=5-s_1+2s_3 \\ x&=3-s_3 \\ y&=7-s_1+s_3 \end{align*}

Peut-on améliorer la solution ? Non car tous les coefficients sont négatifs dans l'objectif. La solution obtenue est donc x=3,y=7,(s2=5),s1=0,s3=0x=3 , y=7 , (s_2=5) , s_1=0, s_3=0 et donc z=22z=22.

Description formelle de la méthode

Problème linéaire avec les variables d'écart et la variable objectif

z=j=1ncjxjxn+i=bij=1naijxj\begin{align*} z&=\sum \limits_{j=1}^n c_j x_j \\ x_{n+i}&=b_i-\sum \limits_{j=1}^n a_{ij} x_j \end{align*}

Dictionnaires

A chaque itération, la solution courant est associée à un système d'équations qui la définit

z=z+jNcjxjxi=bijNaijxj\begin{align*} z &= \overline{z} + \sum \limits_{j \in \mathcal{N}} \overline{c}_j x_j \\ x_i &= \overline{b}_i - \sum \limits_{j \in \mathcal{N}} \overline{a}_{ij} x_j \end{align*}

Ce système s'appelle un dictionnaire. Les variables de gauche sont appelées variables de base et notées xBR+mx_\mathcal{B} \in \mathbb{R}_+^m. L'ensemble des variables en base est appelé base. B\mathcal{B} 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 xNR+nx_\mathcal{N} \in \mathbb{R}_+^n. N\mathcal{N} représente l'ensemble des indices des variables hors-base.

  • B\mathcal{B} et N\mathcal{N} forment une partition de l'ensemble des indices
  • Chaque dictionnaire définit une solution de base que l'on obtient en posant xN=0x_\mathcal{N}=0
  • Un dictionnaire est réalisable si la solution de base associée est telle que xB0x_\mathcal{B} \geq 0

Dictionnaire initial

  • La base initiale est formée des variables d'écart xn+1,...,xn+mx_{n+1},...,x_{n+m}, c'est à dire B={n+1,...,n+m}\mathcal{B}=\{n+1,...,n+m\}
  • Les variables hors-base sont les variables initiales du problème, N={1,...,n}\mathcal{N}=\{1,...,n\}
  • Attention la base initiale peut ne pas être réalisable. On verra plus tard ce qu'il faut faire dans ce cas.

Itération (pivotage)

  • A chaque itération de l'algorithme du simplex, une variable hors-base va entrer dans la base, tandis qu'une variable en base sortira de la base, 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 cj,jN\overline{c}_j,j\in \mathcal{N} 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 nul : cj0\overline{c}_j \leq 0.

On choisit une variable xkx_k de N\mathcal{N} dont le coût réduit ck\overline{c}_k est 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 xkx_k est choisie pour entrer en base. Le vecteur formé par les coefficients ai,k,iB\overline{a}_{i,k},i \in \mathcal{B} indique l'impat sur les variables en base de l'augmentation de la variable xkx_k.

  • Si ai,k0\overline{a}_{i,k} \leq 0, augmenter xkx_k entraine une augmentation de xix_i

  • Si ai,k0\overline{a}_{i,k} \geq 0, augmenter xkx_k entraine une diminution de xix_i, il faut tout de même faire attention à la positivité de xix_i

    xi=biai,kxk0xkbiai,kx_i = \overline{b}_i - \overline{a}_{i,k} x_k \geq 0 \Rightarrow x_k \leq \dfrac{\overline{b_i}}{\overline{a}_{i,k}}

La variable qui sort de la base est la première variable à s'annuler lorsque xkx_k (la variable entrante) augmente

Choisir  sB  tel que  s=argminiB{biai,k:ai,k>0}\begin{equation*} \text{Choisir} \; s \in \mathcal{B} \; \text{tel que} \; s = argmin_{i \in \mathcal{B}} \{\dfrac{\overline{b}_i}{\overline{a}_{i,k}}: \overline{a}_{i,k} > 0\} \end{equation*}

Il peut y avoir plusieurs variables candidates pour sortir de la base. Si c'est le cas, la base est suivante sera dégénérée.

Le problème peut être non borné, si ai,k0\overline{a}_{i,k} \leq 0 pour tout iBi \in \mathcal{B}, 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 xkx_k en base et on sort xsx_s
  • On élimine xkx_k de l'epression de zz
  • On élimine xkx_k de l'expression des xix_i (iB,ik)(i \in \mathcal{B}, i \neq k)

Il reste à reconstruire le système d'équation ci-dessus pour la nouvelle base. C'est le pivotage

z=z+jN\{k}ckxk+ckxkxi=bijN\{k}ai,jxjai,kxkxs=bsjN\{k}as,jxjas,kxk\begin{align*} z&=\overline{z}+\sum \limits_{j \in \mathcal{N}\backslash\{k\}} \overline{c}_k x_k + \overline{c}_k x_k\\ x_i&=\overline{b}_i-\sum \limits_{j \in \mathcal{N}\backslash\{k\}} \overline{a}_{i,j} x_j - \overline{a}_{i,k}x_k \\ x_s&=\overline{b}_s - \sum \limits_{j \in \mathcal{N}\backslash\{k\}} \overline{a}_{s,j}x_j - \overline{a}_{s,k}x_k \end{align*}

On entre la variable xkx_k en base et on sort xsx_s. On ramène le coefficient de xkx_k à 1. On élimine xkx_k de l'expression de zz. On élimine xkx_k de l'expression des xix_i.

Remarques

  • On remarque le type de la variable 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 ?

jaijxjbi  avec  bi<0\sum \limits_j a_{ij} x_j \leq b_i \; \text{avec} \; b_i < 0

Après l'ajout de la variable d'écart et écriture sous forme de dictionnaire, on obtient xn+i=bijaijxjx_{n+i} = b_i - \sum_j a_{ij} x_j. Comme bi<0b_i<0 la solution de base n'est pas réalisable.

Calculer une solution initiale

  1. Pour chaque contrainte ii tel que bi<0b_i<0 on ajoute une variable artificielle xn+ix'_{n+i} avec une coefficient de -1 en plus de la variable d'écart jaijxj+xn+ixn+i=bi\sum_j a_{ij} x_j + x_{n+i} - x'_{n+i} = b_i
  2. On crée un objectif artificiel maxi:bi<0xn+i\max \sum \limits_{i:b_i<0} - x'_{n+i}
  3. Une base initiale pour le problème artificiel est obtenue avec les variables artificielles des contraintes avec bi<0b_i<0 et les variables d'écarts des contraintes avec bi0b_i\geq 0
  4. On résout le problème avec l'algorithme du simplex à partir de cette solution

Résultat de la phase 1

A la fin de cette résolution

  • S'il existe au moins un ii tel que xn+i>0x'_{n+i} > 0, alors les variables artificielles sont nécessaire pour avoir une solution réalisable. Alors, le problème initial est irréalisable
  • Si xn+1=0x'_{n+1}=0 pour tout ii tel que bi<0b_i<0, toutes les variables artificielles sont hors-base. On a une solution de base réalisable pour le problème initial donnée par la base optimale de la Phase I
  1. Supprimer les variables artificielles
  2. Reprendre l'objectif initial
  3. Utiliser l'algorithme du simplex avec la solution initiale trouvée

Dégénérescense

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

Solution optimales multiples

Il peut arriver que dans le dictionnaire optimal, des variables hors-bases possèdent des coûts réduits nuls ci=0,  pour  iN\overline{c}_i = 0, \; \text{pour} \; i \in \mathcal{N} En effectuant une itération supplémentaire du simplex et en faisant entre en base une variable xix_i telle que ci=0\overline{c}_i=0, on obtient une nouvelle solution optimale de base (avec le même objectif). Si x1x_1^\ast et x2x_2^\ast sont deux solutions optimales, alors toutes solutions obtenues par une combinaison convexe de x1x_1^\ast et x2x_2^\ast est également une solution optimale x=αx1+(1α)x2x=\alpha x_1^\ast + (1-\alpha)x_2^\ast

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 de plus petit indice
  • perturbation des données : ajouter aux membres de droite des contraintes des ε\varepsilon suffisamment petits.