附录2 LINDO使用手册
本手册前面所讲的所有命令,都是由用户从键盘输入的,TAKE命令实际上是把一个命令文件定义为虚拟终端(键盘),LINDO从该文件读取并执行命令。由此可知,TAKE命令使LINDO命令成批执行。
所谓\命令文件\是一个由若干条合法的LINDO命令组成的文件,它应当用编辑程序(如DOS中的EDIT,WINDOWS中的NOTEPAD等)事先编辑好并存放在磁盘中。命令文件的最后一个命令必须是LEAVE。
例如,先建立如下一个文件名为STREAM.BAT的命令文件: RETR MODEL.LIN DIVE SOLU.DAT LOOK ALL PAUS GO N LEAVE 先进入LINDO,然后执行以上批命令STREAM .BAT,则LINDO将依次执行其中的每一条命令,执行到暂停命令PAUS,则暂停执行。键入回车,继续执行。直至遇到批命令终止命令LEAVE,退出批命令,返回LINDO命令状态。
TAKE命令除了可以实现命令的批处理以外,还可以用来把一个由ASCⅡ码写成的模型文件输入LINDO。例如,先用编辑程序写成以下磁盘文件,文件名为MODEL.DAT:
MAX 3X1+4X2+X3-X4 ST X1-2X2+X3+3X4<8 2X1+X2-2X3-2X4<13 X1+3X3+X4<21 END LEAVE !注意,命令文件中模型格式必须 !与键盘输入时完全一样,即不带 !行号,不等号为\或\。 !最后一个命令必须是LEAVE 先进入LINDO,然后用TAKE命令读取这个文件,就可以将这个模型装入内存。 :TAKE MODEL.DAT
316
附录2 LINDO使用手册
生成符合LINDO模型格式的模型文件,然后由TAKE命令读入,用LINDO求解。因此,TAKE命令也可以作为LINDO和其他应用程序之间的接口。
当然,我们也可以把模型以及准备对该模型实施的LINDO命令组成一个命令文件。这样当TAKE命令读取这一命令文件后,不仅将模型读入内存,而且将逐打执行文件中的命令,实现模型输入,执行批命令一次完成。例如,命令文件: MAX 3X1+4X2+X3-X4 ST X1-2X2+X3+3X4<8 2X1+X2-2X3-2X4<13 X1+3X3+X4<21 END LOOK ALL GO N LEAVE 用TAKE命令读入后,首先将模型装入内存(MAX命令),然后在屏幕上显示这个模型(LOOK ALL命令),运行这个模型(GO命令,在执行中对屏幕提示的回答是N),最后退出命令文件(LEAVE命令),返回LINDO命令状态。
§2.6 退出命令文件命令 LEAVE
这个命令的功能及格式已在TAKE中讲了。
317
附录2 LINDO使用手册
第三章 线性规划模型的求解
学习了第一章的内容之后,我们已经能够初步利用LINDO来求解一个线性规划模型,得到模型的最优解,亦即在正确输入模型的基础上,用GO命令运行模型。但是仅仅掌握这些基本的操作技术还无法满足多种多样的实际需要。例如有时需要了解进行一次迭代运算的基变化情况,有时不但要求得最优解,而且还要进行灵敏度 分析等等。诸如此类线性规划模型求解中在更深层次的问题,便是本章讨论的内容。
§3.1 GO命令的进一步介绍
GO命令除了第一章中介绍的求解模型的最常见功能之外,还有如下几种形式的用途:
(1).对当前内存中的模型进行有限迭代。在用GO命令求解模型时,如果省略迭代次数n,一般情况下计算机只会显示出最后一次运行的结果,这也就是第一章中已提到过的情形。如果欲要了解当前内存中模型进行指定迭代次数时的中间结果,可以使用命令中参数n来达到。例如对于下述问题:
max 2x1+8x2+6x3 st. 8x1+3x2+2x3≤250
2x1+ x2 ≤50 4x1 +3x3≤150
x1,x2,x3≥0
当取GO命令中的n为整数2时,计算机显示的内容为:
:MAX 2x1+8x2+6x3 ? ST ? 8x1+3x2+2x3<250 ? 2x1+x2<50 ? 4x1+3x3<150 ? END :GO 2 !运行,最大叠代次数为2次 PIVOT LIMIT OF 2 EXCEEDED. HOW MANY MORE ALLOWED? GO> !叠代次数2次已超过,允许再叠代多少次? 此时尚未求得最优解,如要了解内存中模型第二次迭代的有关数据,可用TABL等显示命令来实现(见第五章的介绍)。
318
附录2 LINDO使用手册
2.追加迭代次数。对于一些规模较大的模型(包括某些尽管空间占有不大,但迭LINDO可以在经过若干次数的迭代时间较长的模型),在使用缺省n的GO命令以后, 代之后,暂时中断,给出类似上一节的提示信息,例如对某一模型有如下求解过程: :MAX 2x1+8x2+6x3 ? st ? 8x1+3x2+2x3<250 ? 2x1+x2<50 ? 4x1+3x3<150 ? END :GO 2 !运行,最大叠代次数为2次 PIVOT LIMIT OF 2 EXCEEDED. HOW MANY MORE ALLOWED? GO>3 !此时尚未求出最优解,将追加的迭代次数输入 LP OPTIMUM FOUND AT STEP 2 OBJECTIVE FUNCTION VALUE 1)700.000000 VARIABLE VALUE REDUCED COST X1 .000000 22.000000 X2 50.000000 .000000 X3 50.000000 .000000 ROW SLACK DUALP RICES 2) .000000 .000000 3) .000000 8.000000 4) .000000 2.000000 NO.ITERATIONS=2 DO RANGE(SENSITIVITY) ANALYSIS? GO>N : §3.2 迭代计算命令 PIV (Pivot)
1.命令功能:对当前基进行一次旋转运算. 2.命令格式:
:PIV [变量名或变量序号]
3.命令使用:PIV命令执行以后,指定的变量就调入当前基中(即成为进基变量),离基变量按单纯形算法规则确定。如变量名缺省,则按进基规则依次选择进基变量。例如对于上一节的模型,其操作结果有:
319
附录2 LINDO使用手册
:PIV X2 ENTERS AT VALUE 50.000 IN ROW 3 OBJ. VALUE = 400.00 :PIV X3 ENTERS AT VALUE 50.000 IN ROW 4 OBJ. VALUE = 700.00 :PIV LP OPTIMUM FOUND AT STEP 2 OBJECTIVE FUNCTION VALUE 1)700.000000 VARIABLE VALUE REDUCED COST X1 .000000 22.000000 X2 50.000000 .000000 X3 50.000000 .000000 ROW SLACK DUAL PRICES 2) .000000 .000000 3) .000000 8.000000 4) .000000 2.000000 NO.ITERATIONS = 2 DO RANGE(SENSITIVITY) ANALYSIS ? PIV> : 此时得到了问题的最优解。如果继续计算,让X1进基,有:
:PIV X1 X1 ENTERS AT VALUE 25.000 IN ROW 3 OBJ. VALUE = 150.00 : 由于松弛变量是LINDO自动添加的,没有变量名,例如在上一节的模型
max s.t. 2x1 8x1 2x1 4x1 x1
+8x2 +3x2 +x2 x2
+6x3 +2x3
+3x3 x3
≤250 ≤50 ≤150 ≥0
中,如果要选第一个松弛变量进基,则需要用这个变量的序号,即第4个变量进基:MAX 2 X1 + 8 X2 + 6 X3 SUBJECT TO 2) 8 X1 + 3 X2 + 2 X3 <= 250 3) 2 X1 + X2 <= 50 4) 4 X1 + 3 X3 <= 150 END
320