A voir également:
- Algo simplex Matlab
- Acp matlab - Forum Matlab
- Courbe de tendance matlab ✓ - Forum Matlab
- Dérivée matlab - Forum Matlab
- Moyenne glissante matlab - Forum Matlab
- Fonction triangle matlab - Forum Matlab
8 réponses
I am sorry for the late response..
J'ai trouvé OPL plus simple et plus rapide que matlab.
Je te conseil vivement de le voir car il est proche de langage naturel...
si ta des questions, je suis à ta disposition
h!
/*********************************************
* OPL 6.1.1 Model
* Author: hamza
* Creation Date: 26 févr. 2009 at 16:14:07
*********************************************/
using CP;
int p[1..6, 1..10]=...;
int w[1..10]=...;
int x[1..6,1..10]=...;
dvar int n[1..6] in 0..2;
dvar int s[1..10] in 0..2;
minimize sum(i in 1..10) s[i];
subject to{
forall(j in 1..10)
s[j]==sum(i in 1..6) p[i,j]*n[i];
forall(j in 1..10)
w[j] <= sum(i in 1..6) x[i,j]*n[i];
}
execute {
for (var j = 1; j <= 10; j++) {
write(s[j]+ " ");
}}
/*********************************************
* OPL 6.1.1 Data
* Author: hamza
* Creation Date: 26 févr. 2009 at 16:14:07
*********************************************/
p=[
[1,0,0,1,1,0,0,1,0,0],
[0,1,0,0,1,1,0,0,1,0],
[0,0,1,0,0,1,1,0,0,1],
[1,1,0,1,0,1,0,1,1,0],
[0,1,1,0,1,0,1,0,1,1],
[1,1,1,1,0,0,1,1,1,1]
];
x=[
[1,0,0,1,1,0,0,1,0,0],
[0,1,0,0,1,1,0,0,1,0],
[0,0,1,0,0,1,1,0,0,1],
[1,1,0,1,2,1,0,1,1,0],
[0,1,1,0,1,2,1,0,1,1],
[1,1,1,1,2,2,1,1,1,1]
];
w=[1,1,1,1,2,2,1,1,1,1];
J'ai trouvé OPL plus simple et plus rapide que matlab.
Je te conseil vivement de le voir car il est proche de langage naturel...
si ta des questions, je suis à ta disposition
h!
/*********************************************
* OPL 6.1.1 Model
* Author: hamza
* Creation Date: 26 févr. 2009 at 16:14:07
*********************************************/
using CP;
int p[1..6, 1..10]=...;
int w[1..10]=...;
int x[1..6,1..10]=...;
dvar int n[1..6] in 0..2;
dvar int s[1..10] in 0..2;
minimize sum(i in 1..10) s[i];
subject to{
forall(j in 1..10)
s[j]==sum(i in 1..6) p[i,j]*n[i];
forall(j in 1..10)
w[j] <= sum(i in 1..6) x[i,j]*n[i];
}
execute {
for (var j = 1; j <= 10; j++) {
write(s[j]+ " ");
}}
/*********************************************
* OPL 6.1.1 Data
* Author: hamza
* Creation Date: 26 févr. 2009 at 16:14:07
*********************************************/
p=[
[1,0,0,1,1,0,0,1,0,0],
[0,1,0,0,1,1,0,0,1,0],
[0,0,1,0,0,1,1,0,0,1],
[1,1,0,1,0,1,0,1,1,0],
[0,1,1,0,1,0,1,0,1,1],
[1,1,1,1,0,0,1,1,1,1]
];
x=[
[1,0,0,1,1,0,0,1,0,0],
[0,1,0,0,1,1,0,0,1,0],
[0,0,1,0,0,1,1,0,0,1],
[1,1,0,1,2,1,0,1,1,0],
[0,1,1,0,1,2,1,0,1,1],
[1,1,1,1,2,2,1,1,1,1]
];
w=[1,1,1,1,2,2,1,1,1,1];
angel2828
Messages postés
1
Date d'inscription
samedi 14 novembre 2009
Statut
Membre
Dernière intervention
14 novembre 2009
3
14 nov. 2009 à 11:53
14 nov. 2009 à 11:53
est c k vous pouvez m envoyé le simplexe sous matlabe
La fonction que tu dois utiliser est MILP(A, B, C ,UB, LB)
Résigne toi sur MILP, sinon je t'enverrais un exemple qui va t'aider
hamza
Résigne toi sur MILP, sinon je t'enverrais un exemple qui va t'aider
hamza
si ta question consiste à comment résoudre un pbm de pgm lineair entiere avec matlab
tu peux me contacter par mail
Hamza
tu peux me contacter par mail
Hamza
Romahisam
Messages postés
4
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
8 mai 2009
1
8 mai 2009 à 14:40
8 mai 2009 à 14:40
j'aimerais de voir l'algorithme de simplexe programmé en matlab.......STP, si vous avez-le, dit-moi.........c'est très urgent...conterctez sur Romahisam@gmail.com...........merci à l'avance :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
amigos l voici l simplex !!
NB:pour entré la matrice A il faut que tu transforme l système en forme standard
é bonne chance !
function[x,Z]=simplex(A,b,C)
[m,n]=size(A);
M=[A eye(m,n) b ;C Zeros(1,m+1)];
[V,d]=max(M(m+1,1:m+n));
while V>0
N=find (M(1:m,d)>0);
T=ones(m,1)*inf;
T(N)=M(N,n+m+1)./M(N,d);
[i,l]=min(T);
M(l,:)=M(l,:)./M(l,d);
for i=1:m+1
if i~=l
M(i,:)=M(i,:)-M(l,:)*M(i,d);
end
end
[V,d]=max(M(m+1,1:m+n));
end
x=Zeros(n,1);
for i=1:n
l=find(M(:,i)==1);
if l&(sum (abs(M(:,i)))-1==0)
x(i)=M(l,m+n+1);
end
end
Z=-M(m+1,m+n+1);
if~all (A*x<=b)
x=[]; Z=[];
display('pas de solution');
end
NB:pour entré la matrice A il faut que tu transforme l système en forme standard
é bonne chance !
function[x,Z]=simplex(A,b,C)
[m,n]=size(A);
M=[A eye(m,n) b ;C Zeros(1,m+1)];
[V,d]=max(M(m+1,1:m+n));
while V>0
N=find (M(1:m,d)>0);
T=ones(m,1)*inf;
T(N)=M(N,n+m+1)./M(N,d);
[i,l]=min(T);
M(l,:)=M(l,:)./M(l,d);
for i=1:m+1
if i~=l
M(i,:)=M(i,:)-M(l,:)*M(i,d);
end
end
[V,d]=max(M(m+1,1:m+n));
end
x=Zeros(n,1);
for i=1:n
l=find(M(:,i)==1);
if l&(sum (abs(M(:,i)))-1==0)
x(i)=M(l,m+n+1);
end
end
Z=-M(m+1,m+n+1);
if~all (A*x<=b)
x=[]; Z=[];
display('pas de solution');
end
clear all;clc;global cx,cx=0;
disp('****** ALGO DU SIMPLEXE AVEC LES COUPES DE GOMORY ***************')
a=input('La matrice a=');[m,n]=size(a);M=9999;nf=n;cx=cx+m*n+4;
b=input('Le vecteur b=');c=input('Le vecteur c=');ci=c;
disp('Si le problème à minimiser introduire "-1" sinon "1"')
ch=input('Votre choix : ');fin=0;
disp('Pour le vecteur des contraintes, donner:')
disp(' "0": pour "="; "1":pour "<=" et "-1": pour ">="')
co=input('Le vecteur co=');cx=cx+2*n*m+n+2*m+9;
%******************** Mise du systeme sous forme standard *****************
if(~(ch+1)) c=-c;cx=cx+n;end
for i=1:m
cx=cx+1;if(b(i)<0) a(i,:)=-a(i,:);b(i)=-b(i);co(i)=-co(i);cx=cx+n+2;end
end
for i=1:m
cx=cx+1;if(~(co(i)+1)) n=n+1;a(:,n)=0;c(n)=0;a(i,n)=-1;co(n)=0;cx=cx+m+5;end
end
for i=1:m
if(~(co(i)-1))
n=n+1;a(:,n)=0;a(i,n)=1;c(n)=0;
else
n=n+1;a(:,n)=0;a(i,n)=1;c(n)=-M;
end,cx=cx+m+5;
end
%******************** Debut du programme principale ***********************
j=0;cx=cx+2;for i=n-m+1:n j=j+1;t(j)=i;cx=cx+4;end;%******* base **********
while(~fin)
e=zeros(1,n);cx=cx+n+1;
for j=1:n
for i=1:m e(j)=e(j)+c(t(i))*a(i,j);cx=cx+3;end
end
e=e-c;cx=cx+2*n;
mn1=find(e==min(e));j0=mn1(1);cx=cx+4;%Calcul d'indice du min des e(j)*********
if(e(j0)>=0)
for j=1:n
bo=exst(t,j);if(bo) x(j)=b(bo);else x(j)=0;end,cx=cx+3;
end
disp('-------------------------------------------------------------')
disp('Les résultats finales du simplexe :')
disp('------------------------------------')
fin=1,MatriceFinale=num2str(a),cx=cx+n*m+7;
disp([' e = ( ' num2str(e) ' )']),disp([' x* = ( ' num2str(x(1:nf)) ' )'])
disp([' z = ' num2str(ci(1:nf)*x(1:nf)') ])
disp('-------------------------------------------------------------')
else
l=length(find(a(:,j0)<=0));cx=cx+2;
if(l-m)
for i=1:m%Calcul du o(j) *************************************
cx=cx+1;if(a(i,j0)>0) o(i)=b(i)/a(i,j0);cx=cx+2;else o(i)=M;cx=cx+1;end
end
mn=find(o==min(o));i0=mn(1);%Calcul d'indice du min des o(j)**
t(i0)=j0;
b(i0)=b(i0)/a(i0,j0);
a(i0,:)=a(i0,:)/a(i0,j0);
cx=cx+3*n+6;
for i=1:m,cx=cx+1;
if(i-i0)
b(i)=b(i)-b(i0)*a(i,j0);a(i,:)=a(i,:)-a(i,j0)*a(i0,:);
cx=cx+3*n+3;
end
end
else
fin=1;disp('La solution optimale n''est pas bornée'),cx=cx+2;
end
end
end
%******** Debut des coupes de Gomory **************************************
fin=0;
cx=cx+2;
while(~fin)
k=0;cx=cx+2;
for j=1:n,cx=cx+3;
if((frac(x(j))>=.00001)*(frac(x(j))<=.99999)) k=exst(t,j);
break,cx=cx+2;
end
end,cx=cx+1;
if(k)
m=m+1;n=n+1;
a(m,:)=-frac(a(k,:));b(m)=-frac(b(k));
a(:,n)=zeros(m,1);a(m,n)=1;d=e;d(n)=0;fd=0;cx=cx+n+m+8;
while(~fd)%********** Dual ****************************************
m3=find(b==min(b));
i0=m3(1);
cx=cx+4;
disp('****** ALGO DU SIMPLEXE AVEC LES COUPES DE GOMORY ***************')
a=input('La matrice a=');[m,n]=size(a);M=9999;nf=n;cx=cx+m*n+4;
b=input('Le vecteur b=');c=input('Le vecteur c=');ci=c;
disp('Si le problème à minimiser introduire "-1" sinon "1"')
ch=input('Votre choix : ');fin=0;
disp('Pour le vecteur des contraintes, donner:')
disp(' "0": pour "="; "1":pour "<=" et "-1": pour ">="')
co=input('Le vecteur co=');cx=cx+2*n*m+n+2*m+9;
%******************** Mise du systeme sous forme standard *****************
if(~(ch+1)) c=-c;cx=cx+n;end
for i=1:m
cx=cx+1;if(b(i)<0) a(i,:)=-a(i,:);b(i)=-b(i);co(i)=-co(i);cx=cx+n+2;end
end
for i=1:m
cx=cx+1;if(~(co(i)+1)) n=n+1;a(:,n)=0;c(n)=0;a(i,n)=-1;co(n)=0;cx=cx+m+5;end
end
for i=1:m
if(~(co(i)-1))
n=n+1;a(:,n)=0;a(i,n)=1;c(n)=0;
else
n=n+1;a(:,n)=0;a(i,n)=1;c(n)=-M;
end,cx=cx+m+5;
end
%******************** Debut du programme principale ***********************
j=0;cx=cx+2;for i=n-m+1:n j=j+1;t(j)=i;cx=cx+4;end;%******* base **********
while(~fin)
e=zeros(1,n);cx=cx+n+1;
for j=1:n
for i=1:m e(j)=e(j)+c(t(i))*a(i,j);cx=cx+3;end
end
e=e-c;cx=cx+2*n;
mn1=find(e==min(e));j0=mn1(1);cx=cx+4;%Calcul d'indice du min des e(j)*********
if(e(j0)>=0)
for j=1:n
bo=exst(t,j);if(bo) x(j)=b(bo);else x(j)=0;end,cx=cx+3;
end
disp('-------------------------------------------------------------')
disp('Les résultats finales du simplexe :')
disp('------------------------------------')
fin=1,MatriceFinale=num2str(a),cx=cx+n*m+7;
disp([' e = ( ' num2str(e) ' )']),disp([' x* = ( ' num2str(x(1:nf)) ' )'])
disp([' z = ' num2str(ci(1:nf)*x(1:nf)') ])
disp('-------------------------------------------------------------')
else
l=length(find(a(:,j0)<=0));cx=cx+2;
if(l-m)
for i=1:m%Calcul du o(j) *************************************
cx=cx+1;if(a(i,j0)>0) o(i)=b(i)/a(i,j0);cx=cx+2;else o(i)=M;cx=cx+1;end
end
mn=find(o==min(o));i0=mn(1);%Calcul d'indice du min des o(j)**
t(i0)=j0;
b(i0)=b(i0)/a(i0,j0);
a(i0,:)=a(i0,:)/a(i0,j0);
cx=cx+3*n+6;
for i=1:m,cx=cx+1;
if(i-i0)
b(i)=b(i)-b(i0)*a(i,j0);a(i,:)=a(i,:)-a(i,j0)*a(i0,:);
cx=cx+3*n+3;
end
end
else
fin=1;disp('La solution optimale n''est pas bornée'),cx=cx+2;
end
end
end
%******** Debut des coupes de Gomory **************************************
fin=0;
cx=cx+2;
while(~fin)
k=0;cx=cx+2;
for j=1:n,cx=cx+3;
if((frac(x(j))>=.00001)*(frac(x(j))<=.99999)) k=exst(t,j);
break,cx=cx+2;
end
end,cx=cx+1;
if(k)
m=m+1;n=n+1;
a(m,:)=-frac(a(k,:));b(m)=-frac(b(k));
a(:,n)=zeros(m,1);a(m,n)=1;d=e;d(n)=0;fd=0;cx=cx+n+m+8;
while(~fd)%********** Dual ****************************************
m3=find(b==min(b));
i0=m3(1);
cx=cx+4;