化实验报告单纯形法的matlab程序lingo程序参考模板Word文档格式.docx
《化实验报告单纯形法的matlab程序lingo程序参考模板Word文档格式.docx》由会员分享,可在线阅读,更多相关《化实验报告单纯形法的matlab程序lingo程序参考模板Word文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
若
即
的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4).
(4).确定下标r,使
为离基变量。
为进基变量,用
替换
,得到新的基矩阵
,返回步骤
(1)。
对于极大化问题,可以给出完全类似的步骤,只是确定进基变量的准则不同。
对于极大化问题,应令
四、计算框图
是
否
五、计算程序
function[x,f]=zuiyouhua(A,b,c)
size(A)=[m,n];
i=n+1:
n+m;
%基变量集合,后面m个松弛变量为初始基变量;
N=1:
n;
%初始非基变量;
B=eye(m,m);
xb=b'
;
xn=zeros(m,1);
f1=0;
w=zeros(1,m);
z=-c;
%初始判别数;
flag=1;
while
(1)
[a,k]=max(z);
%x(k)为进基变量;
ifa<
=0
flag=0;
break
else
y=inv(B)*A(:
k)
ify<
fprintf('
不存在最优解'
)
end
t=find(y>
0);
[a,r1]=min(b1(t)./y(t))
r=t(r1);
%基变量中第r个变量为退基变量;
i(:
r)=k
B(:
r)=A(:
k);
%换基,即将原基中第r个变量换成第k个变量;
cb=c(:
i);
%新的价值系数;
xb=inv(B)*b;
b0=xb;
x=zeros(1,n+m)
x(:
i)=xb'
f=cb*xb
z=cb*inv(B)*A-c;
%可用z=cb*(B\A)-c,判别数.
六、数值实验及结果分析
求解线性规划问题:
在工作区输入:
A=[3,3,1,0;
-4,-4,0,1;
2,-1,0,0];
b=[30,16,12]'
c=[-3,1,0,0];
[x,f]=zuiyouhua(A,b,c)
x=
7.33332.666700056.00000
f=
-19.3333
检验结果正确
七、心得体会
通过这次试验,使我对单纯形法的计算有了更进一步的了解。
但是在编程过程中由于对matlab不是很熟悉还是遇到了很多麻烦,所以我觉得老师在让我们编程的时候不能只是简单的介绍一下算法,更要着重说明一下软件的使用方法。
这样我们在编程的时候就能更加的得心应手。
本次完全仿照老师给的程序,没有能够形成自己的东西。
自己编程的能力还是很差的,对于这种已经给出算法的程序也不能正确的编写出来。
所以在今后要加强这方面的学习。
实验二:
Lingo求解动态规划问题
通过本实验熟悉动态规划的原理,了解动态规划的应用,并能利用数学软件(Lingo)求解动态规划模型。
二、问题重述
某公司打算向他的营业区增设4个销售点,各区赚取的利润与增设的销售点个数有关,其数据为:
销售店增加数
第一区利润(万元)
第二区利润(万元)
第三区利润(万元)
第四区利润(万元)
160
190
200
250
1
310
225
298
308
2
541
445
399
487
3
600
517
601
655
4
705
632
721
674
试求各区应分配几个增设的销售书店,才能使利润最大?
其值是多少?
三、数学模型
设
为第
区增设销售点的个数,
为增设第
个点所得到的盈利。
故问题模型为:
四、计算编程
model:
sets:
quyu/1..4/;
zl/0..4/;
lirun(quyu,zl):
g,c;
endsets
data:
g=160310541600705,
190225445517632,
200298399601721,
250308487655674;
enddata
max=@sum(lirun(i,j):
g(i,j)*c(i,j));
@for(quyu(i):
@sum(lirun(i,j):
c(i,j))<
=1);
@for(lirun:
@bin(c));
(j-1)*c(i,j))=4;
End
五、计算结果
Globaloptimalsolutionfound.
Objectivevalue:
1436.000
Objectivebound:
Infeasibilities:
0.000000
Extendedsolversteps:
0
Totalsolveriterations:
VariableValueReducedCost
G(1,1)160.00000.000000
G(1,2)310.00000.000000
G(1,3)541.00000.000000
G(1,4)600.00000.000000
G(1,5)705.00000.000000
G(2,1)190.00000.000000
G(2,2)225.00000.000000
G(2,3)445.00000.000000
G(2,4)517.00000.000000
G(2,5)632.00000.000000
G(3,1)200.00000.000000
G(3,2)298.00000.000000
G(3,3)399.00000.000000
G(3,4)601.00000.000000
G(3,5)721.00000.000000
G(4,1)250.00000.000000
G(4,2)308.00000.000000
G(4,3)487.00000.000000
G(4,4)655.00000.000000
G(4,5)674.00000.000000
C(1,1)0.000000-160.0000
C(1,2)0.000000-310.0000
C(1,3)1.000000-541.0000
C(1,4)0.000000-600.0000
C(1,5)0.000000-705.0000
C(2,1)0.000000-190.0000
C(2,2)0.000000-225.0000
C(2,3)1.000000-445.0000
C(2,4)0.000000-517.0000
C(2,5)0.000000-632.0000
C(3,1)1.000000-200.0000
C(3,2)0.000000-298.0000
六、分析、检验和结论
结果中Variable列对应的
表示第
区,
表示增加
个销售点,Value列对应的0.000000表示不增加销售点,1.000000表示增加销售点。
例如C(1,3)1.000000表示第一区增加两个销售点。
行第
列对应的值。
从结果中我们知道最优解是第一区和第二区分别增加2个销售点,第三区和第四区增加0个销售点此时盈利
1436为最优值。
经过检验结果正确。
通过实验我熟悉了Lingo的使用方法,学会了用Lingo编写计算程序。
同时也掌握了分配问题的算法。
由于之前没有接触过Lingo软件,老师也没有系统的讲述Lingo的使用规则,所以我通过老师给的例题,依葫芦画瓢的写出了本问题的程序。
但是对实质性的东西还不是很了解,没有达到举一反三的地步。
仅仅只会分配法这一类问题的算法和程序,对程序中函数的具体应用还不了解。
所以我希望老师能在上实验课之前给我们讲述一下这种题型编程的注意事项,和涉及函数的具体意思,这样更有利于我们对问题的理解。
同时我也体会到自己没有主动的去学习而是被动的等待老师来讲解,从而造成了实验过程中出现了一些问题。
所以,以后要主动学习。
友情提示:
范文可能无法思考和涵盖全面,供参考!
最好找专业人士起草或审核后使用,感谢您的下载!