运用Lingo和Matlab软件求解线性规划问题比较

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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功能很强大,

相关文档
最新文档