function []=blatt12neu() %Strategie Spieler x (die ersten drei Eintraege) - Achtung: Hier ist A, konsistent mit Aufgabe 11.2, die Auszahlungsmatrix für Spieler 2! anstatt max min wird also min max bestimmt, die Normalform kann dann analog zum Skript, mit den offensichtlichen Aenderungen, bestimmt werden. A=[1 1 1 0 0 0 0 0;1 -1 -2 -1 1 1 0 0;-1 2 1 -1 1 0 1 0;2 -1 2 -1 1 0 0 1]; b=[1;0;0;0]; c=[0;0;0;1;-1;0;0;0]; %Strategie Spieler y also A = - A' %A=[1 1 1 0 0 0 0 0;-1 1 -2 -1 1 1 0 0; 1 -2 1 -1 1 0 1 0; 2 -1 -1 -1 1 0 0 1]; %b=[1;0;0;0]; %c=[0;0;0;1;-1;0;0;0]; %Nun Sei A Auszahlungsmatrix von Spieler 1 %A=[1 1 1 0 0 0 0 0; -1 1 2 1 -1 1 0 0; 1 -2 -1 1 -1 0 1 0; -2 1 -2 1 -1 0 0 1]; %b=[1;0;0;0]; %c=[0;0;0;-1;1;0;0;0]; %Simplexverfahren %Startecke bestimmen Astart=[A,eye(length(b))]; cstart=[zeros(length(c),1);ones(length(b),1)]; bstart=b; B0start=length(c)+1:1:length(cstart); disp('Simplexstartecke') [fz,z,B]=Simplex(Astart,bstart,cstart,B0start); %Startecke mit Simplex B0=B(end,:) if max(B0) > length(c) disp('zulasessiger Bereich ist leer') return end %Simplex [fz,z,B]=Simplex(A,b,c,B0) end %Simplexverfahren function [fz,z,B]=Simplex(A,b,c,B0) %Initialisierung n = length(c); m = length(b); l=n-m; X = 1:n; i = 1; B(i,:) = B0; N(i,:) = setdiff(X,B(i,:)); for j = 1:m AB(:,j,i) = A(:,B(i,j)); end for j=1:l AN(:,j,i) = A(:,N(i,j)); end AA(:,:,i) = inv( AB(:,:,i) )*AN(:,:,i); zB(:,i) = inv( AB(:,:,i) )*b; z(:,i)=zeros(n,1); for j=1:m z(B(i,j),i)=zB(j,i); end fz(i) = c'*z(:,i); %Boolean fuer while-Schleife q1 = 1; %Hier gehts los while q1==1 j0=0; for j=1:l a=0; for k=1:m a = a+c(B(i,k))*AA(k,j,i); end if c(N(i,j)) - a < 0 j0=j; break end end if j0==0 %disp('Minimum bei letztem Eintrag') %z %fz %B break end v=[]; for k=1:m if AA(k,j0,i) > 0 v(length(v)+1) = k; end end if length(v)==0 disp('nach unten unbeschraenkt') quit end p=length(v); w=[]; for k=1:p w(length(w)+1) = zB(v(k),i)/AA(v(k),j0,i); end [M,I]=min(w); k0=v(I); B(i+1,:) = union(setdiff(B(i,:),B(i,k0)),N(i,j0)); N(i+1,:) = setdiff(X,B(i+1,:)); for j = 1:m AB(:,j,i+1) = A(:,B(i+1,j)); end for j=1:l AN(:,j,i+1) = A(:,N(i+1,j)); end AA(:,:,i+1) = inv( AB(:,:,i+1) )*AN(:,:,i+1); zB(:,i+1) = inv( AB(:,:,i+1) )*b; z(:,i+1)=zeros(n,1); for j=1:m z(B(i+1,j),i+1)=zB(j,i+1); end fz(i+1)= c'*z(:,i+1); i=i+1; end end