You are on page 1of 23

Mini-projet de Recherche Oprationnelle

Mthode simplexe & mthode de DJIKSTA


24/04/2012 RALIS PAR : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza OPTION : MCQ

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Mthode simplexe

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 2

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Introduction:
Loptimisation est devenue une ncessit de nos jours .Afin de rduire les frais et de rpondre le plus vite possible aux attentes et aux exigences de plus en plus pointues des clients, il est aujourdhui impratif de savoir optimiser au mieux les diffrents paramtres qui conditionnent notre travail et notre productivit. Il sagit dune mthode danalyse scientifique du problme pos, mthode particulirement tourn vers la recherche de la meilleure faon de faire dapprhender les faits, et de prendre des dcisions susceptibles de dboucher sur des meilleurs rsultats .Elle se sert, entre autres, de sciences exactes et de sciences humaines. Signalons cet gard : 1- La part croissante des mathmatiques avec la thorie des systmes, les diffrentes mthodes doptimisation, et les mthodes statistiques; 2- Lconomie, plus particulirement lconomie et organisation des entreprises et lanalyse conomique; 3- Linformatique avec des nombreuses applications. On peut dire, pour lessentiel, que les problmes traits par la recherche oprationnelle se rsument en problme de types combinatoire (difficult dnumration de toute les solutions possibles partir dun certain seuil et sous certaines conditions), alatoires (dcisions dans lincertain) et concurrentiels (prise de dcision dans le duel ou situation de concurrence dans laquelle il faut faire face aux diverses stratgies de ladversaire).

But :
Le but de cette mthode est de trouver la solution d'un problme de minimisation.

Analyse du problme:
Nous allons faire une programmation de lalgorithme Simplexe dans le cas gnral :

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

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 3

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

La mthode du simplex consiste passer dune solution de base admissible une autre solution de base admissible en amliorant la fonction objective. On dmarre d'une solution de base admissible quelconque. En introduisant les variables dcart le problme linaire 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 dtermine 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.

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 4

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Programme principal :
Le programme en langage C, se prsente ainsi :

#include <stdio.h> #include <conio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <process.h> #include <stdlib.h> #include <conio.h> int resolutionSimplexe(); float a,b,c; int pl_aps_entrant(double a[6][6],int hb[6],int m,int n,int phase) { int i,j,k,l; double d,s,max; k=0; max=0.0; if(phase==2)l=0; else l=m+1; for(j=1;j<=n;j++) { d=a[l][j]; s=0.0; if((d>0)&&(hb[j]!=n+m)) { for(i=1;i<=m;i++) s+=fabs(a[i][j]); d/=s; if(d>max) { max=d;

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 5

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

k=j; } } } return(k); } int pl_aps_sortant(double a[6][6],int m,int k) { int i,l; double rap,min; min=1e308; l=0; for(i=1;i<=m;i++) if(a[i][k]>0) { rap=a[i][0]/a[i][k]; if(rap<min) { min=rap; l=i; } } return(l); } int repeatSimplexe() { char rep; printf("\nVoulez-vous resoudre un autre programme lineaire ? (o/n) "); scanf("%s",&rep); return(strcmp(&rep,"n")); } int simplexe() { do

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 6

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

resolutionSimplexe(); while (repeatSimplexe()); printf("\n"); return(0); } void pl_pivotage(double a[6][6],int db[6],int hb[6],int m,int n,int l,int k) { int i,j; double pivot,coef; pivot=a[l][k]; for(i=0;i<=m;i++) if(i!=l) { coef=a[i][k]/pivot; a[i][k]=-coef; for(j=0;j<=n;j++) if(j!=k) a[i][j]=a[i][j]-coef*a[l][j]; } coef=1/pivot; a[l][k]=coef; for(j=0;j<=n;j++) if(j!=k) a[l][j]=coef*a[l][j]; i=db[l]; db[l]=hb[k]; hb[k]=i; } void pl_aps_affich(double a[6][6],int db[6],int hb[6],int m,int n,int phase) { int i,j; printf(" "); for(j=1;j<=n;j++) if((phase==1)||(hb[j]!=n+m))

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 7

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

printf(" x%d\n",hb[j]); if(phase==1) { printf("z'+"); for(j=0;j<=n;j++) printf("%11.5e \n",a[m+1][j]); } for(i=0;i<=m;i++) { if(i==0) printf("z+ "); else if(db[i]!=0) printf("x%d ",db[i]); else printf(" "); for(j=0;j<=n;j++) if((phase==1)||(hb[j]!=n+m)) printf("%11.5e \n",a[i][j]); } } int pl_simplexe_primal(double a[6][6],double sol[12],int ineq1,int ineq2, int eq,int n) { int i,j,k,l,phase,m,m1; int db[6],hb[6]; double min; m=ineq1+ineq2+eq; for(i=ineq1+1;i<=ineq1+ineq2;i++) for(j=0;j<=n;j++) a[i][j]=-a[i][j]; for(i=1;i<=ineq1+ineq2;i++) db[i]=n+i; for(i=ineq1+ineq2+1;i<=m;i++) db[i]=0; for(j=1;j<=n;j++)

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 8

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

hb[j]=j; if(eq!=0) { for(i=ineq1+ineq2+1;i<=m;i++) { l=i; k=0; for(j=1;j<=n;j++) if(a[i][j]!=0)k=j; if(k==0) { if(a[i][0]!=0) return(2); } else { printf("variable.entrante: x%d\n",hb[k]); pl_pivotage(a,db,hb,m,n,l,k); hb[k]=hb[n]; for(j=0;j<=m;j++) a[j][k]=a[j][n]; n-=1; } } } n+=1; m1=m; hb[n]=n+m; phase=2; l=0; min=0; for(i=1;i<=m;i++) if(a[i][0]<min)

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 9

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

{ min=a[i][0]; l=i; } if(l!=0)phase=1; k=1; if(phase==1) { m1=m+1; for(j=0;j<n;j++) a[m1][j]=0; for(i=1;i<=m;i++) if(a[i][0]<0) a[i][n]=-1; else a[i][n]=0; a[0][n]=0; a[m1][n]=-1; pl_pivotage(a,db,hb,m1,n,l,n); } while(phase<=2) { do { k=pl_aps_entrant(a,hb,m,n,phase); if(k!=0) { l=pl_aps_sortant(a,m,k); if(l==0)return(1); pl_pivotage(a,db,hb,m1,n,l,k); } } while(k!=0); if(phase==1) {

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 10

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

l=0; for(i=1;i<=m;i++) if(db[i]==n+m)l=i; if(l!=0) { if(fabs(a[l][0])>1e-15)return(2); else { for(j=1;j<=n;j++) if(a[l][j]!=0) k=j; pl_pivotage(a,db,hb,m1,n,l,k); } } } phase+=1; m1-=1; } for(i=1;i<m+n;i++) sol[i]=0; for(i=1;i<=m;i++) sol[db[i]]=a[i][0]; return(0); } int resolutionSimplexe() { system("cls"); int i,j,ineq1,ineq2,eq,n,err; int k=1; double a[6][6],sol[12]; printf("Entrez le nombre de variables de votre systeme :"); scanf("%d",&n); printf("Entrez les elements de votre fonction Objective :\n");

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 11

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

a[0][0]=0; for(k=1;k<=n;k++) { //cout<<"a[0]["<<k<<"] = "; printf("a[0][%d] = ",k); //cin>>a[0][k]; scanf("%f",&(a[0][k])); } printf("Entrez le nombre d'equations avec second membre ayant <= :"); scanf("%d",&ineq1); printf("Entrer les elements de l'equations en <= :"); for(i=1;i<=ineq1;i++) { for(j=0;j<=n;j++) { printf("\na[%d][%d] = ",i,j); //cin>>a[i][j]; scanf("%f",&(a[i][k])); } } ineq2=0; eq=0; err=pl_simplexe_primal(a,sol,ineq1,ineq2,eq,n); if(err==1) printf("Solution infinie\n"); else if(err==2) printf("Domaine vide\n"); else { printf("\nSolution optimale:\n"); printf("+************************************+\n"); for(i=1;i<=ineq1+ineq2+n;i++) printf("| x%d =%.5f |\n",i,sol[i]);

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 12

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

printf("| Valeur optimale: z=%.5f |\n",-a[0][0]); printf("+************************************+\n"); } return (0); } int main() { simplexe(); }

Exemple dexcution :

Remarque :
Le rsultat obtenus en utilisant ce programme est le mme rsultat obtenus en faisant le calcule la main.

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 13

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Mthode de DJIKSTA

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 14

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Introduction :
Lun des problmes les plus courant est loptimisation des chemins et des parcours emprunts lors dune opration de transport .Etant donn un rseau de villes ou de relais, il faut choisir le bon itinraire, cest dire le plus court .Ceci permet de rduire le temps de livraison, les frais de carburant et aussi la fatigue des convoyeurs quils soient humains ou robots.

But :
Le but de cette mthode est la programmation du plus court chemin par la mthode de DIJKSTRA.

Analyse du problme :
Etant donn un graphe G, lobjet est de dterminer le plus court chemin de lentre X0, tout autre sommet du graphe. Soit V lensemble des sommet du graphe et V (Xi,Xj) lvaluation de larc (Xi,Xj) suppose positive.

Algorithme :
Lalgorithme de DIJKSTRA se prsente sous la forme suivante : Soit V lensemble des sommets du graphe. Soit v (Xi, Xj) la valuation de larc (Xi, Xj) suppose positive. Poser S={X0} ,0 = 0 j = v(X0 , Xj) si (X0 , Xj) est un arc du graphe , sinon Tant que S V, choisir Xi dans {V-S} correspondant au plus petit des i de cet ensemble. Poser S = S U {Xi} et pour Xj dans {V-S} (Xi) poser j = min(i + v(Xi , Xj) , j) Sarrter quand S = V.

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 15

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Programme principal :
Le programme en langage C, se prsente ainsi :

#include <conio.h> #include <iostream.h> #include <stdio.h> #include <values.h> #define N 100 int Res[N+2][N+2],n; void data(); void Dijkstra(); void data() { int e; char R; clrscr(); do { cout<<"\n Entrer le nombre de points du graphe (n<"<<N<<") : "; cin>>n; } while ((n<1)||(n>N)); for(int a=0;a<=n+1;a++)

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 16

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

for(int b=0;b<=n+1;b++) Res[a][b]=(a==b)?0:MAXINT; cout<<"\n\tDonner les points d'entre :\n"; do { cout<<"\nDonner un point d'entre : "; cin>>e; cout<<"donner la longueur X0X"<<e<<" : "; cin>>Res[e][0]; cout<<"Encore un point (o/n) ? "; do R=getch(); while ((R!='o')&&(R!='n')); } while (R=='o');

cout<<"\n\n\tDonner les points de sortie :\n"; do { cout<<"\nDonner un point de sortie : "; cin>>e; cout<<"donner la longueur X"<<e<<"X"<<n+1<<" : "; cin>>Res[n+1][e];

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 17

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

cout<<"Encore un point (o/n) ? "; do R=getch(); while ((R!='o')&&(R!='n')); } while (R=='o'); cout<<endl; for(int c=1;c<=n;c++) { char r='o'; while (r=='o') { cout<<"\nVoulez-vous dfinir un arc d'extrmit initiale" ;cout<<"X"<<c<<" (o/n) ? "; do r=getch(); while ((r!='o')&&(r!='n')); if (r=='o')

{ int b; cout<<"\nDonner l'extrmit : "; cin>>b; cout<<"Donner la longueur : "; cin>>Res[b][c];

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 18

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

} } } } void Dijkstra() { int c,D[N][N],S[N],L[N],R[N]; int V_S(int,int[N]); for(int a=0;a<=n+1;a++) S[a]=MAXINT; S[0]=0; for(int b=0;b<=n+1;b++) L[b]=Res[b][0]; c=0; while (c<=n) { int i=MAXINT;

for(int d=1;d<=n+1;d++) if S[c+1]=i; for(int f=0;f<=n+1;f++) D[c][f]=L[f]; ((L[d]<L[i])&&(V_S(d,S))) i=d;

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 19

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

for(int e=1;e<=n+1;e++) if ((Res[e][i]!=MAXINT)&&(V_S(e,S))) if c++; } for(int g=0;g<=n+1;g++) D[c][g]=L[g]; cout<<"\n\n\tLe chemin de valeur minimale "<<D[c][c]<<" est : (X0"; int k=c,li=c,j=0,x=D[c][c]; R[j]=c; while (li>=0) { while(D[li][k]==x) k=S[li+1]; x=D[li+1][k]; j++; R[j]=k; } for(int m=j-1;m>=0;m--) cout<<",X"<<R[m]; cout<<") ."; li--; (L[i]+Res[e][i]<=L[e]) L[e]=L[i]+Res[e][i];

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 20

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

while(!kbhit()); } int { V_S(int b,int S[N]) int y=1; for(int a=0;a<=n+1;a++) if return(y); } void main() { data(); Dijkstra(); } (b==S[a]) y=0;

Exemple :
X1 5
3
10 7

X4
8

7 4

X7

10

X0

10 X2

X5

x8
6

X3 4

X6

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 21

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Excution :

Conclusion :
Ce Projet nous a permis de raliser un programme qui permet de dterminer le plus court chemin dune entre, tout autre sommet dun graphe, ce qui permet de diminuer le temps de calcul et la probabilit derreur.

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 22

Mini-projet de Recherche Oprationnelle cole Nationale de lIndustrie Minrale

2011/2012

Remerciements
Nous tenons remercier notre professeur, Mr ELBAHJA pour nous avoir offert cette chance et donner la motivation pour faire cette recherche qui nous a permis de consolider nos connaissances en programmation et nous a bnfici dune autre exprience en matire de mini-projet.

Ralis par : LABZAR Fadoua, SMOUH Mohamed Amine & SENHAJI Hamza Encadr par : Mr ELBAHJA

Page 23

You might also like