2022年Lingo教程 .pdf
《2022年Lingo教程 .pdf》由会员分享,可在线阅读,更多相关《2022年Lingo教程 .pdf(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、谢金星: MATLAB 优化工具箱和LINDO/LINGO 优化软件 第 69 页 共 112 页 第 69 页 共 112 页第 4 章 LINGO 软件的使用方法LINGO 8.0 for Windows软件比以前的版本有了很大的改进,功能大大增强,性能更加稳定,解答结果更加可靠。 该软件安装程序的文件大小通常20M 多一点,安装过程与LINDO 6.1 for Windows的安装过程完全类似,我们下面假设该软件已经安装完毕。同样, LINGO 8.0也有两种命令模式:一种是常用的Windows模式 , 通过下拉式菜单命令驱动LINGO 运行(多数的菜单命令通常有快捷键,常用的菜单命令在
2、工具栏中有图标表示的快捷按钮) , 界面是图形式的, 使用起来也比较方便;另一种是命令行 (Command-Line) 模式 , 仅在命令窗口(Command Window) 下操作,通过输入行命令驱动LINGO 运行,其使用界面不是图形式的,而是字符式的,初学者往往不太容易掌握。与上一章一样,我们仍然主要在 Windows菜单驱动模式下介绍LINGO 的使用方法,最后再简单介绍一下命令行模式下的主要行命令。第三章 3.1.1节说过, 从基本功能上看, 与 LINDO 相比, LINGO 软件主要有两大优点:1、 除具有 LINDO 的全部功能外,还可用于求解非线性规划问题,包括非线性整数规划
3、问题。2、 LINGO 包含了内置的建模语言,允许以简练、直观的方式描述较大规模的优化问题,模型中所需的数据可以以一定格式保存在独立的文件中。前一条是很容易理解的。那么后一条呢?从前一章的介绍中可以看到,虽然LINDO 输入模型的格式与我们数学上对数学规划的表达式非常接近,但是如果我们希望在LINDO 模型窗口下输入一个比较大规模的模型,那将是一件非常费时费力的事情。例如,如果决策变量有1000个,由于LINDO 不提供数组或类似的数据结构,我们除了用x1,x2, , x1000或类似方法表示决策变量外,完全没有其他办法。而对实际企业中的优化问题,决策变量达到几十万个也是常有的事, 显然用前面
4、那种在LINDO 模型窗口下输入模型的方法几乎是不可能的。而 LINGO 则在这方面通过引入建模语言有了很大改进. 也就是说,即使你只对解线性规划感兴趣,你也应该学习使用LINGO 。4.1 初识 LINGO 在 Windows操作系统下双击LINGO 图标, 启动 LINGO 软件, 屏幕上首先显示如图4-1所示的窗口。图 4-1名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 44 页 - - - - - - - - - 谢金星: MATLAB 优化工具箱和LINDO/
5、LINGO 优化软件 第 70 页 共 112 页 第 70 页 共 112 页图 4-1中最外层的窗口使LINGO 软件的主窗口, 所有其他窗口都在这个窗口之内。当前光标所在的窗口上标有“LINGO MODEL LING01”,这就是模型窗口,也就是用于输入优化模型的窗口。初步观察可以看到,图4-1这个界面与LINDO 软件的界面非常类似,只是在LINGO软件的主窗口中,最下面增加了一个状态行(仔细观察,可以发现菜单和工具栏也略有区别)。目前,状态行最左边显示的是“Ready ”,表示“准备就绪”;右下角显示的是当前时间,时间前面是当前光标的位置(1 行1 列)。将来,用户可以用选项命令(L
6、INGO|Options菜单命令)决定是否需要显示工具栏和状态行。作为一个最简单的例子,我们看看上一章3.2 节中输入的那个简单例子在LINGO 下应当如何输入 . 当时我们把它存入了一个名为EXAM0202.LTX的模型文件中, 为了对比LINDO 和LINGO 输入的差别, 我们现在重新用LINDO 的“File|Open” 菜单命令把它打开,看到该例子是图 4-2 所示的线性规划。图 4-2 图 4-3 在 LINGO 中,还有一个命令可以直接把LINDO 的模型文件转化成LINGO 模型。我们选择菜单命令FILE | IMPORT LINDO FILE (F12), 其意思是“导入LI
7、NDO 文件”,则屏幕上会名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 44 页 - - - - - - - - - 谢金星: MATLAB 优化工具箱和LINDO/LINGO 优化软件 第 71 页 共 112 页 第 71 页 共 112 页显示一个标准的“打开文件”的对话框,我们在目录下找到EXAM0202.LTX,选定该文件后,屏幕显示如图4-3。这个命令在LINGO主窗口中又打开了两个子窗口,一个是命令窗口(Command Window ),另一个是名为“ex
8、am0202”的模型窗口。可以看出,当前光标位于命令窗口(从主窗口左上角的显示结果也可以知道当前的活动窗口),命令窗口显示的正是从 EXAM0202.LTX读出的原始文本文件;而“exam0202” 窗口才是由EXAM0202.LTX转化而来的等价的LINGO 模型。比较图 4-2 和图 4-3 可以发现转化工作主要在于以下几个方面(这也是LINGO 模型的最基本特征):(1) 将目标函数的表示方式从“MAX ”变成了“ MAX= ”; (2) “ST”在 LINGO 模型中不再需要,所以被删除了;(3) 在每个系数与变量之间增加了运算符“* ”(即乘号不能省略);(4) 每行(目标、约束和说
9、明语句)后面均增加了一个分号“;”; (5) 约束的名字被放到了一对方括号“ ”中,而不是放在右半括号“)”之前;(6) 模型结束标志“END”也被删除了(LINGO 中只有当模型以“MODEL :”开始时才能以“ END ” 结束)。注意:在上一章的最后,我们曾经用行命令“SAVE ”把同样的LINDO模型存入了一个名为 MODEL01.LTX的模型文件中。 但是经过试验, 笔者发现菜单命令FILE | IMPORT LINDO FILE (F12) 不能把 MODEL01.LTX正确地转化成LINGO 模型。即使对于在LINDO中用菜单命令保存下来的模型,笔者也多次发现有时不能正确地转化(
10、转化时出现严重错误)。因此,本人的经验是: 为了保证将来能将LINDO 模型移植到LINGO 中去,在 LINDO 模型输入时应尽量采用“规范化”的格式(例如:说明语句最好单独占据一行;行名(目标和约束的名字)不要以数字开头;尽量避免少出现汉字和非标准的英文字符;二次规划(QP)模型不能被正确转化;等等)。无论如何,幸运的是我们的LINGO 模型“ exam0202”已经成功地得到了。现在把光标移动到“ exam0202” 模型窗口,然后选择菜单命令“LINGO|SOLVE ”对该模型进行求解(求解时 LINGO 自然还是先对模型进行编译,模型编译没有发现语法错误才开始求解);求解结束得到的结
11、果与LINDO 下得到的结果相同(但不询问是否进行敏感性分析),结果仍然在报告窗口中显示(这里我们就不给出这个报告窗口的示意图了)。图 4-4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 44 页 - - - - - - - - - 谢金星: MATLAB 优化工具箱和LINDO/LINGO 优化软件 第 72 页 共 112 页 第 72 页 共 112 页现在我们可以把模型和结果报告保存在文件中。例如,当光标位于“exam0202” 模型窗口时选择菜单命令“Fil
12、e|Save As ”,则出现图4-4 所示的对话框。后缀“LG4”表示 LINGO格式的模型文件,是一种特殊的二进制格式文件,保存了我们在模型窗口中所能够看到的所有文本和其他对象及其格式信息,只有LINGO 能读出它,用其他系统打开这种文件时会出现乱码。“ LNG ”表示 LINGO 文本文件,以这个格式保存模型时LINGO 将给出警告,因为模型中的格式信息(如字体、颜色、嵌入对象等)将会丢失。“LDT ”表示 LINGO 数据文件,“LTF ”表示 LINGO 命令脚本文件,“LGR ”表示 LINGO 报告文件。除“LG4”文件外,这里除“ LG4”格式外的文件其实都是普通的文本文件,可
13、以用任何文本编辑器打开和编辑。图 4-5 求解时也会显示状态窗口(如图4-5 所示),包含的内容比LINDO 求解时的状态窗口中的内容要多一些 (注意: 可能由于 LINDO 和 LINGO 对中文 WINDOWS系统的兼容性不太好,所以图 4-5 中有些显示字符和单词被截掉了)。下面我们给出相应的解释:右边的5 个框分别给出变量数量(其中包括变量总数、非线性变量数、整数变量数)、约束数量(约束总数、非线性约束个数)、非零系数数量(总数、非线性项的个数)、内存使用量、求解花费的时间。需要注意的是,凡是可以从一个约束直接解出变量取值时,这个变量就不认为是决策变量而是固定变量,不列入统计中;只含有
14、固定变量的约束也不列入约束统计中(参见第三章3.1.3 节的说明)。总的来说,这些统计值的意义比较清楚,图4-5 中最下面一行的含义也与LINDO状态窗口类似,我们下面主要详细介绍一下图4-5 左边的两个框中内容。左上角是求解器(求解程序) 状态框 (Solver Status),含义见表4-1;左下角是扩展的求解器(求解程序)状态框( Extended Solver Status),含义见表4-2。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 44 页 - - - -
15、 - - - - - 谢金星: MATLAB 优化工具箱和LINDO/LINGO 优化软件 第 73 页 共 112 页 第 73 页 共 112 页域名含义可能的显示Model Class 当前模型的类型 (请参阅前面章节)LP,QP,ILP,IQP,PILP, PIQP ,NLP,INLP ,PINLP (以 I 开头表示IP,以 PI 开头表示PIP)State 当前解的状态Global Optimum, Local Optimum, Feasible, Infeasible (不可行), Unbounded (无界) , Interrupted (中断) , Undetermined
16、(未确定)Objective 当前解的目标函数值实数Infeasibility 当前约束不满足的总量(不是不满足的约束的个数)实数(即使该值 =0,当前解也可能不可行,因为这个量中没有考虑用上下界形式给出的约束)Iterations 目前为止的迭代次数非负整数表 4-1 域名含义可能的显示Solver Type 使用的特殊求解程序 B-and-B (分枝定界算法)Global (全局最优求解程序)Multistart (用多个初始点求解的程序)Best Obj 目前为止找到的可行解的最佳目标函数值实数Obj Bound 目标函数值的界实数Steps 特殊求解程序当前运行步数:分枝数(对 B-a
17、nd-B 程序);子问题数(对 Global 程序);初始点数(对Multistart程序)非负整数Active 有效步数非负整数表 4-2 作为一个例子,我们现在再用LINGO 来解第 1 章 1.4节给出的如下二次规划问题:Max 98 x1 + 277 x2 x12 0.3 x1 x2 2x22s.t. x1 + x2 100 x1 2 x2 x1 , x2 0 为整数该模型输入LINGO1 模型窗口后的形式见图4-6。对照第3 章 3.6节,我们可以看出用LINGO 解 QP 比用 LINDO 解要容易输入模型。注意:原来的整数限定语句“GIN X1”和“GIN X2”这里变成了“GI
18、N(X1) ”和“ GIN(X2) ”;但在 LINDO 下也可以写成“GIN 2 ”,这里却不可写成“GIN(2) ”,否则 LINGO 将把这个模型看成没有整数变量。在LINGO 中,以“ ”开头的都是函数调用,我们将在本章4.5 节详细介绍LINGO 中能够使用的所有函数。图 4-6 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 44 页 - - - - - - - - - 谢金星: MATLAB 优化工具箱和LINDO/LINGO 优化软件 第 74 页 共 1
19、12 页 第 74 页 共 112 页图 4-7 现在运行菜单命令“LINGO|Solve ”,则可以得到图4-7 所示的解答报告,最优整数解X=(35 ,65 ),最大利润 =11077.5。结果中最优整数解与第3 章 3.6节相同,但最优值略有不同,估计是计算误差引起的。此外,LINGO 是将它作为PINLP (纯整数非线性规划)来求解,因此只告诉我们找到的是局部最优解(为什么LINGO 不将它作为PIQP(纯整数二次规划)来求解?本人也不清楚)。你还可以选择运行菜单命令“WINDOW|Status Window”看到图 4-8 所示的状态窗口(这时我们已经把该规划模型保存到了文件IQP0
20、302B.LG4 中,所以这个名字现在也出现在状态窗口中),从中可以看到目前为止找到的最佳目标值“Best Obj”与问题的上界“Obj Bound ”已经是一样的,当前解的最大利润与这两个值非常接近,估计是计算误差引起的差异。 实际上,如果采用全局最优求解程序(我们将在后面介绍 “LINGO|Options ”菜单命令时介绍如何激活全局最优求解程序),可以验证它就是全局最优解。图 4-8 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 44 页 - - - - - -
21、- - - 谢金星: MATLAB 优化工具箱和LINDO/LINGO 优化软件 第 75 页 共 112 页 第 75 页 共 112 页在本节的最后,我们对LINGO 的基本用法指出几点注意事项:1)变量和行名可以超过8 个字符,但不能超过32 个字符,且必须以字母开头。2)与 LINDO 相同,用LINGO 解规划时已假定各变量非负(除非用限定变量取值范围的函数free或sub 或slb 另行说明)。3)与 LINDO 不同,变量可以放在约束条件的右端(同时数字也可放在约束条件的左端)。但为了提高LINGO 求解时的效率, 应尽可能采用线性表达式定义目标和约束(如果可能) 。4.3 在
22、LINGO 中使用集合4.3.1 集合的基本用法我们前面说过,LINGO同时也是优化问题的一种建模语言。有了它,使用者可以只用键入一行文字就可以建立起含有大规模变量的目标函数和成千上万条约束。掌握这种最优化模型语言是非常重要的,与LINDO 相比,这可使输入较大规模问题的过程得到简化。理解 LINGO 建模语言最重要的是理解“集合”(SET)及其“属性”(Attribute)的概念。什么是集合呢?我们通过下面的一个简单例子开始来进行介绍。例: SAILCO公司需要决定下四个季度的帆船生产量。下四个季度的帆船需求量分别是40 条, 60 条, 75 条, 25 条,这些需求必须按时满足。每个季度
23、正常的生产能力是40 条帆船,每条船的生产费用为400 美元。如果加班生产,每条船的生产费用为450 美元。每个季度末,每条船的库存费用为20 美元。假定生产提前期为0,初始库存为10 条船。如何安排生产可使总费用最小?我们用 DEM,RP,OP,INV分别表示需求、正常生产的产量、加班生产的产量、库存量,则 DEM,RP,OP,INV对每个季度都应该有一个对应的值,也就说他们都应该是一个由4 个元素组成的数组,其中DEM是已知的,而RP,OP,INV是未知数。现在我们可以写出这个问题的模型。首先,目标函数是所有费用的和:MIN =+4,3, 2, 1)(20)(450)(400IIINVIO
24、PIRP约束条件主要有两个:1)能力限制:RP(I)1 ;“ #GT# ”是逻辑运算符号,意思是“大于”(其他逻辑运算符将在本章后面3.4节介绍)。QUARTERS 集合的属性DEM RPOP INV QUARTERS 集合234 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 44 页 - - - - - - - - - 谢金星: MATLAB 优化工具箱和LINDO/LINGO 优化软件 第 77 页 共 112 页 第 77 页 共 112 页现在运行菜单命令“
25、LINGO|Solve ”,则可以得到图4-11 所示的解答报告,全局最优解RP=(40 ,40 ,40 , 25 ), OP=(0,10 ,35 ,0),最小成本=78450 。这就是我们模型的计算结果。图 4-11 一般来说, LINGO中建立的优化模型由四个部分组成,或称为四“段”(SECTION ):(1)集合段( SETS):这部分要以 SETS: 开始,以 ENDSETS结束,作用在于定义必要的集合变量 (SET)及其元素 (MEMBER ,含义类似于数组的下标)和属性(ATTRIBUTE ,含义类似于数组)。如上例中定义了集合quarters(含义是季节),这里它包含四个元素即四
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年Lingo教程 2022 Lingo 教程
限制150内