Académique Documents
Professionnel Documents
Culture Documents
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;
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
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 ;
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;
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;
Procédure afficher ;
{Affichage d'une matrice de N lignes et P colonnes}
Variable I, J : entier;
Début
Fin
Fin ;
• Exemple du simplexe :
3x1+4x2<= 160
6x1+3x2<= 180
X1, x2 >= 0
La forme canonique :
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
X1 <= 1000
X2 <=500
X3 <=1500
3x1+6x2+2x3<=6550
X1, x2, x3 >= 0
La forme canonique :
: 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
• Conclusion:
Algorithme efficace pour résoudre des problèmes de programmation linéaire (ou de trouver qu'il n'y a
pas de solution)