那天上了线性规划,老师总是说,编程怎么实现,一本天大出的薄薄的最优化方法的书,还有程序设计的步骤,我晚上就试了试,这个数组设置,是按照书上的一个例题。高兴的是单纯型表的遍历正确,但还没有最后输出最有值,当时有点困了。
B=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1];
b=[6;8;4;3];
CB=[0;0;0;0];
C=[-2;-3;0;0;0;0];
a=[ ];
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];
Bin=inv(B);
TB=[ ];%单纯型表
TB(1:4,1)=Bin*b;
TB(1:4,2:7)=A;
TB(1:4,8)=[inf;inf;inf;inf];
TB(5,1)=inf;
TB(5,2:7)=C'-CB'*Bin*A;
TB(5,8)=inf;
display(TB)%单纯型表制造完毕
while 1
p=find(TB(5,2:7)<0);%step2
if(isempty(p))
check=1;
break;
else
[out_mean,out_order]=min(TB(5,2:7));
q=find(TB(1:4,out_order+1)>0);
if(isempty(q))%step3
check=0;
break;
end
end
for i=1:4
s=out_order+1;
if TB(i,s)>0
TB(i,8)=TB(i,1)/TB(i,s)
else
TB(i,8)=inf
end
end
[in_mean,in_order]=min(TB(1:4,8));
TB(in_order,:)=TB(in_order,:)/TB(in_order,s);
for i=1:4
if i~=in_order
TB(i,1)=TB(i,1)-TB(in_order,1)*TB(i,s)/TB(in_order,s);
end
end
z=TB(5,s);
for j=2:7
TB(5,j)=TB(5,j)-z*TB(in_order,j)/TB(in_order,s);
end
for i=1:4
if i~=in_order
TB(i,2:7)=TB(i,2:7)-TB(in_order,2:7).*TB(i,s)
end
end
end