Vous êtes sur la page 1sur 7

Département E.E.

A – Filière Automatique
4ème année Automatique – Semestre 2
TRAVAUX PRATIQUE – Optimisation et Recherche Opérationnel

TP 6
Méthode de Simplexe
Réalisé par

Leulmi Mohammed Islam


E-mail : islamfcb.enpc@gmail.com

Encadré par

Pr. Samir Ladaci

Année universitaire 2018/2019


1. Analyse du problème :
On s’intéresse à la résolution des problèmes de programmation
linéaire par la méthode du simplexe. Dans la suite, nous
présentons une version facilement implémentable de
l’algorithme du simplexe sous forme de tableau.
La forme standard de PL est la suivante :
𝑥1
𝑥
max [𝑐1 𝑐2 ⋯ 𝑐𝑛 ] ∗ [ 2 ]

𝑥𝑛
𝑥1 𝑏1
𝑎11 … 𝑎1𝑛
𝑥
Contraintes [ ⋮ ⋱ ⋮ ] ∗ [ 2 ] = [ 𝑏2 ]
⋮ ⋮
𝑎𝑚1 … 𝑎𝑚𝑛
𝑥𝑛 𝑏𝑛

Etape 1 : Construction du dictionnaire initial D.

𝐴 𝐼𝑛 𝑏
𝐷=[ ]
𝑐 0… 0
Etape 2 : Repérer la colonne pivot.
C’est celle avec coefficient positif sur la dernière ligne. S’il existe
plusieurs, on choisit celle avec l’indice le plus petit. S’il n’en
existe pas, l’optimum est atteint.

Etape 3 : Repérer la ligne pivot.


𝑠
C’est celle qui minimise 𝑖⁄𝑟𝑖 parmi toutes les lignes avec ri
positif (𝑟𝑖 , resp. 𝑠𝑖 sont les éléments de la i ème ligne se trouvant
sur la colonne pivot, resp. la dernière colonne.)

Etape 4 : Changement de base.

Diviser la ligne pivot par le coefficient pivot (𝑝𝑖𝑣𝑜𝑡 ← 1)


𝐿𝑝𝑖𝑣𝑜𝑡
𝐿𝑝𝑖𝑣𝑜𝑡 ←
𝑝𝑖𝑣𝑜𝑡
Annuler les autres coefficients de la colonne pivot :
𝐿𝑖 ← 𝐿𝑖 − 𝑟𝑖 ∗ 𝐿𝑝𝑖𝑣𝑜𝑡
Comme sa on obtient le nouveau dictionnaire D et on revient à
l’étape 2.

Travail demandé :
Etant donné un PL sous forme standard :

max ∑ 𝑐𝑗 𝑥𝑗
𝑗=1

𝐶𝑜𝑛𝑡𝑟𝑎𝑖𝑛𝑡𝑒𝑠: ∑ 𝑎𝑖𝑗 𝑥𝑗 ≤ 𝑏𝑖 𝑖 = 1,2, … , 𝑚


𝑗=1

𝑥𝑗 ≥ 0 𝑗 = 1,2, … , 𝑛

Résoudre par l’algorithme du Simplexe proposé ?

Data :
Entrées : 𝐴 (𝑎𝑖𝑗 ), 𝐵(𝑏𝑖 ), 𝐶(𝑐𝑗 )
Sorties : Z optimal, les dictionnaires intermédiaires sous la
forme d’un tableau T.
2. L’organigramme de l’algorithme :
3. Programme écrit :
clear all;close all;clc

% DATA______________________________________________
A=input('Entrez la matrice A\n');
b=input('Entrez le vecteur b colonne\n');
c=input('Entrez le vecteur c ligne\n');

%Programme__________________________________________

[n,m]=size(A); % Détermine la taille de A

% Conctruction du dictionnaire initial


D=[A eye(n) b;c zeros(1,n+m+1-length(c))];

% cette boucle test s'il y a coefficient positif dans la


dernière ligne du dictionnaire initial :
z=D(n+1,:);
for p=1:n+m
if z(p)>0
break
end
end

% boucle pricipale
while p~=n+m || z(n+m)>0 % test repetitif d'existense d'un
coefficient positif dans la dernière ligne du dictionnaire

l=D(:,n+m+1)./D(:,p); %calcul des si/ri

% cette boucle règle le problème si le minimum des si/ri


est negtif
for j=1:n
if l(j)<0 || l(j)==0
l(j)=1e100;
end
end

%cette boucle trouve l'indice de la ligne pivot :


for q=1:n
if l(q)==min(l(1:n))
break
end
end
%Diviser la ligne pivot par le coefficient pivot:
D(q,:)=D(q,:)/D(q,p);

% cette boucle annule les autres coefficients de la


colonne pivot:
for i=[1:q-1 q+1:n+1]
D(i,:)=D(i,:)-D(i,p)*D(q,:);
end

% cette boucle détecte s'il y a coefficient positif dans


la dernière ligne du nouveau dictionnaire et trouve son
indice
z=D(n+1,:);
for p=1:n+m
if z(p)>0
break
end
end

D % affichage du dictionnaire obtenu dans l'itération


end

%Affichage de Z optimal
disp('La valeur de Z optimal est')
[nd,md]=size(D);
disp(-1*D(nd,md))

4. Exemples d’exécution :
Exemple 1 ( Brochure TP ) :
Entrez la matrice A
[2 1;-1 2;2 -1]
Entrez le vecteur b colonne
[14;8;10]
Entrez le vecteur c ligne
[1 1]

D =

0 2.0000 1.0000 0 -1.0000 4.0000


0 1.5000 0 1.0000 0.5000 13.0000
1.0000 -0.5000 0 0 0.5000 5.0000
0 1.5000 0 0 -0.5000 -5.0000
D =

0 1.0000 0.5000 0 -0.5000 2.0000


0 0 -0.7500 1.0000 1.2500 10.0000
1.0000 0 0.2500 0 0.2500 6.0000
0 0 -0.7500 0 0.2500 -8.0000

D =

0 1.0000 0.2000 0.4000 0 6.0000


0 0 -0.6000 0.8000 1.0000 8.0000
1.0000 0 0.4000 -0.2000 0 4.0000
0 0 -0.6000 -0.2000 0 -10.0000

La valeur de Z optimal est


10

Exemple 2 ( Exercice TD ) :
Entrez la matrice A
[2 3 1;4 1 2;3 4 2]
Entrez le vecteur b colonne
[5;11;8]
Entrez le vecteur c ligne
[5 4 3]

D =

1 1.5000 0.5000 0.5000 0 0 2.5000


0 -5.0000 0 -2.0000 1.0000 0 1.0000
0 -0.5000 0.5000 -1.5000 0 1.0000 0.5000
0 -3.5000 0.5000 -2.5000 0 0 -12.5000

D =

1 2 0 2 0 -1 2
0 -5 0 -2 1 0 1
0 -1 1 -3 0 2 1
0 -3 0 -1 0 -1 -13

La valeur de Z optimal est


13

Vous aimerez peut-être aussi