Vous êtes sur la page 1sur 6

• Algorithme du Simplexe :

1. Procedure Remplir : Permet de remplir les tableau du simplexe.

Procédure remplir;
Début
Écrire (' entrez le nombre de variables : ‘);
lire(nvar);
ecrire('entrez le nombre de contraintes : ');
lire(neq);
n := neq + 1;
m := neq + nvar + 2;

Écrire ('entrez les coefficient de la fonction objectif MAX(z)');


i := n;
j := 1;
Tan que (j <= m) faire
Début
si (j <= nvar) alors
Début
Écrire ('pour X : ',j);
Lire (mat [i, j]);
Fin ;
j:=j+1;
Fin ;

j := 0;
Tan que (j <= m - 2) faire
Début
Si (j <= nvar) alors
Mat [0,j] := j
Sinon
Mat [0,j] := 0.0;
j:=j+1;
Fin ;
i := 0;
Tan que (i <= neq) do
Début
Mat [i, 0] := 0.0;

i:=i+1;
Fin ;
i := 1;
Tan que (i <= neq) faire
Début

Écrire ('entrez les cœfficients de la contrainte N°= ',i);


j := 1;
Tan que (j <= m) faire
Début
Si (j <= nvar) alors
Début
Écrire ('pour X : ', j);
Lire (mat [i,j]);
Fin
Sinon
Début
j := m - 1;
Si (j <> 0) alors
Début
Écrire ('entrez la valeur d’égalité : ');
Lire (mat [i, j]);
Fin ;
J := m;
Si (j <> 0) alors
Mat [i, j] := 0.0;
Fin ;
J:=j+1;
Fin ;

I:=i+1;
Fin ;
I := 1;
Tan que (i <= neq) faire
Début
J := nvar + i;
Mat [i, j] := 1.0;
I:=i+1;
Fin ;
Fin ;

2. Procedure chereche_pivot : permet de chercher l’emplacement du pivot.


Procédure chereche_pivot;
Début
I := n;
X := 1;
Max := mat [i, x];
J := 1;
Tan que (j <= m - 2) faire
Début
Si (max < mat [i, j]) alors
Début
Max := mat [i, j];
X := j;
finsi;
J:=j+1;
Fin;
J := m;
I := 1;
Tan que (i <= n) faire
Début
Si (mat [i, x] <> 0.0) alors
Mat [i, j] := mat [i, j - 1] / mat [i, x]
Sinon
Mat [i, j] := 0.0;
I:=i+1;
finsi;
J := m;
Y := 1;
Tan que (mat[y, j] <= 0.0) faire
Début
Y := y+1;

Fin;
Min := mat[y, j];
I := y;
Tan que (i < n) faire
Début
Si (min > mat [i, j]) et (mat [i, j] > 0.0) alors
Début
Min := mat [i, j];
Y := i;
finsi;
I:=i+1;
fintq;
Mat[y, 0] := mat [0, x];
Fin;

3. Procédure Simplexe : Permet de fait tout les calcules.

Procédure simplexe;
Début
Cherche_pivot;
Pivot := mat[y, x];
I := y;
J := 1;
Tan que (j <= m) faire
Début
Mat [i, j] := mat [i, j] / pivot;
J:=j+1;
Fin;
Pour i:=1 jusqu'a n faire
Début
Si (i<>y) alors
Début
Si (mat [i, x]=0) alors
Début
Pour j:=1 jusqu'a m faire
mat2 [i, j]:=mat [i, j];
Fin
Sinon
Début
Pour j:=1 jusqu'a m faire
Début
Mat[y, j]:=mat[y, j]*(-mat [i, x]);
mat2 [i, j]:=mat[y, j] +mat [i, j];
Fin;
Pour j:=1 jusqu'a m faire
Mat[y, j]:=mat[y, j]/ (-mat [i, x]);
Fin;
Fin
Sinon
Début
Pour j:=1 jusqu'a m faire
mat2 [i, j]:=mat [i, j];
Fin;

Pour i:=1 jusqu'a n faire


Début
Pour i:=1 jusqu'a n faire
Mat [i, j]:=mat2 [i, j];
Fin;
I:=n;
Pour j:=1 jusqu'a m faire
Début
Si (mat [i, j]>0) alors
Simplexe;
Fin;
Fin;
Fin;
4. Procédure Afficher : afficher les résultat.

Procédure afficher ;
{Affichage d'une matrice de N lignes et P colonnes}
Variable I, J : entier;
Début

Pour I := 0 jusqu'a n faire


Début
Pour J := 0 jusqu'a m faire

Écrire (' mat [I, J] ‘);

Fin
Fin ;

• Exemple du simplexe :

1. Maximiser (z)= 1200x1+1000x2

3x1+4x2<= 160
6x1+3x2<= 180
X1, x2 >= 0

 La forme canonique :

Maximiser (z)= 1200x1+1000x2

3x1+4x2+t1<= 160
6x1+3x2+t2<= 180
X1, x2 >= 0

Tab 0 ;

B/HB X1 X2 T1 T2 c
T1 3 4 1 0 160
T2 6 3 0 1 180
Max (z) 1200 1000 0 0 0

Tab 1 ;

B/HB X1 X2 T1 T2 c
T1 3 4 1 0 160
X1 1 ½ 0 1/6 30
Max (z) 0 400 0 200 3500

B/HB X1 X2 T1 T2 c
X2 0 1 2/5 -1/5 28
X1 1 0 -1/5 4/15 16
Max (z) 0 0 -180 -120 -47200
Max (z) = 47200 DA
X1=16
X2=28

2. Maximiser (z)= 4x1+12x2+3x3

X1 <= 1000
X2 <=500
X3 <=1500
3x1+6x2+2x3<=6550
X1, x2, x3 >= 0

 La forme canonique :

Maximiser (z)= 4x1+12x2+3x3

X1+t1 <= 1000


X2 +t2 <=500
X3 +t3 <=1500
3x1+6x2+2x3+t4 <=6550
X1, x2, x3 >= 0

: Tab 0

B/HB X1 X2 X3 T1 T2 T3 T4 c
T1 1 0 0 1 0 0 0 1000
T2 0 1 0 0 1 0 0 500
T3 0 0 1 0 0 1 0 1500
T4 3 6 2 0 0 0 1 6750
Max (z) 4 12 3 0 0 0 0 0

: Tab 1

B/HB X1 X2 X3 T1 T2 T3 T4 c
T1 1 0 0 1 0 0 0 1000
X2 0 1 0 0 1 0 0 500
T3 0 0 1 0 0 1 0 1500
T4 3 0 2 0 -6 0 1 3550
Max (z) 4 0 3 0 -12 0 0 -6000

: Tab 2

B/HB X1 X2 X3 T1 T2 T3 T4 c
X1 1 0 0 1 0 0 0 1000
X2 0 1 0 0 1 0 0 500
T3 0 0 1 0 0 1 0 1500
T4 0 0 2 -3 -6 0 1 780
Max (z) 0 0 3 -4 0 -12 0 -10000
: Tab 3

B/HB X1 X2 X3 T1 T2 T3 T4 c
X1 1 0 0 1 0 0 0 1000
X2 0 1 0 0 1 0 0 500
T3 0 0 0 3/2 3 1 -4 1125
X3 0 0 1 -3/2 -3 0 ½ 3175
Max (z) 0 0 0 40 -3 -12 -3/2 1425

: Tab 4

B/HB X1 X2 X3 T1 T2 T3 T4 c
X1 1 0 0 0 -2 -2/3 1/3 250
X2 0 1 0 0 1 0 0 500
T1 0 0 0 1 2 2/3 -1/3 750
X3 0 0 1 0 0 1 0 1500
Max (z) 0 0 0 0 -4 -1/3 -4/3 -11700

Max (z) = 11700 DA


X1=250
X2=500
X3=1500

• Conclusion:

Algorithme efficace pour résoudre des problèmes de programmation linéaire (ou de trouver qu'il n'y a
pas de solution)

Beaucoup utilisé et réussit sur les problèmes ``réels''

Théoriquement trop lent pour des problèmes très bizarres

Basé sur deux idées importantes:

• solution itérative parcourt très peu des sommets


• calcul astucieux de chaque itération

Vous aimerez peut-être aussi