实验1解线性规划.docx
- 文档编号:23221719
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:12
- 大小:65.94KB
实验1解线性规划.docx
《实验1解线性规划.docx》由会员分享,可在线阅读,更多相关《实验1解线性规划.docx(12页珍藏版)》请在冰豆网上搜索。
实验1解线性规划
实验报告
求解线性规划实验(运筹学与最优化方法,4学时)
一实验目的
掌握线性规划的求解,会用单纯形法法、大M法解线性规划。
二实验内容
1用单纯形法解线性规划:
2用大M法解线性规划:
3.解下列线性规划,考虑其是哪一种特殊情况。
(1)
(无解)
(2)
(没有边界)
(3)
(多个最优解)
(4)
三实验步骤(算法)与结果
1解:
程序如下:
A=input('A=');
b=input('b=');
c=input('c=');
E=input('E(单位矩阵)=');
y0=input('y0=');
d=input('d=');
N=10000;
B=[A,E,b;c,d];
[m,n]=size(B);
C=[c,d];
x=zeros(1,length(c));
fork=1:
N
z=B(:
end);
forj=1:
n-1
t(j)=y0*B(:
j)-C(j);
end
fori=1:
n-1
ift(i)==0&&sum(abs(B(:
i)))~=1
disp('此目标规划有无数个最优解')
end
end
minf=y0*z;
[~,q]=max(t);
W(k)=q;
forp=1:
m-1
ifB(p,W(k))<=0
r(p)=N;
elser(p)=z(p)/B(p,W(k));
end
end
[~,p]=min(r);
y0(p)=C(q);
B(p,:
)=B(p,:
)/B(p,q);
fori=1:
m
ifi~=p
B(i,:
)=B(i,:
)-B(p,:
)*B(i,q);
end
end
ifmax(t)<=0
break;
end
end
D=[B;-t-minf];
fori=1:
n-1
ifD(m+1,i)==0
forj=1:
m
ifD(j,i)==1
x(1,i)=D(j,n);
end
end
end
end
ifmin(B(1:
m-1,n))==0
disp('此目标规划的解退化')
end
x=x(1,1:
length(c)),minf
运行结果如下:
DCXF
A=[-1,1;1,2;3,1];
b=[2,10,15]';
c=[-2,-3];
E(单位矩阵)=[1,0,0;0,1,0;0,0,1];
y0=[0,0,0,0];
d=[0,0,0,0];
输出结果为:
x=
43
minf=
-17
2.解:
程序如下:
function[x,minf]=DMF(A,c,b,baseVector,Mvector)
sz=size(A);
nVia=sz
(2);
n=sz
(1);
xx=1:
nVia;
nobase=zeros(1,1);
m=1;
ifc>=0
vr=find(c~=0,1,'last');
rgv=(A(:
(nVia-n+1):
nVia))\b;
ifrgv>=0
x=zeros(1,vr);
minf=0;
else
disp('不存在最优解');
x=NaN;
minf=NaN;
return;
end
end
fori=1:
nVia
if(isempty(find(baseVector==xx(i),1)))
nobase(m)=i;
m=m+1;
else
end
end
bCon=1;
M=0;
B=A(:
baseVector);
invB=inv(B);
whilebCon
nB=A(:
nobase);
ncb=c(nobase);
B=A(:
baseVector);
cb=c(baseVector);
xb=B\b;
w=cb/B;
fori=1:
length(nobase)
sigma(i)=w*nB(:
i)-ncb(i);
end
[maxs,ind]=max(sigma);
ifmaxs<=0
minf=cb*xb;
vr=find(c~=0,1,'last');
forl=1:
vr
ele=find(baseVector==l,1);
if(isempty(ele))
x(l)=0;
else
x(l)=xb(ele);
end
end
bCon=0;
else
y=B\A(:
nobase(ind));
ify<=0
disp('此目标规划没有边界');
x=NaN;
minf=NaN;
return;
else
minb=inf;
chagB=0;
forj=1:
length(y)
ify(j)>0
bz=xb(j)/y(j);
ifbz minb=bz; chagB=j; end end end tmp=baseVector(chagB); baseVector(chagB)=nobase(ind); nobase(ind)=tmp; forj=1: chagB-1 ify(j)~=0 invB(j,: )=invB(j,: )-invB(chagB,: )*y(j)/y(chagB); end end forj=chagB+1: length(y) ify(j)~=0 invB(j,: )=invB(j,: )-invB(chagB,: )*y(j)/y(chagB); end end invB(chagB,: )=invB(chagB,: )/y(chagB); end end M=M+1; if(M==1000000) disp('找不到最优解'); x=NaN; minf=NaN; return; end end fori=1: length(Mvector) ifx(Mvector(i))~=0 x=NaN; minf=NaN; disp('此目标规划无解'); end end 运行如下: 3.解: 后面的题选用matlab自带求解函数求解,以熟悉matlab的最优化求解操作; (1)首先建立目标函数文件夹: functionf=F(x) f=-50*x (1)+40*x (2); 在运行窗口输入: x0=[1,1]; A=[3,5;0,1;8,5;-1,-1]; b=[150;20;300;-50]; lb=[0;0]; [x,f]=fmincon('F',x0,A,b,[],[],lb,[],[]) 运行得: x= 29.937312.2257 f= -1.9859e+03 但是注意到运行结果提示: Nofeasiblesolutionfound. 也就是说这个优化问题没有最有解。 (2)建立目标函数文件: functionf=F(x) f=-20*x (1)-10*x (2); 在运行窗口输入: x0=[1,1]; A=[-1,0;0,1]; b=[-2;5]; lb=[0;0]; [x,f]=fmincon('F',x0,A,b,[],[],lb,[],[]) 输出结果为: x= 1.0e+18* 8.11480.0000 f= -1.6230e+20 提示是: Problemappearsunbounded. 也就是说目标函数无边界。 (3)建立目标函数文件: functionf=F(x) f=-30*x (1)-50*x (2); 在运行窗口输入: x0=[1,1]; A=[3,5;0,1;8,5]; b=[150;20;300]; lb=[0;0]; [x,f]=fmincon('F',x0,A,b,[],[],lb,[],[]) 输出结果为: x= 16.676419.9942 f= -1.5000e+03 提示为: Localminimumfoundthatsatisfiestheconstraints. 满足局部的最小值,也就是目标函数有多个最优解。 (4)建立目标函数文件: functionf=F(x) f=-50*x (1)-40*x (2); 在运行窗口输入: x0=[1,1]; A=[3,5;0,1;8,5]; b=[175;20;300]; lb=[0;0]; [x,f]=fmincon('F',x0,A,b,[],[],lb,[],[]) 输出结果和第(3)一样。 四实验收获与教师评语 收获: 运用自己编写的程序来解题确实不够完善,只能针对部分类型的题目,与软件本身设计的函数有很大不同。 通过这次实验发现自己的编译能力还是很差,很多问题找不到在哪,怎么解决,于是在参考同学后得以解决。 最后通过软件自带函数解决问题熟悉软件的操作收益也是良多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 线性规划