- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINGO8.0讲义剖析
LINGO基础以及在建模中的应用
LINGO是一个利用线性规划和非线性规划来简洁地阐述、解决和分析复杂问题的简便工具。LINGO还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立模型时调用,并提供与其他数据文件(如文本文件、EXCEL电子表格文件、数据库文件等)的接口,程序执行速度快,易于输入、修改、求解和分析问题。
和另外一种常用的建模语言MATLAB相比,LINGO有自己的独特的地方。在使用MATLAB表述一个数学模型问题的时候,需要将模型中的约束条件进行分类(即线性等式约束、线性不等式约束、非线性等式约束、非线性不等式约束)转化成相应的矩阵形式以及相应的M文件,如果是一个大规模的问题,还需要建立较多的M文件,而且,当问题中的某些约束条件有较小的改动的时候,会引起相应的M文件有较大的改动,这就使得MATLAB的灵活性较差。而在使用LINGO表述相同模型问题时,则只需要简单的“翻译”成相应的LINGO程序即可。同时LINGO是一个专业的求解规划问题的软件,在求解速度和求解精度上都要比MATLAB好。但是MATLAB也有自己的特点,所以读者在建模时,最好根据实际问题,恰当得混合使用这两种软件,才能达到较好的建模效果。
LINGO软件包有多种版本,但其软件内核和使用方法类似,本讲义以LINGO8.0进行简单介绍。学习本讲义,仅能够让读者能够运用LINGO8.0建模语言表述实际问题,正确理解求解过程所显示的状态,解读输出结果。作为一门建模语言,它非常灵活,不是本讲义所能完全包含的,关于程序高级方面的设置和使用,可查看帮助文件和其他的相关资料。
一 LINGO基础
?
§1 LINGO快速入门
?
当你在windows下开始运行LINGO系统时,windows应用程序一样,会得到类似下面的一个窗口:?
?
?
?
?
?
?
?
?
?
?
?
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。
1.1 如何在LINGO中求解如下的问题:
min=2*x1+3*x2;
x1+x2=350;
x1=100;
2*x1+x2=600;
保存后然后点击工具条上的按钮 即可。
例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。产销单位运价如下表。
位 销地
价
产地 B1 B2 B3 B4 B5 B6 B7 B8 产量 A1 6 2 6 7 4 2 5 9 60 A2 4 9 5 3 8 5 8 2 55 A3 5 2 1 9 7 4 3 3 51 A4 7 6 7 3 9 2 7 1 43 A5 2 3 9 5 7 2 6 5 41 A6 5 5 2 2 8 1 4 3 52 销量 35 37 22 32 41 32 43 38 ?
首先建立相应的数学模型:设为产地到销地的运量,为单位运价,为产地的产量,为销地的销量
数学模型:
,,
使用LINGO软件,编制程序如下:
model:sets:
2] AA/1..6/: a;
3] BB/1..8/: b;
4] Links(AA,BB): c, x;
5]Endsets
!数据的定义部分
6] data:
7] a=60 55 51 43 41 52;
8] b=35 37 22 32 41 32 43 38;
9] c=6 2 6 7 4 2 9 5
10] 4 9 5 3 8 5 8 2
11] 5 2 1 9 7 4 3 3
12] 7 6 7 3 9 2 7 1
13] 2 3 9 5 7 2 6 5
14] 5 5 2 2 8 1 4 3;
15] enddata
!目标函数;
16] min=@sum(links: c*x);
!需求约束;
17] @for(BB(j):
18] @sum(AA(i): x(i,j))=b(j));
!产量约束;
19] @for(AA(i):
20] @sum(BB(j): x(i,j))=a(i));
?end !程序结束的标志符
然后点击工具条上的按钮 即可。LINGO程序,程序一般以标志符model:开始,以end结束。标准的LINGO程序主体一般由四部分组成:(1)集合块,如例中的第1-5行。(2)数据块,如例中的第6-15行。(3)目标函数,如例中的第16行。(4)约束条件,如例中的第17-20行。这四个部分之间并没有严格的顺序之分,调整它们之间的次序,并不影响程序的运行,但为
文档评论(0)