%求解标准型线性规划:maxc*x;s.t.A*x=b;x=0%A1是标准系数矩阵及最后一列是资源向量,C是目标函数的系数向量%N是(初始的)基变量的下标%M=10000人工变量系数%本函数中的A是单纯形表,包括:最后一行是初始的检验数,最后一列是资源向量b%c1是基变量系数%输出变量sol是最优解%输出变量val是最优值,k是迭代次数%flag1的值代表有无最优解,0无界解,1无可行解,2无穷多解,3唯一最优解function[sol,val,k,flag1]=ssimplex(A1,C,N)M=10000;[mA1,nA1]=size(A1);C1=[C,0];val=zeros(1,length(C));fori=1:length(N)c1(i)=C1(N(i));endfori=1:nA1a(i)=C1(i)-c1*A1(:,i);%计算初始检验数endA=[A1;a];%构造初始单纯形表[mA,nA]=size(A);k=0;%迭代次数flag=1;whileflagfori=1:(nA-1)ifA(mA,i)=0flag=0;elseflag=1;break;endendifflag==0%已找到最优解val1=A(1:(mA-1),nA)';fori=1:length(N)if(val1(i)~=0&&abs(C(N(i)))==M)disp('无可行解');sol=inf;val=inf;flag3=0;flag1=1;break;elseflag3=1;endendifflag3iflength(find(A(mA,1:(nA-1))==0))length(N)disp('存在无穷多最优解');flag1=2;elsedisp('存在最优解');flag1=3;endsol=c1*val1';endelseifflag==1forj=1:(mA-1)ifA(j,i)=0flag2=1;elseflag2=0;break;endendifflag==1&&flag2==1disp('此线性规划问题存在无界解');sol=inf;val=inf;flag1=0;flag=0;%跳出while循环break;endmaxq=max(A(mA,1:(nA-1)));[m,nb]=find(A(mA,:)==maxq);%确定入基变量的纵坐标fors=1:(mA-1)ifA(s,nb)0temp(s)=A(s,nA)/A(s,nb);elsetemp(s)=10000;endendk=k+1;mino=min(temp);[n,mb]=find(temp==mino);%确定入基变量的横坐标iflength(mb)1mb=mb(1);endab=A(mb,nb);A2=A;fori=1:(mA-1)forj=1:nAifi==mbA(mb,j)=A2(mb,j)/ab;elseA(i,j)=A2(i,j)-A2(i,nb)*(A2(mb,j)/ab);endendendfori=1:length(N)ifi==mbN(i)=nb;endendfori=1:length(N)c1(i)=C(N(i));endfori=1:nAA(mA,i)=C1(i)-c1*A(1:(mA-1),i);endendendifsol~=inffori=1:length(C)forj=1:length(N)ifi==N(j)val(i)=val1(j);endendendend