现在的位置: 首页 > 综合 > 正文

线性规划(matlab实现)

2014年01月15日 ⁄ 综合 ⁄ 共 1046字 ⁄ 字号 评论关闭

那天上了线性规划,老师总是说,编程怎么实现,一本天大出的薄薄的最优化方法的书,还有程序设计的步骤,我晚上就试了试,这个数组设置,是按照书上的一个例题。高兴的是单纯型表的遍历正确,但还没有最后输出最有值,当时有点困了。

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

 

抱歉!评论已关闭.