LINDO使用方法.ppt
第二章 LINDO软件的基本使用方法,原书相关信息谢金星,薛毅编著,清华大学出版社,2005年7月第1版.http:/,优化建模与LINDO/LINGO软件,2.6*LINDO命令窗口,内容提要:LINDO命令窗口概述INFORMATION(信息类命令)INPUT(输入类命令)DISPLAY(显示类命令)OUTPUT(输出类命令)SOLUTION(求解类命令)PROBLEM EDITING(编辑类命令)QUIT(退出类命令)“IP、QCP、PRP”(整数、二次与参数规划类命令)CONVERSATIONAL PARAMETERS(对话类命令)USER SUPPLIED ROUTINES(用户过程类命令)MISCELLANEOUS(其他命令),LINDO命令窗口概述,前面介绍的基本上是在Windows下拉式菜单模式下驱动LINDO运行,使用起来相当方便。LINDO还提供了另一种运行模式,即“Command-Line”(命令行)模式。所谓“命令行”模式,即通过在字符方式下输入一行一行的命令来驱动LINDO运行,因此每个命令也称为“行命令”。这种操作方式很像老式DOS操作系统和UNIX操作系统下的运行方式。在Windows操作系统下,相信很少有人会选择使用“命令行”模式,但为了对LINDO软件介绍的完整性,这里还是简单介绍一下。,通过菜单命令“Window|Open Command Window(Alt+C)”打开命令窗口,在命令窗口下操作,命令窗口下的提示符是“:”,用户在“:”后面可以输入各种LINDO的有效命令进行操作,输出也马上显示在命令窗口。,在命令窗口下,只需键入 COMMANDS或“COM”(命令),就会看到LINDO的所有有效行命令。,如果某个命令较长,通常可以只写出前面的若干个字母,但注意不要与其他命令重名。,2.6.1 INFORMATION(信息类命令),HELP 命令:键入“HELP”会显示出LINDO的一般帮助信息。键入HELP name,LINDO可帮你了解某个具体的命令,其中 name是命令名。,COMMAND(COM)命令:给出按类型分类的LINDO 命令目录。(注:括号内表示的是该命令的最简单的简写形式,下同),LOCAL(LOC)命令:给出LINDO程序的版本信息。,CATEGORY(CAT)命令:列出LINDO 命令类型,并可按提示(序号)有选择地给出某类型下的所有命令。,TIME 命令:显示本次启动LINDO运行后累计的时间。,DATE 命令:显示当前的日期和时间。,2.6.2 INPUT(输入类命令),MAX/MIN 命令:用于输入一个包含目标函数,约束条件在内的 LP 模型.,输入过程如下:在提示符“:”下输入MAX(或MIN),继之以自然格式的目标函数作为第一行;再输入“SUBJECT TO”或“SUCH THAT“(可简写为”ST”或“S.T.”),后面跟约束条件行。每次回车后将显示“?”提示符。最后,输入END 回到命令状态模式.,例:,下面是同一问题的两种合法的输入方式:,1)MIN 2X+3Y SUBJECT TO-5X-2y5 END,2)MIN 2X+3 Y ST-5x-2Y+5 END,注:变量名可以由18个字母或数字型的字符构成,且第一个字符必须是字母。变量系数不能是指数型,例如:.258E+29形式的系数是不允许的。任一系数的整数位数最多为9位,小数位数最多为五位。关键词(“MAX”,“ST”,“END”.)及各行之间必须用一个或多个空格分隔开。空格可以出现在一行之中,但不能出现在变量名中。一个回车符等价于一个空格。任一约束可自由选择一个名称来代替行号,例如:DEMAND)10X-Y 5,RETRIEVE(RETR)命令:执行该命令可直接从硬盘上的文件中获得一个LINDO格式的模型。LINDO 会为你提示可供选择的具体的文件名。能被RETRIEVE的模型文件必须是以前经过“SAVE”行命令存入的文件,或者经过FILE|SAVE(或SAVE AS)菜单命令以LINDO PACKET格式存入的模型,后缀通常是“LPK”,(即LINGO压缩格式文件);而不能是LINDO文本格式文件(后缀通常是“LTX”).,RMPS 命令:读取一个MPS 格式文件,并转化成LINDO格式的模型。LINDO 会为你提示可供选择的具体的文件名。该模型文件必须是MPS 格式文件(关于MPS格式文件的说明见附录),如以前经过“SMPS”命令存入的文件,或经过FILE|SAVE(或SAVE AS)菜单命令以MPS格式存入的模型(后缀通常是“MPS”,即MPS格式文件).,TAKE 命令:用该命令可执行由一系列LINDO命令组成的文本文件(称为LINDO命令的脚本文件)。该文件内容只能同终端输入一致,例如文件中不能有行号等,且文件中最后一个命令应为“LEAVE”。参见本章2.7节的例子。,LEAVE 命令:该命令表示结束一个可由“TAKE”行命令或“FILE|TAKE COMMANDS”菜单命令访问的文件的输入。,RDBC 命令:从(数据库格式)文件中读出当前模型的一个初始解。该解应该是以前由SDBC 命令存入文件中的。,FBR 和 FINS命令:FBR 命令从一个由 FBS 命令建立的文件中得到一个(可行)基,FINS 命令从一个MPS格式的文件中得到一个(可行)基。此时一个与该(可行)基匹配的LP模型必须是内存中已有的。,2.6.3 DISPLAY(显示类命令),PICTURE(PIC)命令:给出一个模型中系数矩阵的逻辑示意图,参见 Report|Basis Picture菜单命令。该命令有助于检查一个模型的输入是否正确。,Z.000000-.000001 Y.000001-.000009 X.000010-.000099 W.000100-.000999 V.001000-.009999 U.010000-.099999 T.100000-.999999 A 1.000001-10.000000 B 10.000001-100.000000 C 100.000001-1000.000000 D 1000.000001-10000.000000 E 10000.000001-100000.000000 F 100000.000001-1000000.000000 G 1000000,逻辑示意图中用字母代表的数字大小:,TABLEAU(TABL)命令:显示当前单纯形表(参见菜单命令Reports|TABLEAU)。,LOOK 命令:可用“LOOK”查看当前问题模型的全部或部分。键入“LOOK ALL”可看全部问题模型。键入“LOOK row1,row2”或“LOOK row1-row2”可看行row1至行row2。模型中系数只能有5个小数位,最多有9 位整数,任何更大的数只能显示为“*”。,NONZEROES(NONZ)命令:显示一个简略的解答报告,其中只显示非零的变量及相应的行。“NONZ”命令并不能求解问题,所以需首先执行“GO”命令,且“NONZ”只有在设置了“TERSE”(简洁型)交互型模式后才能起作用。,SHOCOLUMN(SHOWC)命令:键入 SHOC variable-name可显示出变量variable-name 的系数列。,SOLUTION(SOLU)命令:显示解的标准报告。,RANGE 命令:显示关于 RHS(右端项)及OBJ(目标函数费用系数)的范围报告(敏感性分析)。,BPICTURE(BPIC)命令:按最后一次转置/三角化的行序显示当前(可行)基的逻辑图。参见 Report|Basis Picture菜单命令。,CPRI和RPRI 命令:可选择地显示列(用CPRI命令)或 行(用RPRI命令)的有关信息。,CPRI的命令格式如下:CPRI print-list:conditional-expression例如,执行 CPRI N P:N=M%X.AND.D 0将显示满足下列条件的列(变量)的名称(N:NAME)及原始值(P:PRIMAL VALUE),其条件为:列名(N)的第一个字符=M,第二、三个字符任意,第四个字符=X,且有一对偶值(DUAL VALUE)大于零。如果print-list一项被省略了,将只显示匹配的数目。,N=NAME(名称)P=PRIMAL VALUE 原始值(相当于行的松驰量)D=DUAL VALUE(相当于列的REDUCED COST)R=RIM(列对应的目标函数的系数;对于行,则表示右端项)U=SIMPLE UPPER BOUND(简单上界)L=SIMPLE LOWER BOUND(简单下界)T=变量类型(C,I,or F;)Z=一列或一行中的非零元.%=名称(N)中的不确定字符(任意字符),print-list(显示列表)及 conditional-expression(条件表达式)中有关列/行特征的常用符号及意义:,其它一些有用的符号有:算术运算符 逻辑运算符 关系运算符 顺序运算符+-/*.AND.=#()LOG()EXP().OR.ABS().NOT.,DMPS 命令:以MPS(数学规划系统)格式显示当前解答报告.,PPIC 命令:交换模型中的行或列,给出模型中系数的报告,使得非零数尽量靠近主对角线。,LKLG 命令:LKLG是LOOK LINGO的意思,以LINGO格式显示模型(LINGO格式将在下一章介绍)。,2.6.4 OUTPUT(输出类命令),SAVE 命令:将当前的问题模型用LINGO 压缩格式存储到一个文件中。该问题模型可由“RETR”命令重新提取。,DIVERT(DIVE)命令:要求你提供一个文件名,随后所有的输出(如解集报告等),将转至该文件中,直至你给出一个 RVRT(REVERT)命令为止.,RVRT 命令:重新使以后的所有结果输出都回到终端。该命令的作用与“DIVERT”命令相反。,SMPS 命令:将当前的问题模型用MPS 格式存储到文件中。,SDBC 命令:用数据库格式存储一个解。变量名称,取值大小,REDUCED COST,变量类型,上界(SUB)和下界(SLB)分别以(A8,2G15.8,A1,2G15.8)格式存储(这里A表示字符型,G表示数值型)。,FBS 命令:将当前的(可行)基按LINDO格式存入一个文件。若重新提取,可参见 FBR 命令,FPUN 命令:将当前的(可行)基以MPS格式存入一个文件。若重新提取,可参见 FINS 命令。,SMPN 命令:将当前的模型以扩展的MPS格式存入一个文件,该格式可以包括BV,LI,UI等扩展。,2.6.5 SOLUTION(求解类命令),GO 命令:求解当前的问题模型。该模型在求解过程中不会被改变。若在GO之后有一正整数,表示用单纯形法迭代旋转(PIVOT)的次数,PIVOT(PIV)命令:演示单纯形方法的每一步旋转迭代(PIVOT STEP)。如果键入“PIVOT”+变量名,则该变量会进入基。变量名后还可给出该变量所在的行号,即指定旋转元。,GLEX 命令:按字典序对目标进行优化。先优化第1个目标,然后把这个目标的值固定在最优值,对第2个目标进行优化;依此类推。这时要求按照一定的特殊形式输入一个多目标模型。,2.6.6 PROBLEM EDITING(编辑类命令),ALTER(ALT)命令:用ALTER可编辑当前的问题模型.使用格式为:ALTER row-id var-id.row-id 是需要改动的行的行号,“var-id”是需要改动变量系数的变量名。随后,LINDO会提示你输入一个新的值.如果想改动RHS(右端项),DIRECTION(不等号方向)或某个行的名称,var-id一项可用 RHS,DIR,或 NAME。,注:-对目标函数而言,有效的 DIRECTIONS有MAX 或MIN;-对所有其它行可用;-请用DELETE命令,而勿用ALTER来消去一行。,EXTEND(EXT)命令:可为一个以前定义的问题模型增添约束行。输入新的行,不要再键入MAX,MIN或SUBJECT TO这样的关键词。新的行将会被附在原问题模型的最后,键入END结束。,DELETE(DEL)命令:键入DELETE row-id可从当前的问题模型中消除行 row-id.也可 键入 DELETE row1 row2 消去行row1 至行row2。DELETE ALL 可用来清除当前的整个问题模型。,FREE、SUB、SLB 命令:分别设置自由变量、变量上界、下界,与模型窗口下的功能和使用方法类似。,APPC 命令:是APPEND COLUMN的意思。键入 APPC var-id 可为问题模型添加 以var-id命名的新的一列。随后是关于该对应变量出现的行/系数值。每行有一对行/系数值;行和系数值要用一个空格分开。输入0作为行名可结束。若以RHS为列名,将使输入成为新的 RHS(右端项)。,2.6.7 QUIT(退出类命令),QUIT 命令:该命令用于退出LINDO系统(不仅仅是退出命令窗口!)。任何未存储下来的问题模型和其他数据会被丢失!,2.6.8 INTEGER QUADRATIC AND,INTEGER(INT)和 GIN 命令:GIN命令可将问题模型中的变量标为整数型,INT 命令可将问题模型中的变量标为 0/1型。第一种格式为“INT(或GIN)n”,其中 n 是整型变量的个数,此时LINDO 要求整型变量应放在问题模型的最前面。第二种格式为 INT(或GIN)var-id,其中 var-id是变量名。这与模型窗口中的功能和使用方法类似。,PARAMETRIC PROGRAMS(整数、二次与参数规划类命令),QCP 命令:QCP 用于定义一个二次规划问题。问题通过在实际约束前增加有关变量的一阶条件转化为线性(互补)型。这需要我们为每一个实际约束增加一个对偶变量。要使用QCP,第一行(目标函数)只用于给出相应变量的顺序。QCP用于指出第一个实际约束的行号。,PARA 命令:(参见菜单命令“Reports|Parametrics”)键入PARA row-id new-rhs 可对行 row-id的RHS(右端项)进行参数分析.PARA 会将该行RHS(右端项)的当前值改为新值new-rhs,同时演示出在由此方式改变任一(可行)基产生的最优目标值。在此之前,该问题需被优化过。,POSD 命令:(参见菜单命令“Reports|Positive Definite”)检验当前二次规划问题中二次型对应的约束矩阵是否正定。,TITAN 命令:该命令可收紧一个LP/IP 问题模型(加强条件),是LINDO进行预处理的一部分。,第一,它将收紧上界,例如:2X+Y 12-X+2Y 3 执行TITAN 命令后可将上界减为:SUB X 6 SUB Y 4.5,第二,它会收紧整型变量的系数,例如除上述条件外另外有条件:30W-3X+2Y 3 其中 W 是 0/1型,那么执行TITAN 命令收紧后为:21W-3X+2Y 3,BIP 命令:(在菜单命令EDIT|OPTIONS中也有此功能)键入“BIP bound-val”会将“bound-val”标识为“篱笆值”,即整数解的目标函数值的一个界。此后若分枝定界树中某一分枝的最佳值比“篱笆值”还坏,该分枝会剪掉。例如,任何已知的可行整数解对应的目标值都可以看作一个 BIP。,IPTOL 命令:(在菜单命令EDIT|OPTIONS中也有此功能)格式为:IPTOL F,其中 F 是一个非负分数(百分数)。当搜索另一个IP解时,只考虑比目前最好的解至少优 100F%的解。,2.6.9 CONVERSATIONAL PARAMETERS(对话类命令),WIDTH和PAGE 命令:(在菜单命令EDIT|OPTIONS中也有此功能)键入WIDTH n可告知LINDO 你的终端行宽为 n 字符。例如:也许你需要用 WIDTH 132 告诉LINDO你使用的是宽行打印纸。键入PAGE n设置帧幅(每页多少行)。例如,PAGE 24 将使每屏幕显示 24行出现一次暂停。触击一次CR(回车)将显示下一幅。PAGE 0 表示不设限制,这对于硬拷屏是适宜的。,TERSE(TERS)和VERBOSE(VERB)命令:(在菜单命令EDIT|OPTIONS中也有此功能)TERS改变对话方式为TERSE(简明)型。例如,它将不会自动地显示模型的最优解报告,使用者需用NONZ,CPRI,或RPRI等命令来浏览解。命令VERBOSE可消除 TERSE状态,令对话方式回到详细型状态(缺省状态)。,BATCH(BAT)和 PAUSE(PAUS)命令:BATCH设置对话方式到 BATCH(批处理)状态模式。分批运行任务,可使输出更具可读性,如发生错误,则可在第一个主要错误处停止运行。PAUSE表示暂停直至用户键入下一个回车,PAUSE后的内容(在同一行)被显示到终端上。这两个命令常用于命令脚本文件中(命令脚本文件可用TAKE命令读出来运行)。,2.6.10 USER SUPPLIED ROUTINES(用户过程类命令),USER 命令:在LINDO命令模式下键入“USER”只是显示一个提示信息,没有什么其他用处。实际上,LINDO中提供了与其它应用程序开发工具(如Visual Basic,Fortran,C+,MATLAB等)的接口,有大量子过程可供用户开发自己的应用程序时调用,从而构造一个问题模型、求解并获得解的有关信息等。这对于利用LINDO来开发自己的应用程序来说是非常有用的,详细信息请读者参阅LINDO API的使用手册。,2.6.11 MISCELLANEOUS(其他命令),INVERT(INV)命令:INVERTS当前的(可行)基求逆。通常将使结果更趋精确。,STAT 命令:给出当前模型的统计报告,参见菜单命令“Reports|Statistics”。,BUG 命令:如果你发现了LINDO系统的漏洞,用该命令显示应该向谁报告(通常就是LINDO公司的联系地址)。,DEBUG(DEB)命令:如因约束系数或右端项中的错误造成问题无可行解,DEBUG将标出一个包含错误的约束条件的最小集合(LINDO尽量如此做),但不能用于二次规划。参见菜单命令“Reports|Debug”。,SET 命令:重新设置 LINDO的内部参数,与LINDO菜单命令EDIT|OPTIONS的功能类似。SET 命令的使用格式为:SET PARAM-ID NEW-VALUE,可行的参数(PARAM-ID)有:,PARAM-ID 作用 1 最后约束的误差容限(精度)2 初始约束的误差容限(精度)3 进基变量的 REDUCED COST 的误差容限(精度)4 将整数变量的取值固定时REDUCED COST的阈值(上限)5 旋转(迭代)次数的阈值(上限)6 是否对整数规划(IP)进行预处理(0:否;0:是)7 是否进行SCALING(改变尺度使数据更均衡)(0:否;0:是)8 是否显示状态窗口(0:否;0:是)9 分枝策略:(0:缺省;1:向上整取优先;-1:向下整取优先)10 最优整数解的界(即“篱笆”值,参见BIP命令)11 基于惩罚的分枝中树的深度 12 基于惩罚的分枝中评价的候选项 13 是否取消占优的整数变量(0:否;0:是),TITLE(TITL)命令:TITLE TEXT命令用标题 TEXT命名当前模型;只输入TITLE则显示当前的标题(参见菜单命令“FILE|TITLE”)。,NEWPW 命令:该命令用于更新LINDO的使用许可证密码。升级LINDO系统到更高级别的用户版本时就可以这样做(如提升LINDO对求解规模的限制)。(功能与菜单命令“FILE|LICENSE”相同),THE END,Thank you very much!,