Optimisation linéaire 2016 - 2017
structure de données, c’est-à-dire la matrice de taille (m+ 1) ×(m+n+ 2). Cela ne modifie
en rien l’algorithme mais simplifie sa programmation.
Pour donner un exemple, si l’on résout le problème linéaire correspondant à l’exemple de
la fabrication de yaourts donné en cours (en notant les variables xAet xNpar x1et x2, et
les variables e1,e2et e3par x3,x4et x5), la forme standard de ce problème est le deuxième
exemple donné dans ce sujet.
Première itération La variable entrante est x1(première variable dont le coefficient dans
la fonction objectif est strictement positif). La variable sortante est x3. Le changement de
variable (appelé pivot) modifie la structure de données pour donner :
0 0 30 -20 0 0 -16000
0 1 1
2
1
20 0 400
0 0 3
2-1
21 0 300
0 0 1 0 0 1 300
La dernière valeur de la première ligne de la matrice correspond à l’opposé de la valeur de
la fonction objectif pour la solution (400,0,0,300,300).
Deuxième itération La variable entrante est x2, et la variable sortante est x4. Le pivot
donne la matrice suivante :
0 0 0 -10 -20 0 -22000
010 2
3-1
30 300
0 0 1 -1
3
2
30 200
000 1
3-2
31 100
Troisième itération Aucune variable n’a de coefficient strictement positif dans la fonction
objectif, la solution courante est optimale.
Remarque : Il n’est pas nécessaire de connaître quelles sont les variables en base pour faire
tourner l’algorithme. Cela sert uniquement pour l’affichage de la solution optimale à la fin.
(On peut cependant les déterminer puisque les variables de base forment la matrice identité
(à permutation près)).
Question 4 : Déterminer l’algorithme permettant de trouver l’indice de la variable entrante.
Implémenter la fonction (ou méthode) varEntrante retournant l’indice de la variable entrante
(-1 s’il n’y a pas de variable entrante).
Question 5 : Déterminer l’algorithme permettant de trouver, à partir de l’indice de la
variable entrante, l’indice de la contrainte limitant la valeur maximum que peut prendre la
variable entrante. Implémenter la fonction (ou méthode) varSortante retournant l’indice de
la ligne correspondant à la contrainte limitante (-1 s’il n’y a pas de variable sortante).
Question 6 : Déterminer l’algorithme correspondant au pivot (mise-à-jour de la matrice) en
fonction des indices des variables entrante et sortante. Implémenter la fonction (ou méthode)
pivot associée.
Question 7 : Définir la fonction (ou méthode) solve permettant de résoudre le problème
linéaire. Elle renverra true si le problème est optimal, et false s’il est non borné.
Mathieu LACROIX 3 IUT Villetaneuse