运用Lingo和Matlab软件求解线性规划问题比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运用Lingo和Matlab软件求解线性规划问题比较运用Lingo和Matlab软件求解线性规划问题的比较研究摘要:本文就一个给定的线性规划模型,通过介绍优化软件lingo和科学计算软件matlab中求解线性规划问题的命令和函数,指出lingo软件在求解线性规划问题上占有一定优势。
关键词:线性规划 lingo软件 matlab软件最优解
线性规划由前苏联经济学家康托洛维奇提出,它主要研究的是在线性等式(或不等式)约束条件下,使某一线性目标函数取得最大值(或最小值)的问题。随着计算机技术的发展,借助软件可以快速对线性规划问题进行求解和分析。目前,能够求解规划问题的数学软件比较多,常见的有优化软件lingo和科学计算软件matlab。
本文以如下线性规划为例,分别利用这二种软件来求解,并就它们在求解线性规划上的差异进行对比分析。
minz=10.8x11+10.95x12+11.1x13+11.25x14+11.1x22+
11.25x23+11.4x24+11x33+11.15x34+11.3x44;
s.t.x11+x12+x13+x14”“x(3,1) 0.000000
x(3,2) 0.000000
x(3,3) 25.00000
x(3,4) 5.000000
x(4,1) 0.000000
x(4,2) 0.000000
x(4,3) 0.000000
x(4,4) 10.00000
显然最优解同上,只是输出格式不同而已。
2 matlab求解线性规划
2.1 matlab软件简介目前,matlab提供了四十多个工具箱,这些工具箱专门针对某些具体应用领域。matlab优化工具箱中提供了linprog函数来求解线性规
划问题。
2.2 matlab求解线性规划的命令介绍 matlab中一般使用“[ ]”、“,”或空格以及“;”来创建数组,“[ ]”中给出数组的所有元素,同行间的元素用“,”或者空格隔开,不同行之间用分号“;”隔开,并且用符号“?”置于矩阵右上角表示矩阵的转置运算。
linprog函数的常见形式如下:
形式1:x=linprog(f,a,b)
用于求解目标函数为minf′*x ,约束条件为a*x?b的线性规划问题。其中x
表示最优解,f 表示价值列向量,a表示约束不等式中的系数矩阵(二维数组),
b(列向量)表示约束不等式中右端资源常数向量。
形式2:[x,fval]=linprog(c,a,b,aeq,beq)
相比较上面的问题,增加了等式约束,即aeq*x=beq。其中x、c、a、b含义同上,fval表示最优解对应的目标函数值。若没有不等式存在,则令a=[]、b=[].
形式3:[x,fval]=linprog(c,a,b,aeq,beq,vlb,vub)
增加了决策变量的上下界约束,即vlb?x?vub,其中vlb、vub分别以列向量形式存储。如果没有不等式约束,令a=[]和b=[];
若没有等式约束,则令aeq=[]、beq=[].
2.3 matlab求解上述线性规划的具体实现
matlab程序如下:
>> clear
c=[10.8 10.95 11.1 11.25;0 11.1 11.25 11.4;0 0 11 11.15;0 0 0 11.3];
a=[1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1];
b=[25;35;30;10];
aeq=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1];
beq=[10;15;25;20];
f=c(:); %把f变成列向量
vlb=zeros(16,1); %确定决策变量的下界
vub=[inf 0 0 0 inf inf 0 0 inf inf inf 0 inf inf inf inf]; %通过取上下界值都为0,保证决策变量x21=x31=x41
=x32=x42=x43=0
[x,fval]=linprog(f,a,b,aeq,beq,vlb,vub)
运行后,得结果:
x =10.0000
12.5784
2.4216
1.6173
1.5529
21.8299
0.8044
1.0255
8.1701
10.0000
fval =773.0000
即最优解为x11=10,x12=12.5784,x13=1.6173,x14=
0.8044,x22=2.4216,x23=1.5529,x24=1.0255,x33=21.8299,
x34=8.1701,x44=10,最优值为773。
3 小结
通过以上介绍,我们发现不管是使用lingo还是matlab软件,计算的最优值
都是一样的,但最优解有些差异,而且求解的程序在形式上有较大差异。lingo程序中,第一种方法的结构形式简单,符合原规划问题中的书写习惯,初学者容易上手,但可拓展性不强,而且对于规模较大、变量数较多的问题编程比较费时费力,对于非线性规划问题使用更是不便。第二种方法使用集合的概念,程序易于扩展,尤其在求解规模较大的问题时优势明显。相比较而言,matlab中的矩阵(二维数组)的输入规律稍难理解些,而且输出结果也不如lingo那么直接明了。另外,
linprog命令只能求一般的线性规划,而不能求整数线性规划,因为matlab没有
内置命令求解整数线性规划,如果要解,需要自己编算法实现。这种算法的编制,对普通的软件使用者来说受到一定的约束。总的来说,尽管matlab功能很强大,