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

时间:2022-10-15 10:02:12

运用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

1 Lingo求解线性规划

1.1 Lingo软件简介 Lindo和Lingo是美国 Lindo系统公司开发的一套专门用于求解最优化问题的软件包。Lindo 用于求解线性规划和二次规划问题,Lingo除了具有Lindo的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解等等。

1.2 Lingo中求解线性规划的命令介绍 按照Lingo语法规则,要求计算的模型首行以Max 或Min 开始,并按线性规划问题的自然形式录入,程序最后以end结束.程序中,不区分变量中的大小写字符,注释使用“!”来引导,约束条件中的“≥”与“≤”以“>”“

1.3 Lingo求解上述线性规划的具体实现 Lingo程序1:

min=10.8*x11+10.95*x12+11.1*x13+11.25*x14+11.1*

x22+11.25*x23+11.4*x24+11*x33+11.15*x34+11.3*x44;

x11+x12+x13+x14

x22+x23+x24

x33+x34

x44

x11=10;

x12+x22=15;

x13+x23+x33=25;

x14+x24+x34+x44=20。

运行后,得(Lingo的输出结果很丰富,但由于版面限制,此处仅摘取部分):

Objective value: 773.0000

Variable Value

X11 10.00000

X12 15.00000

X13 0.000000

X14 0.000000

X22 0.000000

X23 0.000000

X24 5.000000

X33 25.00000

X34 5.000000

X44 10.00000

即最优解为x11=10、x12=15、x24=5、x33=25、x34=5、x44=10,其余都是0,最优值为773.

下面介绍运用Lingo中提供的集合定义形式来重新编写程序.

Lingo程序2:

sets:

warehouse/1..4/: capacity;

vendors/1..4/: demand;

links(warehouses,vendors): c,x;

endsets

min=@sum(links: c*x);!目标函数;

@for(warehouses(i):@sum(vendors(j): x(i,j))

capacity(i));

@for(vendors(j):@sum(warehouses(i): x(i,j))=

demand(j));

data: !变量的赋值;

capacity=25 35 30 10;

demand=10 15 25 20;

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;

x=,,,,0,,,,0,0,,,0,0,0,;!x21=x31=x32=x41=x42=x43=0;

enddata

end

运行后,得(仅摘取部分输出结果):

X(1,1) 10.00000

X(1,2) 15.00000

X(1,3) 0.000000

X(1,4) 0.000000

X(2,1) 0.000000

X(2,2) 0.000000

X(2,3) 0.000000

X(2,4) 5.000000

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功能很强大,但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.

上一篇:浅析美国情景剧在中国的跨文化传播及其影响 下一篇:对高职院校学生心理健康问题的探讨