Algorithme de simplexe sous Matlab

Fermé
med32_9 Messages postés 1 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 10 décembre 2009 - 10 déc. 2009 à 13:58
Bonjour,
J'ai un probleme. Je viens d'implementer l'agorithme de simplexe mais vers la fin, il me cause toujours un probleme:

Le probleme se situe lorsque je vais mettre à jour le c sur la partie soulignée.
Je dois mettre d'abord à jour le
c=M(m+1,1:m+n);
puis choisir les indices de valeur positive avec la fonction find
co=find(c>0);
cop=max(c(co))
Malheureusement ça ne marche pas, par contre en utilisant l'ancien qui est la fonction objectif sans le changer il marche
co=find(c>0);
c=M(m+1,1:m+n);
cop=max(c(co))
pourtant ce faut, car il va tjrs prendre le même valeur entrante et il fausse toujours l'agorithme


function[x,zmax]=spl1(A,b,c)
[m,n]=size(A);
x=zeros(m+n,1);
p=[];
M=[A eye(m) b;c zeros(1,m) 0];
if c<=0
disp('la base est optimal');
else
co=find(c>0);
cop=max(c(co));
l=find(c==cop);
l=min(l);
p=[p,l];
end
while cop>0
d=find(M(1:m,l)>0);
q=[M(d,n+m+1)./M(d,l) d];
[e,s]=min(q(:,1));
if e~=0
k=q(s,2);
for i=1:m+1
if i~=k
M(i,:)=M(i,:)-(M(k,:)/M(k,l))*M(i,l);
end
end
M(k,:)=M(k,:)/M(k,l);
if M(1+m,1:m+n)<0
break
end

co=find(c>0);
c=M(m+1,1:m+n);
cop=max(c(co))
l=find(c==cop);
l=min(l);
p=[p,l];
end
end
for j=p
v=find (M(1:m,j)==1);
x(j)=M(v,n+m+1);
end
zmax=-M(m+1,n+m+1);
x=x(1:n);