摘要:本文就一个给定的线性规划模型,通过介绍优化软件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 0 0 0 12.5784 2.4216 0 0 1.6173 1.5529 21.8299 0 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功能很强大,但lingo在求解线性规划模型的计算上还是相对简便的,而且可以得到内容丰富的结果输出,在关于线性规划的实际问题分析中lingo应用得更为多些。 参考文献:
[1]田维.用matlab与lindo求解线性规划[j].德宏师范高等专科学校学报,2006,1:107-111.
[2]滕飞.应用sas/or与lingo求解优化问题的比较研究[j].吉林师范大学学报(自然科学版),2011,3:36-38.
[3]叶向.实用运筹学[m].北京:中国人民大学出版社,2006. [4]王正林,刘明.精通matalb7[m].北京:电子工业出版社,2007.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务