2013-2014(1)专业课程实践论文
题目:单纯形法求解线性规划
一、算法理论
对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。设初始基为B,然后执行如下步骤:
(1)解BxBb,求得xBB1b,令xN0,计算目标函数值fcBxB以bii1,2,,m记B1b的第i个分量。
(2)计算单纯形乘子w, wBCB,得到wCBB1,对于非基变量,计算判别数izicicBB1pici,令 kmaxzici,R为非基变量集合。若判别数
iRk0,则得到一个最优基本可行解,运算结束;否则,转到下一步。 (3)解Bykpk,得到ykB1pk;若yk0,即yk的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4)。
btbrmin,且ytk0, xB为离基变量。xk为进基变(4)确定下标r,使yrkt:ytk0ytk量,用Pk替换PBr,得到新的基矩阵B,返回步骤(1)。
对于极大化问题,可以给出完全类似的步骤,只是确定进基变量的准则不同。对于极大化问题,应令
ZkCkminzjcj
二、算法框图
三、算法程序
function [x,fval,it,op]=singl(c,a,b) %求解如下线性规划问题的单纯形法函数
%max cx
其中c=[c1 c2 ...cn] %s.t ax=0) %函数形式 function [x,fval,it,op]=singl(c,a,b) %输出中 x为最优解 %fval为最优值
%it为迭代次数
%无最优解 op=0
%有最优解 op=1 %初始解设为x=[zeros(1,n),ones(1,m)]; [m,n]=size(a); A=[a eye(m) b;c zeros(1,m+1)];
C=[c,zeros(1,m)]; fval=0; op=1; it=0; e=zeros(1,m); cb=zeros(1,m); for j=1:m+n
r(j)=C(j)-cb*A(1:m,j); end d=find(r>0); l=length(d); while l>0
for s=1:l
if d(s)>=n+1 & A(:,d(s))
op=0;
break
end
end
if op==1
[d1,j]=max(r);
for i=1:m
if A(i,j)>0
e(i)=A(i,end)/A(i,j);
else
e(i)=inf;
end
end
[g h]=min(e);
for w=1:m+1
if w==h
A(w,:)=A(w,:)/A(h,j);
else
A(w,:)=A(w,:)-A(h,:)*A(w,j)/A(h,j);
end
end
it=it+1;
cb(h)=C(j);
for j=1:m+n
r(j)=C(j)-cb*A(1:m,j);
end
d=find(r>0);
l=length(d);
end end for i=1:(m+n)
ix=find(A(:,i));
if(length(ix)==1)&(ix
x(i)=A(ix,end);
else
x(i)=0;
end end fval=-A(end,end);
四、算法实现
例1.用单纯形法求解
minz2x13x2,x12x210, 3x1x215,x1,x20.stx1x22,解:(1)在MATLAB界面中依次输入
c=[2 3]; a=[-1 1;1 2; 3 1]; b=[2;10;15]; [x,fval,it,op]=singl(c,a,b) (2)得到下图所示的结果(其中it为迭代次数,无最优解 op0,有最优解op1)。
(3)从图中读出最优解:x14,x23,x33,x4x50,
若把引进的松弛变量略去,则最优解为x*4,3,最优值为
Tz*17。
例2.用单纯形法求解
minstz2x13x2,x12x28,4x116,4x212,x1,x20.
解:(1)在MATLAB界面中依次输入
c=[2 3]; a=[1 2;4 0; 0 4]; b=[8;16;12]; [x,fval,it,op]=singl(c,a,b) (2)得到下图所示的结果(其中it为迭代次数,无最优解 op0,有最优解op1)。
(3)从图中读出最优解:x14,x22,x30,x40,x54,
若把引进的松弛变量略去,则最优解为x*4,2,最优值为
Tz*14。
例3.用单纯形法求解
maxstzx12x2x3,x1x2x312,2x1x2x36, x13x29,x1,x2,x30.解:(1)在MATLAB界面中依次输入
c=[1 -2 1]; a=[1 1 1;2 1 -1;-1 3 0]; b=[12;6;9]; [x,fval,it,op]=singl(c,a,b) (2)得到下图所示的结果(其中it为迭代次数,无最优解 op0,有最优解op1)。
(3)从图中读出最优解:x16,x20,x36,x40,x50,x615,
若把引进的松弛变量略去,则最优解为x*6,0,6,最优值为
Tz*12
例4.用单纯形法求解
minstz2x1x23x35x4,x12x24x3x46,2x13x2x3x412, x1x3x44x1,x2,x3,x40.解:(1)在MATLAB界面中依次输入
c=[2 1 -3 5]; a=[1 2 4 -1;2 3 -1 1; 1 0 1 1]; b=[6;12;4]; [x,fval,it,op]=singl(c,a,b) (2)得到下图所示的结果(其中it为迭代次数,无最优解 op0,有最优解op1)。
(3)从图中读出最优解:
814x10,x2,x30,x44,x5,x60,x70,
338若把引进的松弛变量略去,则最优解为x0,,0,4,最优值为
3*Tz*68。 3