Simplex Algorithmus in MatLab

Neue Frage »

Seren Auf diesen Beitrag antworten »
Simplex Algorithmus in MatLab
Hallo Leute,
Es geht um den Bereich der linearen Optimierung undzwar genauer um den Simplex Algorithmus. Wir sollten ihn programmieren und ich hab mich entschieden das in MatLab zu implementieren. Nun habe ich einen Quelltext im Internet gefunden und ihn analysiert, jedoch verstehe ich eine Zeile nicht und bitte jemanden mir diese zu erklären:

Hier der Quelltext

function [I,l] = PIVOT(I,c,A,x,mode)

% Input
% I ...Index des Basisvektors
% c ...Vektor der Zielfunktion
% A ...Matrix der Nebenbedingungen
% x ...Basisvektor
% mode ...Der Modus, in dem das Simplex Verfahren durchlaufen soll
% 1, falls der Steilste Abstieg benutzt werden soll
% 0, falls die Regel von Bland benutzt werden soll

% Output
% I ...Index des neuen Basisvektors
% l ...-1, falls Problem unbeschraenkt
% 0, falls das Optimum vorliegt
% 1, falls das Verfahren noch nicht im Optimum angekommen ist
l = 1;

% Bilden des Index J der Nichtbasisvariablen
J = [1:size(A,2)];
J(I) = zeros(size(I));
J = find(J);

% Berechnen der reduzierten Kosten u
u = c(J) - A(:,J)'*inv(A(:,I)')*c(I);

% Pruefen ob Y bereits eine optimale Basisloesung ist <=> u_i >= 0 fuer
% alle i
if min(u)>=0;
l = 0 ;
return;
end
% wenn Loesung optimal, Programmende, sonst gehe weiter

if mode == 1

%%%%%%%%%%%%%%%%%%%%
% Steilster Abstieg
%%%%%%%%%%%%%%%%%%%%

% Auffinden des u_r mit minimalem Index r und minimalen reduzierten Kosten
j = find(u<0);
i = J(j);
r = min(i);

end
if mode == 0

%%%%%%%%%%%%%%%%%
% Regel von Bland
%%%%%%%%%%%%%%%%%

j=find(u<0);
r=I(j(1));

end

% Berechnung von d der mit der Quotientenregel
d = A(:,I)\A(:,r);
if max(d)<=0;
% Pruefen, ob Zielfunktion nach unten unbeschraenkt
l = -1;
return;
end;
% wenn Zielfunktion unbeschraenkt, Programmende, sonst gehe weiter

% Auffinden des minimalsten Index s
i = find(d>0);
j=find((x(i)./d(i)==min(x(i)./d(i))
s=I(i(j))
s = min(i);

% Aufstellen des neuen Indexvektors
j = find(I==s);
I(j) = r;
end

undzwar die Stelle

% Auffinden des minimalsten Index s
i = find(d>0);
j=find((x(i)./d(i)==min(x(i)./d(i));
s=I(i(j)) ;
s = min(i);


Es geht mir um die Deklaration von j und dem, was danach folgt.
Was genau wird da gemacht und wieso? Es wäre sehr nett, wenn mich jemand aufklärt.

lg Seren
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »