LINDO教程.docx
《LINDO教程.docx》由会员分享,可在线阅读,更多相关《LINDO教程.docx(41页珍藏版)》请在冰豆网上搜索。
![LINDO教程.docx](https://file1.bdocx.com/fileroot1/2023-1/21/be614e7b-1728-4835-a116-3a2e82352e01/be614e7b-1728-4835-a116-3a2e82352e011.gif)
LINDO教程
LINDO软件包(学生版)使用手册
目录
第一节简介与安装
第二节用LINDO求解线性规划(LP)问题
第三节用LINDO求解整数规划(IP)和二次规划(QP)问题
第四节GINO简介
第五节LINGO简介
1997年8月
第一节简介与安装
1·1简介
本文主要面向大中专学生,研究生,及掌握一定的高等代数知识的读者,介绍LINDO软件包(学生版)的基本使用方法。
该软件包(学生版)主要功能在于帮助使用者较快地输入一个优化问题的式子,求解并分析该优化问题,然后可做些较小的改动,并重复上述的过程.
该软件包(学生版)在微机上DOS环境下运行。
其使用界面不是图形式的,而是字符式的;不是菜单式的,而是面向具体的命令(Command).它有许多的命令,每一个命令都可随时执行,由系统检查该命令是否在上下文中起作用.它采用一种对用户友好的交互使用方式,包括了所有的使用过程指导.基于使用的具体情况,它会向使用者询问下一步将做什么,或等待使用者输入下一个命令.
LINDO软件包(学生版)包括LINDO,GINO,LINGO和LINGONL(LINGO2)等优化软件的学生版以及相应的例子文件。
由于LINDO程序执行速度很快,易于方便地输入、求解和分析优化问题,LINDO在教学、科研和工业界得到广泛应用。
这里用LINDO软件包作为LINDO,GINO,LINGO和LINGONL等的统称,包含五种组件,下面分别介绍如下:
(1)LINDO是LinearINteractiveandDiscreteOptimizer字首的缩写形式,是由LinusSchrage于1986年开发的优化计算软件包,可以用来求解线性规划(LP----LinearProgramming),整数规划(IP----IntegerProgramming)和二次规划(QP----QuadraticProgramming)问题.LINDO易于规划问题的输入、求解和分析,程序执行速度很快。
LINDO学生版最多可求解多达200个变量和100个约束的规划问题。
(2)GINO可用于求解非线性规划(NLP----NonlinearLinearProgramming)问题,求解线性和非线性方程组和不等式组,以及代数方程求根。
GINO中包含了有关财务、概率等方面的函数和三角函数,以及各种一般的数学函数,可供使用者建立问题模型时调用。
GINO学生版最多可求解多达50个变量和30个约束的问题。
(3)LINGO可用于求解线性规划和整数规划问题。
(4)LINGONL(LINGO2)可用于求解线性、非线性和整数规划问题。
与LINDO和GINO不同的是,LINGO和LINGONL(LINGO2)包含了内置的建模语言,允许以简练、直观的方式描述所需求解的问题,模型中所需的数据可以以一定格式保存在列表(List)和表格(Table)中,也可以保存在独立的文件中。
LINGO和LINGONL(LINGO2)学生版最多可求解多达200个变量和100个约束的问题。
(5)例子文件:
在软件包中还含有例子文件,其中有些例子文件与各软件在一起,但大多数例子文件一般安装在例子目录。
例子目录下的例子文件是以LUTOS1-2-3的WK1格式存储的(也可用MS-OFFICE工具的EXCEL软件读写)。
1·2安装过程:
LINDO软件包(学生版)在微机上DOS环境下通过安装后运行。
安装盘为一片三英寸软盘,安装盘上有安装程序(install.exe)和简要介绍文本(read.me),还带有多个压缩文件和一个解压缩程序(lha.exe).
安装时,将安装盘直接插入软驱,然后运行该软盘上的安装程序,即在该软驱的提示符(如A:
>或B:
>)下键入“install”。
按“回车”(ENTER键)后,只需遵照屏幕上的提示即可完成整个安装过程:
(1)用户首先必须选择所需安装的内容:
用户可以任意选择所需安装的内容(从1·1节所介绍的五种组件中任意选取)。
如果想安装五种组件中的某个组件,就在它前面键入“Y”;否则键入“N”,然后“回车”。
如此反复,完成后屏幕将提示您确认您的选择。
(2)用户必须选择所需安装到的目的地(一般是硬盘上的某个目录)。
屏幕将提示缺省的目录,您可以任意修改,如此反复,完成后屏幕将提示您确认您的选择。
(3)确认您的选择之后,安装程序就会自动完成全部后续安装过程。
安装过程结束后,您就可以进入安装好的目录,运行相应的优化软件了。
第二节用LINDO求解线性规划(LP)问题
2.1初试LINDO
LINDO的求解机制:
LINDO的求解过程采用单纯形法,一般是首先寻求一个可行解,在有可行解情况下再寻求最优解.用LINDO求解一个LP问题会得到如下的几种结果:
不可行(Nofeasiblesolution)或可行(Feasible)
可行时又可分为:
有最优解(OptimalSolution)和解无界(UnboundedSolution)两种情况.由于在实际问题中,不太可能出现最大利润无上限的情形,所以使用者应检查是否少了一个约束或有其它印刷错误.
在LINDO子目录下执行LINDO.EXE文件即可进入LINDO工作环境,其屏幕显示如下:
LINDO/PC5.02(4MAR92)
STUDENTVERSION.FOREDUCATIONALUSEONLY.
SINGLEUSERLICENSEFOREDUCATIONALUSEONLY
DISTRIBUTEDWITHTEXTBOOKSBYWADSWORTHPUBLISHING
:
“:
”为LINDO提示符,在其之后,使用者即可用具体的命令来输入并求解优化问题。
让我们来解如下LP问题:
由于LINDO中已假设所有的变量都是非负的,所以非负约束可不必再输入到计算机中;LINDO也不区分变量中的大小写字符(实际上任何小写字符将被转换为大写字符);约束条件中的“<=”及“>=”可用“<”及“>”代替。
上面问题用键盘输入如下:
:
MAX2x+3Y
?
ST
?
4X+3Y<10
?
3x+5Y<12
?
END
:
LINDO中一般称上面这种问题实例(INSTANCE)为模型(MODEL)。
以后涉及该模型时,目标函数为第一行,两个约束条件分别为第二、三行。
直接键入运行(GO)命令就可得到解答,屏幕显示如下:
:
GO
LPOPTIMUMFOUNDATSTEP2
OBJECTIVEFUNCTIONVALUE
1)7.4545450
VARIABLEVALUEREDUCEDCOST
X1.272727.000000
Y1.636364.000000
ROWSLACKORSURPLUSDUALPRICES
2).000000.090909
3).000000.545455
NO.ITERATIONS=2
DORANGE(SENSITIVITY)ANALYSIS?
?
N
:
计算结果表明:
“LPOPTIMUMFOUNDATSTEP2”表示单纯形法在两次迭代(旋转)后得到最优解。
“OBJECTIVEFUNCTIONVALUE1)7.4545450”表示最优目标值为7.4545450.
“VALUE”给出最优解中各变量(VARIABLE)的值:
X=1.272727,Y=1.636364.
“REDUCEDCOST”给出最优单纯形表中第0行中变量的系数(max型问题).其中基变量的reducedcost值应为0,对于非基变量,相应的reducedcost值表示当该非基变量增加一个单位时目标函数减少的量。
本例中此值均为0。
“SLACKORSURPLUS”给出松驰变量的值:
第2、3行松驰变量均为0,说明对于最优解来讲,两个约束(第2、3行)均取等号。
“DUALPRICES”给出对偶价格的值:
第2、3行对偶价格分别为.090909,.545455。
“NO.ITERATIONS=2”表示用单纯形法进行了两次迭代(旋转)。
一个问题解答之后,LINDO会询问是否需要做灵敏性分析(DORANGE(SENSITIVITY)ANALYSIS?
)如果你不需要,你应回答“N”(NO),回到提示符“:
”之下.
如果想重新看到刚才的模型,可键入LOOK命令,LINDO会询问具体的行号.典型的应答可以是3,或1-2,或ALL,而结果,相应地会显示出第3行,第1-2行,或所有问题行.
:
LOOK
ROW:
3
3)3X+5Y<=12
:
或
:
LOOKall
MAX2x+3Y
SUBJECTTO
2)4X+3Y<=10
3)3X+5Y<=12
END
:
如果想修改问题,可键入ALTER命令,LINDO会询问行号,变量名,及新的系数.例如:
如果要将上面问题中约束条件
改为
,再全部看一下,并求解新问题,那么键入ALTER命令后相应的应答为2,X,和6,以下是演示过程:
:
ALTER
ROW:
2
VAR:
X
NEWCOEFFICIENT:
6
:
LOOKALL
MAX2X+3Y
SUBJECTTO
2)6X+3Y<=10
3)3X+5Y<=12
END
:
go
LPOPTIMUMFOUNDATSTEP0
OBJECTIVEFUNCTIONVALUE
1)7.3333330
VARIABLEVALUEREDUCEDCOST
X.666667.000000
Y2.000000.000000
ROWSLACKORSURPLUSDUALPRICES
2).000000.047619
3).000000.571429
NO.ITERATIONS=0
DORANGE(SENSITIVITY)ANALYSIS?
?
N
:
QUIT
最后键入退出(QUIT)命令,即可退出LINDO工作环境。
注:
输入、查看和修改一个LP模型更方便的方法是采用全屏幕编辑器。
在“:
”提示符下键入编辑(EDIT)命令可以进入全屏幕编辑器,可以和其他文本编辑器一样方便使用。
2·2求解LP问题的一般步骤及例子
步骤:
1)首先是输入一个LP问题。
为了检查有无错误,可用LOOK命令来显示问题式中的一行,几行或全部。
例如:
LOOK3---》屏幕显示第3行
LOOK1-3---》显示第1-3行
LOOKALL---》显示整个模型
2)修正模型。
如果需要对问题中某变量系数进行修正,可用ALTER命令。
此时,在LINDO的提示下需输入相应的变量所在的行号,变量名,及新的系数值。
此外下面两种情况也可用ALTER命令:
改动约束条件的右端顶,可以将RHS(即right-handside)做为变量名。
改变约束条件中的不等号方向(如<或>),可以将DIR做为变量名。
修改问题还可用EXT命令(增加新的约束行),DEL命令(去掉一行),和APPC命令(增加一个新的变量),也可用EDIT编辑器。
3)存储模型
如果输入的问题模型已经不再需要改动,可用SAVE命令将它存入文件中。
(此时LINDO会提示你输入一个文件名。
)日后如需用到该问题可用RETR命令提取。
4)键入GO命令可得到LP问题的最优解。
如果想将计算结果直接输出到某文件中,可在GO命令前先使用DIVERT命令,LINDO会提示你键入该输出文件的文件名,此后键入GO命令,屏幕上只会显示最优的目标函数值,其它结果都将存入输出文件。
GO命令执行后,LINDO会问你是否做敏感性分析,可看需要键入“Y”(YES)或“N”(NO).如果没什么错误,求解就结束了。
可键入QUIT退出。
LINDO中有下面三种命令可帮助使用者对LINDO的命令有更多的了解:
HELP:
若HELP后面跟有具体命令,则解释该命令.若单只一个HELP,将会给出一般性的信息.
CATEGORIES(可简写为CAT):
只列出所有命令的类型目录,随后可允许使用者有选择地列出某个具体类型中的所有命令.
COMMANDS(简写为COM)COM:
按类型列出所有有效的命令,例如输入(INPUT)型命令,输出(OUTPUT)型命令,等等.
下面即是一个具体应用的例子:
(可参照上述使用步骤)
首先输入问题:
(或用命令RETR读取LINDO目录下的例子文件DAKOTA)
MAX60DESKS+30TABLES+20CHAIRS
SUBJECTTO
2)8DESKS+6TABLES+CHAIRS<=48
3)4DESKS+2TABLES+1.5CHAIRS<=20
4)2DESKS+1.5TABLES+0.5CHAIRS<=8
5)TABLES<=5
END
问题求解
:
GO
LPOPTIMUMFOUNDATSTEP2
OBJECTIVEFUNCTIONVALUE
1)280.00000
VARIABLEVALUEREDUCEDCOST
DESKS2.000000.000000
TABLES.0000005.000000
CHAIRS8.000000.000000
ROWSLACKORSURPLUSDUALPRICES
2)24.000000.000000
3).00000010.000000
4).00000010.000000
5)5.000000.000000
NO.ITERATIONS=2
DORANGE(SENSITIVITY)ANALYSIS?
?
随后键入"Y"表示同意做敏感性分析:
RANGESINWHICHTHEBASISISUNCHANGED:
OBJCOEFFICIENTRANGES
VARIABLECURRENTALLOWABLEALLOWABLE
COEFINCREASEDECREASE
DESKS60.00000020.0000004.000000
TABLES30.0000005.000000INFINITY
CHAIRS20.0000002.5000005.000000
RIGHTHANDSIDERANGES
ROWCURRENTALLOWABLEALLOWABLE
RHSINCREASEDECREASE
248.000000INFINITY24.000000
320.0000004.0000004.000000
48.0000002.0000001.333333
55.000000INFINITY5.000000
2·3计算结果显示及敏感性分析
仍以上面的问题DAKOTA为例,下面给出其结果的一般注释:
“LPOPTIMUMFOUNDATSTEP2”表示LINDO在(用单纯形法)两次迭代或旋转后得到最优解。
“OBJECTIVEFUNCTIONVALUE280.000000“表示最优目标值为280.
“VALUE”给出最优解中各变量的值。
例.Dakota问题中需造2个(书桌)desks,0个(桌子)tables,和8个(椅子)chairs.
“SLACKORSURPLUS”给出松驰变量的值。
上例中:
s1=第2行松驰变量=24
s2=第3行松驰变量=0
s3=第4行松驰变量=0
s4=第5行松驰变量=5
“REDUCEDCOST”出最优单纯形表中第0行中变量的系数(max型问题).其中基变量的reducedcost值应为0,对于非基变量Xj,相应的reducedcost值表示当Xj增加一个单位时目标函数减少的量。
另外,当你执行TABLEAU命令后,LINDO会显示单纯形表。
在下表中我们可看到,基向量为BV={s1,Chairs,DESKS,s4},注意,在此例中,SLK5对应的是s4.ART是人工变量(artificialvariable)。
ART就是相应的目标值z;这样z+5TABLES+10s2+10s3=280。
:
TABLEAU
THETABLEAU
ROW(BASIS)DESKSTABLESCHAIRSSLK2SLK3
1ART.0005.000.000.00010.000
2SLK2.000-2.000.0001.0002.000
3CHAIRS.000-2.0001.000.0002.000
4DESKS1.0001.250.000.000-.500
5SLK5.0001.000.000.000.000
ROWSLK4SLK5
110.000.000280.000
2-8.000.00024.000
3-4.000.0008.000
41.500.0002.000
5.0001.0005.000
敏感性分析
使用LINDO时,结果输出中会提供敏感性分析.这一信息一般包含于两个标题之下,其一是REDUCEDCOSTS,另一个是DUALPRICES.它们分别表示了当变量或约束条件有微小变动时,目标函数的变化率.
在输出结果中对应于每个变量都有一个REDUCEDCOST,若其数值为x,表示对应的变量为零时,若增加1个单位,目标函数将减少x个单位.
输出结果中对应于每一个约束也都有一个DUALPRICE.若其数值为x,表示对应约束中不等式右端项若减少1个单位,目标函数将增加x个单位.
如果REDUCEDCOST或DUALPRICE的值为0,表示微小扰动不影响目标函数.
有时,通过分析DUALPRICE,也可对产生不可行问题的原因有所了解.
2·4注意事项:
1).进入LINDO后,":
"表示LINDO已准备接受一个命令.
2).LINDO中已假定所有变量非负.变量名不能超过8个字符。
3)如要输入<=或>=型约束,相应以<或>代替即可.
4).LINDO不允许变量出现在一个约束条件的右端.
5)目标函数及各约束条件之间一定要有空格分开.
6)一般LINDO中不能接受括号()和逗号",",例:
400(X1+X2)需写为400X1+400X2;10,000需写为10000.
7).EDIT命令调用一个全屏幕编辑器,可对当前模型进行全屏幕编辑.编辑完成后用“Esc”键保存当前修改,退出全屏幕编辑器;此时若模型有错误,则要求改正错误后再退出。
用“Ctrl+Break”键废弃当前修改,退出全屏幕编辑器。
8).LINDO有DEL,EXT,及ALTER等其它编辑命令,虽然全屏幕编辑器EDIT使这些命令用处减少了,但DEL在大块地清除一个模型时是有用的,而ALTER可允许做全局性的替换.
9).LOOK命令会为你在屏幕上显示你的问题(EDIT也可如此).
10).如想获得敏感性分析可用RANGE命令.
11).SAVE命令用来存储一个问题模型到文件中,RETR或TAKE命令用来读取一个以文件存储的模型.TAKE命令还可用于解读一个以文本格式存储的LINGO格式的问题模型.
12).DIVERT会导致大多数信息被输送到文件中,而只有少量信息被传送到屏幕.RVRT用于结束DIVERET.如果你divert到一个名为PRN的文件,结果将被直接传到打印机.
13)LINDO文件中常有注释间杂于各命令(COMMANDS)之中,前面注有[!
]符号.例如:
!
Thisisacomment.
14)LINDO将目标函数所在行作为第一行,从第二行起为约束条件。
行号自动产生,也可以人为定义行号或行名。
行名和变量名一样,不能超过8个字符。
15)数值均衡化及其它考虑
LINDO不能将LP中的矩阵进行数值均衡化.为了避免数值问题,使用者应自己对矩阵的行列进行均衡化.一个原则是,系数矩阵中非零元的绝对值不能大于100,000或者小于.0001.如果LINDO觉得矩阵元素之间很不均衡,将会给出警告.
16)量纲分析与一般错误的避免
当你将一个实际问题写成一个数学表达式时,有可能式子中会带有某些错误.这些错误主要有以下几类:
1.简单的印刷错误
2.表达式的原理错误
3.近似误差
第一类错误虽只是抄写一类问题造成的,但当问题规模较大时,要搜寻它们也是一个困难的问题;第二类错误也往往是建模不当造成的.
如何避免这些错误?
对第一类错误,主要任务在于如何找到它们.在LINDO中有一些可帮助寻找错误的功能.其中之一就是PICTURE命令,它的功能是可以将表达式中的系数通过列表显示出来.
例:
MIN5A0+6A1+2A2+4B0+3B1+7B2+2C0+9C1+8C2
SUBJECTTO
2)A0+A1+A2<=8
3)B0+B1+B2<=9
4)A0+A1+A2<=6
5)A0+B0+CO=6
6)A1+B1+C1=5
7)A2+B2+C2=9
END
用PICTURE可得到
AAABBBCCCC
012012012O
1:
562437298MIN
2:
111<8
3:
111<9
4:
111<6
5:
111=6
6:
111=5
7:
111=9
从上表可以发现,最后一列中的1可能放错位置了.其实原因只不过在表达式5)行中C0与CO弄混了.
另外,使用者有时从不合理的计算结果中也可发现第1类的错误.
第二类的表达式错误有许多类.这类常由新手造成的问题可通过量纲分析(dimensionalanalysis)暴露出来.所谓量纲分析,就是检查一下表达式中各量的单位是否一致.
2.5LINDO命令
LINDO中有下面三种命令可帮助使用者对LINDO的命令有更多的了解:
HELPCATEGORIES(可简写为CAT)COMMANDS(简写为COM)
功能如下:
HE