当前位置:文档之家› Lingo软件的使用

Lingo软件的使用

第十八章LINGO软件的使用18.1 LINGO入门18.1.1 LINGO软件的安装过程点击LINGO9.0 for Windows安装文件,出现点击“Next”按钮,出现此时需要接受安装协议。

系统安装时默认的目录是C:\LINGO9。

安装完成前,会出现下图所示的对话框:这个对话框询问你希望采用的默认的建模(即编程)语言,系统推荐的是采用LINGO语法,也就是选项“LINGO(recommended)”;你也可以选择“LINDO”将LINDO语法作为默认的设置。

当然,安装后你也可以通过“LINGO|Options|File Format命令来修改默认的建模(即编程)语言。

在上图中按下“OK”按钮,系统就会完成LINGO的安装过程。

18.1.2 LINGO基础知识LINGO有两种命令格式:一种是常用的Windows模式,通过下拉式菜单命令驱动LINGO 运行,界面是图形式的,使用起来也比较方便;另一种是命令行(Command-Line)模式,仅在命令窗口(Command Window)下操作,通过输入行命令驱动LINGO运行。

由于其使用字符方式输入,初学者往往不太容易掌握。

在这里,我们主要介绍在菜单驱动模式下LINGO的使用方法。

LINGO 9.0软件比以前的版本有了很大的改进,功能大大增强,性能更加稳定,计算的结果更加可靠。

LINGO软件不仅可用于求解非线性规划问题,还可以用以求解非线性整数规划问题;LINGO包含了内置的建模语言,模型中所需的数据可以以一定格式保存在独立的文件中;LINGO允许以简练、直观的方式描述较大规模的优化问题。

注:LIGDO公司目前已将LINDO软件从其产品中删除了。

事实上,LINDO软件的所有功能(包括LINDO语法格式)都在LINGO中得到了支持。

当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。

在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。

状态行最左边显示的是“Ready”表示“准备就绪”;右下角显示的是当前时间,时间前面是当前光标的位置“Ln1,Col1”(即1行1列)。

将来,用户可以用选项命令(LINGO|Options菜单命令)决定是否需要显示工具栏和状态行。

在LINGO 模型窗口中,选择菜单命令“File|Open(F3)”,可以看到下图所示的标准的“打开文件”对话框,我们看到有各种不同的“文件类型”:● 后缀“lg4”表示LINGO 格式的模型文件,是一种特殊的二进制格式文件,保存了我们在模型窗口中所能够看到的所有文本和其他对象及其格式信息,只有LINGO 能读出它,用其他系统打开这种文件时会出现乱码;● 后缀“lng ”表示文本格式的模型文件,并且以这个格式保存模型时LINGO 将给出警告,因为模型中的格式信息(如字体、颜色、嵌入对象等)将会丢失;● 后缀“ldt ”表示LINGO 数据文件;● 后缀“ltf ”表示LINGO 命令脚本文件;● 后缀“lgr ”表示LINGO 报告文件;● 后缀“ltx ”表示LINGO 格式的模型文件;● 后缀“mps ”表示MPS(数学规划系统)格式的模型文件;● “*.*”表示所有文件除“lg4”文件外,这里的另外几种格式的文件其实都是普通的文本文件,可以用任何文本编辑器打开和编辑。

18.1.3二个简单的LINGO 程序下面举两个例子说明如何在LINGO 中如何进行规划问题求解。

例1.1求解如下的LP (线性规划)问题:12min 23x x +..s t12350x x +≥1100x ≥122600x x +≤12,0x x ≥在模型窗口中输入如下代码:min=2*x1+3*x2;x1+x2>=350;x1>=100;2*x1+x2<=600;如下图所示:注:(1)LINGO中不区分大小写字母,变量(和行名)可以使用不超过32个字符表示,且必须以字母开头。

(2)LINGO中模型以“MODEL:”开始,以“END”结束。

对简单的模型,这两个语句也可以省略。

(3)LINGO中的语句的顺序是不重要的,因为LINGO总是根据“MAX=”或“MIN=”语句寻找目标函数,而其它语句都是约束条件(当然注释语句和TITLE除外)。

(4)LINGO模型是由一系列语句组成,每个语句以分号“;”结束。

(5)LINGO中以感叹号“!”开始的是说明语句(说明语句也需要以分号“;”结束)。

(6)LINGO中解优化模型时假定所有变量非负(除非用限定变量取值范围的函数@free或@sub或slb另行说明)。

然后点击工具条上的按钮得到:下面对上图的各个部分进行说明。

Solution Report(LINGO的结果报告窗口)Global optimal solution found 表示全局最优解找到.Objective value: 800.0000 表示最优目标值为800.0000.Total solver iterations: 2 表示用单纯行法进行了两次迭代.Variable 表示变量, 此问题中有两个变量X1, X2.Value 给出最优解中各变量(Variable)的值: X1=250.0000, X2=100.0000.Reduced Cost 给出最优的单纯形表中目标函数行中变量对应的系数. 其中基变量的Reduced Cost值一定为0;对于非基变量(非基变量本身的取值一定为0)和max问题,相应的Reduced Cost值表示当该非基变量增加一个单位(其它非基变量保持不变)时目标函数的减少的量.在这个例子中最优解中两个变量都是基向量, 因此对应的ReducedCost的值都为0.Slack or Surplus (松弛或剩余)给出约束对应的松弛变量的值:第2和第4行松弛变量均为0,说明对于最优解来讲,两个约束(第2和4行)均取等号,即都是紧约束.Dual Price 给出对偶价格(也称影子价格)的值.例1.2某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。

生产数据如下表所示:若要求桌子的生产量不超过5件,如何安排三种产品的生产可使利润最大?用DESKS、TABLES和CHAIRS分别表示三种产品的生产量,建立LP模型。

max=60*desks+30*tables+20*chairs;8*desks+6*tables+chairs<=48;4*desks+2*tables+1.5*chairs<=20;2*desks+1.5*tables+.5*chairs<=8;tables<=5;求解这个模型,查看报告窗口(Reports Window),如下图:可以看到如下结果。

Global optimal solution found at iteration: 3Objective value: 280.0000Variable Value Reduced CostDESKS 2.000000 0.000000TABLES 0.000000 5.000000CHAIRS 8.000000 0.000000Row Slack or Surplus Dual Price1 280.0000 1.0000002 24.00000 0.0000003 0.000000 10.000004 0.000000 10.000005 5.000000 0.000000“Global optimal solution found at iteration: 3”表示3次迭代后得到全局最优解。

“Objective value:280.0000”表示最优目标值为280。

“Value”给出最优解中各变量的值:造2个书桌(desks), 0个餐桌(tables), 8个椅子(chairs)。

所以desks、chairs是基变量(非0),tables是非基变量(0)。

“Slack or Surplus”给出松驰变量的值:第1行松驰变量 =280(模型第一行表示目标函数,所以第二行对应第一个约束)第2行松驰变量 =24第3行松驰变量 =0第4行松驰变量 =0第5行松驰变量 =5“Reduced Cost”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时, 目标函数的变化率。

其中基变量的reduced cost值应为0,对于非基变量 X j, 相应的 reduced cost值表示当某个变量X j 增加一个单位时目标函数减少的量( max型问题)。

本例中:变量tables对应的reduced cost值为5,表示当非基变量tables的值从0变为 1时(此时假定其他非基变量保持不变,但为了满足约束条件,基变量显然会发生变化),最优的目标函数值 = 280 - 5 = 275。

“DUAL PRICE”(对偶价格)表示当对应约束有微小变动时, 目标函数的变化率。

输出结果中对应于每一个约束有一个对偶价格。

若其数值为p,表示对应约束中不等式右端项若增加1 个单位,目标函数将增加p个单位(max型问题)。

显然,如果在最优解处约束正好取等号(也就是“紧约束”,也称为有效约束或起作用约束),对偶价格值才可能不是0。

本例中:第3、4行是紧约束,对应的对偶价格值为10,表示当紧约束3) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 20变为 3) 4 DESKS + 2 TABLES + 1.5 CHAIRS <= 21时,目标函数值 = 280 +10 = 290。

对第4行也类似。

对于非紧约束(如本例中第2、5行是非紧约束),DUAL PRICE 的值为0, 表示对应约束中不等式右端项的微小扰动不影响目标函数。

有时, 通过分析DUAL PRICE, 也可对产生不可行问题的原因有所了解。

18.2 集的使用LINGO允许把相联系的对象聚合成集(sets)。

一旦把对象聚合成集,就可以利用集来最大限度的发挥LINGO语言的优势。

集是LINGO建模语言的基础,是程序设计最强有力的基本构件。

借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。

一个集可能是一系列食品、汽车等。

每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。

属性值可以预先给定,也可以是未知的,有待于LINGO求解。

例如,食品集中的每个产品可以有一个价格属性;汽车集中的每辆车可以有一个货车或客车属性, 也可以有一个动力属性。

相关主题