%单纯形法解线性规划(求解《最优化方法》(天津大学出版社)55页例2.5.1)
%算法根据最优化方法(天津大学出版社)53页算法2.4.1编写
%v1.0 author: liuxi BIT
clc
clear
fprintf('系数矩阵:/n')
A=[1 1 1 0 0 0; 1 2 0 1 0 0;1 0 0 0 1 0;0 1 0 0 0 1]
fprintf('资源向量,即右端项:/n')
b=[6 8 4 3]'
fprintf('成本系数(价格系数)向量:/n')
c=[-2 -3 0 0 0 0]'
[m n]=size(A);
Lb=[3:6];%初始基变量的位置(人为设定)
Ln=[1:2];%初始非基变量的位置
count=1;%循环计数
while count
B=A(:,Lb);%基矩阵
N=A(:,Ln);%非基矩阵
cB=c(Lb);
cN=c(Ln);
B_inv=inv(B);%B的逆矩阵
fprintf('*****************第%d次迭代********************/n',count)
fprintf('判别数为:')
sigma=cN'-cB'*B_inv*N
if sigma>=0%step2
fprintf('判别数全都大于等于0/n')
X=zeros(n,1);
XB=B_inv*b;
X(Lb)=XB;
fprintf('此时有最优解,为'),X
fprintf('最优值为fmin=%4.2f。/n',c'*X)
break
else%step3
[sigma_min index1]=min(sigma);
k=Ln(index1);
fprintf('最小判别数sigma(%d)=%d/n',k,sigma_min)
Ak=B_inv*A(:,k);
[Ak_max index2]=max(Ak);
fprintf('此时有可行解:/n')
XB=B_inv*b
fprintf('相应的目标函数值为%d/n',c(Lb)'*XB)
if Ak_max<=0
fprintf('进基变量系数全都小于等于0,此时该问题没有最优解。/n')
break
else
temp=XB(index2)/Ak(index2);
for i=1:m
if Ak(i)>0
if temp>XB(i)/Ak(i)
temp=XB(i)/Ak(i);
index2=i;
end
end
end
l=Lb(index2);
end
count=count+1;
Lb(index2)=k;
Ln(index1)=l;
fprintf('x(%d)进基,x(%d)出基/n/n/n',k,l)
end
end