Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Simplex

Télécharger au format doc, pdf ou txt
Télécharger au format doc, pdf ou txt
Vous êtes sur la page 1sur 11

Rapport du TP Recherche opérationnelle

2002-2003

Introduction :

De nos jours, il est devenu primordial de savoir optimiser les paramètres qui
conditionnent un problème linéaire donné. Et ceci pour nous permettre de répondre dans
les plus brefs délais aux exigences et aux attentes des clients ainsi que pour améliorer la
productivité.
La méthode du Simplex, développé par G.Dantzig à partir de 1947, constitue le
principal outil d’optimisation. Elle a permis à la programmation linéaire de connaître un
grand succès, vu que cette méthode s’apprête parfaitement à un traitement sur ordinateur.

Le but du TP :

Le but de ce TP et de faire une programmation de l’algorithme Simplexe dans le


cas général :

Min CT.X
A.X < B
X>0

Comme exemple, nous devons traiter le problème linéaire suivant :

(Min) : Z=2x1-3x2-x3
-x1+2x2+2x3 ≤5
x2 - x3 ≤2
x2 +4x3≤6
x1, x2 ,x3 ≥ 0

1
Rapport du TP Recherche opérationnelle
2002-2003

L’algorithme :

L’idée de la méthode du simplex est de passer d’une solution de base admissible à


une autre solution de base admissible en améliorant la fonction objective.
On démarre d'une solution de base admissible quelconque.
Le programme linéaire est sous la forme suivante:

Min CT.X
A.X < B
X>0

En introduisant les variables d’écart le problème linéaire deviendra de la forme


suivante :
Min( Z= c1x1+c2x2+……….+cnxn)
a11x1+a12x2+……….+a1nxn+s1=b1
a21x1+a22x2+……….+a2nxn+s2=b2
.
.
an1x1+an2x2+……….+annxn+sn=bn
xi ≥ 0 ; i=1 ;2 ;…. ;n

On choisit parmi les variables hors base, la variables xq, telle que :
∆q=Min(∆i ; i=1 ;2 ;.. ;n)
avec ∆i =ci-zi

On détermine parmi les variables de base la variable sortante xp telle que:

(bp/apq)=Min{ bi/aiq ; i=1 ;2 ;.. ;n}

On élimine xq par pivotage (élimination de Gauss):

1. diviser la contrainte p par le pivot xpq


2. modifier la contrainte i, pour tout i ≠p , en remultipliant la contrainte p par aiq et en
la soustrayant de la contrainte i
3. modifier la fonction économique en remultipliant la contrainte p par cq et en la
soustrayant de l'expression de z.

La solution optimale est atteinte lorsque tous les ∆i sont ≥0.

2
Rapport du TP Recherche opérationnelle
2002-2003

Le programme en langage C :

#include<stdio.h>
#define N 50
#define M 50
#include<conio.h>
#include<math.h>
float tampon[N][M+N],d[N];

int n,indice[N],m;
int chercol(void);
int cherlig(int c );
void simp(int l, int c);
void affiche(void);
void saisie(void);
void scalaire(void);
//----------------la saisie-----------------//
void main(void)
{
int l,c;
saisie();
for(;;)
{
affiche();
c=chercol();
if(c==-1)
break;
printf("les tableaux de simplex sont:");
printf("\n%f",tampon[n][c]);
l=cherlig(c);
if(l==-1)
break;
indice[l]=c;
simp(l,c);
scalaire();
}
getch();

3
Rapport du TP Recherche opérationnelle
2002-2003
//----RECHERCHE DE LA COLONNE DU PIVOT-----------//
int chercol(void)
{ int i,memo;
float min;

min =tampon[n][0];
memo=0;
for(i=1;i<m+n;i++)
{
if(min>tampon[n][i])
{
min =tampon[n][i];
memo=i; }
if(min>=0)
return(-1);
else
return(memo);
}
}
//------RECHERCHE DE LA LIGNE DU PIVOT------------//
int cherlig(int c)
{
int i,memo;
float min;
i=0;
while(tampon[i][c]<=0)
{
i++;
if(i==n-1)
return(-1);}
min= tampon[i][m+n]/tampon[i][c];
memo=i;
for(i=0;i<n;i++)
{
if((tampon[i][c]!=0)&&( min >
tampon[i][m+n]/tampon[i][c]) &&(tampon[i][c]>0))
{
min = tampon[i][m+n]/tampon[i][c];
memo=i;}
return(memo);
}
}
}
}

4
Rapport du TP Recherche opérationnelle
2002-2003
//--------SIMPLEXE---------------------//
void simp(int l,int c)
{
int i,j;
float pivot;

pivot=tampon[l][c];
for(j=0;j<m+n+1;j++)
tampon[l][j] = tampon[l][j]/pivot;
for(i=0;i<n;i++)
{
if(i!=l)
{
pivot=tampon[i][c];
for(j=0;j<m+n+1;j++)
{
tampon[i][j]=tampon[i][j]-pivot*
tampon[l][j];
}
}
}
}
//------LES DELTAS(I,J)---------------//
void scalaire(void)
{
int i,j;
float L;
for(j=0;j<m+n+1;j++)
{
L=0;
for(i=0;i<n;i++)
L= L + d[indice[i]]*tampon[i][j];
if(j == m+n)
tampon[n][j]=L;
else
tampon[n][j]=d[j]-L;}
}
}
//----------AFFICHAGE----------------//
void affiche(void)
{
int l,c,i;
clrscr();
gotoxy(8,5);
cprintf("LES TABLAUX DE SIMPLEX SONT:");
for(l=0;l<n+1;l++)
{

5
Rapport du TP Recherche opérationnelle
2002-2003
i=1;
for(c=0;c<m+n+1;c++)
{
gotoxy(3*n*(i++),l+10);
printf("%.1f",tampon[l][c]);}
}
}
getch();
}
//---------LA SAISIE----------//
void saisie(void)
{
int p,l,c;
window(1,1,80,25);
textbackground(1);
clrscr();
window(4,5,75,24);
textbackground(20);
clrscr();
textcolor(WHITE);
gotoxy(4,2);
cprintf("CE PROGRAMME PERMET LA RESOLUTION DU PROBLEME");
gotoxy(4,3);
cprintf("LINEAIRE DE LA FORME A*X<=b");
gotoxy(4,4);
cprintf("PAR LA METHODE DE SIMPLEX");
gotoxy(4,5);
gotoxy(4,6);
cprintf("Le problème a la forme suivante:");
gotoxy(4,7);
cprintf("a11*x1+.....+a1m*xm<=b1");
gotoxy(4,8);
cprintf(". ..... . <=.");
gotoxy(4,9);
cprintf("an1*x1+.....+anm*xm<=bn");
gotoxy(4,10);
cprintf("MIN( c1*x1+.......+cn*xm).");
gotoxy(4,11);
cprintf("Entrez la dimension du problŠme:");
gotoxy(4,12);
cprintf("Entrez le nombre de lignes n= ");
scanf("%d",&n);
gotoxy(4,13);
cprintf("Entrez le nombre de colones m= ");
scanf("%d",&m);
p=n;
for(l=0;l<n;l++)

6
Rapport du TP Recherche opérationnelle
2002-2003
{
indice[l]=p++;
window(1,1,80,25);
textbackground(1);
clrscr();
window(1,1,80,40);
textbackground(20);
clrscr();
textcolor(WHITE);
gotoxy(10,6);

cprintf(" Entrer la matrice A");


for(l=0;l<n;l++)
{
for(c=0;c<m;c++)
{
gotoxy(14*c+12,l+9);
cprintf("A[%d][%d]=",l,c);
scanf("%f",&tampon[l][c]);}
cprintf("\nEntrer le vecteur b\n");
for(l=0;l<n;l++)
{
gotoxy(39,13+l);
cprintf("b[%d]=",l);
scanf("%f",&tampon[l][m+n]);}
cprintf("\nEntrer le vecteur c\n");
for(c=0;c<n;c++)
{
gotoxy(49,18+c);
cprintf("c[%d]=",c);
scanf("%f",&d[c]);}
for(c=0;c<m+n;c++)
{
if( c < n )
tampon[n][c]=d[c];
else
{
tampon[n][c]=0;
d[c]=0;
}
}
for(c=n;c<m+n;c++)
{
for(l=0;l<n;l++)
{
if( (l+n) == c )
tampon[l][c]=1;

7
Rapport du TP Recherche opérationnelle
2002-2003
else
tampon[l][c]=0;
tampon[n][m+n]=0;
}
}
}
}
}

Le traitement de l’exemple :

Le problème linéaire est le suivant :


(Min) : Z=2x1-3x2-x3
-x1+2x2+2x3 ≤5
x2 - x3 ≤2
x2 +4x3≤6
x1, x2 ,x3 ≥ 0

*La résolution manuelle de l’exemple :

En introduisant les variable d’écart s1,s2, s3 le problème linéaire devient :

(Min) : Z=2x1-3x2-x3
-x1+2x2+2x3 +s1=5
x2 - x3 +s2=2
x2 +4x3+s3=6
x1, x2 ,x3 ,s1,s2,s3≥ 0

donc

x1 x2 x3 s1 s2 s3 Sol
S1 -1 2 2 1 0 0 5
S2 0 1 -1 0 0 0 2
S3 0 1 4 0 0 1 6

j 2 -3 -1 0 0 0

8
Rapport du TP Recherche opérationnelle
2002-2003

x1 x2 x3 s1 s2 s3 Sol
S1 -1 0 4 1 -2 0 1
x2 0 1 -1 0 1 0 2
s3 0 0 5 0 -1 1 4

j 2 0 -4 0 3 0

x1 x2 x3 s1 s2 s3 Sol
X3 -1/4 0 1 1/4 -1/2 0 1/4
X2 -1/4 1 0 1/4 1/2 0 9/4
S3 5/4 0 0 -5/4 3/2 1 11/4

j 0 0 0 1 1 0 Z*= -7

Donc Z*=-7 et la solution optimale est


X1=0
X2=9/4
X3=1/4

*La résolution de l’exemple par le programme en langage C :

L’exécution du programme donnera :

CE PROGRAMME PERMET LA RESOLUTION DU PROBLEME


LINEAIRE DE LA FORME A*X<=b
PAR LA METHODE DE SIMPLEX
Le problème a la forme suivante :
a11x1+…..a1mxm<=b1
. ………. . <= …
an1x1+…..anmxm<=bn
MIN(c1*x1+…….+cmxm)
Entrer les dimension du problème
Entrer le nombre de lignes n=3
Entrer le nombre de colonnes m=3
La matrice A a la forme suivante
A[0][0]=-1 A[0][1]=2 A[0][2]=2

9
Rapport du TP Recherche opérationnelle
2002-2003

A[1][0]=0 A[1][1]=1 A[1][2]=-1


A[2][0]=0 A[2][1]=1 A[2][2]=4
Le vecteur B a la forme suivantes
B[0]=5 B[1]=2 B[2]=6
Le vecteur C a la forme suivante
C[0]=2 C[1]=-3 C[2]=-1

Les tableaux du simplex sont :

-1.0 2.0 2.0 1.0 0.0 0.0 5.0


0.0 1.0 -1.0 0.0 1.0 0.0 2.0
0.0 1.0 4.0 0.0 0.0 1.0 6.0
2.0 -3.0 -1.0 0.0 0.0 0.0

-1.0 0.0 4.0 1.0 -2.0 0.0 1.0


0.0 1.0 -1.0 0.0 1.0 0.0 2.0
0.0 0.0 5.0 0.0 -1.0 1.0 4.0
2.0 0.0 -4.0 0.0 3.0 0.0

-1/4 0.0 1.0 ¼ -1/2 0.0 ¼


-1/4 1.0 0.0 ¼ ½ 0.0 9/4
5/4 0.0 0.0 -5/4 -7/4 1.0 11/4
1.0 0.0 0.0 1.0 1.0 0.0 -7.0

10
Rapport du TP Recherche opérationnelle
2002-2003

Conclusion

Ce TP nous a permis de réaliser la programmation de l’algorithme du simplex qui


est l’ un des programmes de base de la recherche opérationnelle.

11

Vous aimerez peut-être aussi