0% ont trouvé ce document utile (0 vote)
83 vues3 pages

TPN 4: Méthode Du Simplexe Pour Les Problèmes de Première Espèce

Transféré par

luka alex
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
83 vues3 pages

TPN 4: Méthode Du Simplexe Pour Les Problèmes de Première Espèce

Transféré par

luka alex
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 3

3M239 : Optimisation linéaire et convexité 2018–2019

TP n◦ 4 : Méthode du simplexe pour les problèmes de première


espèce

Objectif : Dans cette séance on s’intéressera à l’application de la méthode du simplexe aux problèmes
de première espèce. On commencera par appliquer de manière extensive la transformation de Gauss-
Jordan, puis on utilisera le critère de Dantzig pour sélectionner les pivots. Enfin le phénomène de
cyclage est illustré.

1 Recherche extensive des solutions de base


Dans le TP précédent, il n’était pas encore question de la méthode du simplexe. On appliquait la
transformation de Gauss-Jordan à une matrice intégrant uniquement les contraintes. Lorsqu’on ajoute à
cette matrice une ligne associée à la fonction de coût, on obtient à chaque itération l’expression de celle-
ci en fonction des variables hors base. Il est dès lors possible d’identifier simplement le(s) sommet(s)
du convexe des contraintes correspondant au maximum.
Voici ici une implémentation possible de la fonction pivot

1 # la fonction pivot
2 def pivot(M,i,j):
3 # M est une np.array (2 dimensions )
4 # i indice de la ligne
5 # indice de la colonne
6 N = M.copy ()
7 l,c = np. shape(N)
8 for k in np. arange (l):
9 if k==i : # on est sur la ligne de i
10 N[k ,:] = M[k ,:]/M[k,j] # on normalise la ligne pour avoir 1 en (i,j
)
11 else:
12 # on soustrait aux lignes pour annuler au dessus et en dessous du
pivot
13 N[k ,:]=M[k ,:] - M[k,j]/M[i,j]*M[i ,:]
14 return N

Exercice 1 On s’intéresse au problème d’optimisation linéaire suivant :

Maximiser Z1 (x, y) = 2x + y,
 x + 2y 6 8
 x +

y 6 5


 (1)


 9x + 4y 6 36
x, y > 0.


1. Reformulation du problème
• Mettre ce problème sous forme standard AX = b en introduisant les variables d’écart
e1, e2, e3 .
• En déduire une solution de base. Est-elle réalisable ?
2. Construction avec python de la matrice intégrant contraintes et fonction objectif.
• Définir le vecteur v = (2, 1, 0, 0, 0) ∈ R5 .
• Construire la matrice M ∈ M4, 6 (R) définie par bloc de la manière suivante :
!
v 0
M=
A b
• La matrice M ainsi définie contient donc dans les lignes d’indices 2 6 i 6 4 la décomposition
des vecteurs (V1, V2,  1,  2,  3 ) dans la base canonique de R3 . Elle a pour première ligne les
prix marginaux associés aux variables hors-base. Remarque : Attention ! la convention change
donc par rapport au cours.

D’après un énoncé de Maxime Chupin Sorbonne Université


3M239 : Optimisation linéaire et convexité 2018–2019

3. Recherche d’optimum à tâtons.


• En utilisant la fonction pivot, définie dans le TP3, appliquer à la matrice M les transforma-
tions de Gauss-Jordan qui donnent la décomposition des vecteurs V1, V2,  1,  2,  3 dans les
bases successives :
{V2,  2,  3 }, {V2,  1,  3 }, {V2,  1,  2 }
{V1,  1,  2 }, {V1,  1,  3 }, {V1,  2,  3 }
{V1, V2,  3 }, {V1, V2,  2 }, {V1, V2,  1 } .
Il suffira d’identifier l’indice du pivot Mi j correspondant à cette transformation. Pour la déter-
mination de i, prendre garde au fait que l’on a ajouté une ligne.
• Après chaque transformation, donner une solution de base, préciser si elle est admissible ou
non, donner la valeur de Z associée.
• La manière de procéder vous semble-t-elle optimale ?

2 Utilisation du critère de Dantzig


Ainsi, lorsqu’on parcourt au hasard les solutions de base, on finit par tomber (sauf cas particulier)
sur l’optimum correspondant à un sommet du convexe des contraintes. Mais ce choix aléatoire du pivot
n’est pas satisfaisant. La méthode du simplexe repose sur deux critères de sélection, à savoir le choix
de la variable entrante et celle de la variable sortante. On note (D1) le premier critère, qui revient à
choisir la colonne du pivot à partir des prix marginaux des variables hors base. Le second critère est
noté (D2) , et permet de choisir la ligne du pivot.
On rappelle que le critère de Dantzig fournit deux tels critères :
(D1) on choisit la colonne i parmi celles associées à un prix marginal strictement positif ;
(D2) on choisit la colonne i parmi celles associées à une constante renormalisée positive minimale,
c’est-à-dire bi /ai, j positif et minimal.
Si plusieurs choix sont possibles, alors on considère le plus petit indice pour le choix de la ligne ;
pour le choix de la colonne, selon le critère de Bland on choisit à nouveau l’indice le plus petit, et
selon le critère naturel celui associé au prix marginal le plus élevé.

Exercice 2
On s’intéresse au problème d’optimisation linéaire suivant :

Maximiser Z(x, y, z) = 20x + 18y + 15z,


 2x + 2y + z 6 6000
+ +

x 2y 2z 6 7000


 (2)
+ +



 x y z 6 4000
x, y, z > 0.


1. Première itération
• Définir la matrice M suivant le même principe que dans l’exercice 1.
• À l’aide des critères (D1) et (D2) de Dantzig, déterminer les indices i et j du pivot préco-
nisés par la méthode du simplexe, correspondant respectivement à la ligne et à la colonne
du pivot.
• Appliquer la fonction pivot à la matrice M pour les indices i et j. En déduire une solution
de base. Correspond-elle au maximum de Z ? Pourquoi ?
2. Itérations suivantes
• Rappeler le critère d’arrêt permettant de terminer les itérations sur une solution optimale
du problème.
• Appliquer la fonction pivot jusqu’à ce que le critère d’arrêt soit satisfait.
• Donner la valeur du maximum. Pour quelle(s) valeur(s) des variables x, y, z est-il atteint ?
Combien d’itérations la procédure a-t-elle nécessité ?

D’après un énoncé de Maxime Chupin Sorbonne Université


3M239 : Optimisation linéaire et convexité 2018–2019

Exercice 3 Appliquer la méthode du simplexe au problème d’optimisation linéaire de première espèce


suivant :
Maximiser Z(x, y, z) = 8x + 5y + 7z,

 x + y 6 30
+



 x z 6 40

 2x + 3y +
 (3)
z 6 100
x + y −





 2z 6 60

 x, y, z > 0.

Exercice 4 Appliquer la méthode du simplexe au problème d’optimisation linéaire de première espèce


suivant :
Maximiser Z(x, y, z, t) = 20x + 27y + 5z + 6t,

 x + z + 1
2t 6 4
+ + 14



 2x y 5 z − 2t 6 5

 3x + 2y +
 (4)
z 6 6
+ + +

4x 3y 2z t 6 7






 x, y, z, t > 0.
On testera le critère naturel et le critère de Bland. Comparer le nombre d’itérations obtenus.

3 Cyclage

Exercice 5 On considère le problème d’optimisation linéaire suivant

Maximiser Z(x, y, z, t) = 10x − 52y − 9z − 24,


 x/2 − 11y/2 − 5z/2 +9t 6 0
+t 6 0

x/2 − 3y/2 − z/2



 (5)


 x 6 1
x, y, z, t > 0.


1. Effectuer avec python 7 itérations standards de l’algorithme du simplexe.
2. Poursuivre, en appliquant le critère naturel. Qu’observe-t-on ?
3. Reprendre la question précédente avec le critère de Bland. Conclure.

D’après un énoncé de Maxime Chupin Sorbonne Université

Vous aimerez peut-être aussi