301LINDO使用手册LINDOUsersManual第一章LINDO初步LINDO是LinearINteractiveDiscreteOptimizer的缩写,是一个线性和整数规划的软件系统。这里介绍的LINDO/3865.3版本,最大规模的模型的非零系数可以达到1,000,000个,最大变量个数可以达到100,000个,最大目标函数和约束条件个数可以达到32000个,最大整数变量个数可以达到100,000个。它的特点是采用交互方式操作,而且命令简单明了,很容易掌握。用户在输入初步的数学模型后,可以一边运行,一边修改调试,直至获得满意的结果。LINDO既是一个实用的求解大规模线性和整数规划系统,也很适用于训练的目的,用来培养学生面对较复杂的实际问题,构造线性及整数规划模型以及求解这些问题的能力。限于本教材的内容,本手册只介绍有关线性规划和整数规划的基本内容,省略了有关二次规划、参数规划以及有关线性规划算法的比较专门的内容。§1.1LINDO命令一览表LINDO命令纳成十一类,每一类的名称及所属命令如下:1、查询类(Information)HELP求助COM(Command)命令列表LOCAL当前版本信息CAT(Categories)命令分类TIME显示当前时间DATE显示当前日期2、文件输入类(Input)MAX键盘输入极大化模型附录2LINDO使用手册302MIN键盘输入极小化模型RETR(Retrieve)从磁盘读入模型文件RMPS(ReadMPS)从磁盘读入MPS文件TAKE从磁盘读入模型或命令文件LEAV(LEAVE)TAKE命令的终止RDBC*读取用SBDC命令保存的基列作为初始基FBR*读取用FBS命令保存的基FINS*读取用MPS格式保存的基3、显示类(Display)PIC(Picture)显示矩阵中非零元素的分布及数量级TABL(Tableau)显示当前单纯形表LOOK显示模型的数学形式NONZ(Nonzeros)显示解中的非零变量SHOC(ShowColumn)显示模型中的一列SOLU(Solution)显示当前得到的解RANGE显示灵敏度分析的结果BPIC*显示三角化的当前基逆矩阵CPRI*显示所选择列的有关信息RPRI*显示所选择行的有关信息DMPS*显示以MPS格式表示的解PPIC*显示行列重新排列的矩阵,使非零元素最靠近对角线4、文件输出类(FileOutput)SAVE模型存盘DIVE(Divert)将屏幕输出转向磁盘文件RVRT(Revert)重新回到屏幕输出状态SMPS(SaveMPS)模型以MPS格式存盘SDBC*将当前基的列向量以文件形式保存FBS*将当前基以文件形式保存FPUN*将当前基以MPS形式保存SMPN*将当前模型用非标准的MPS格式保存5、求解类(Solution)附录2LINDO使用手册303GO求解一个模型PIV(Pivot)进行一次单纯形叠代GLEX*用字典序方法优化6、问题编辑类(ProblemEditing)ALT(Alter)修改模型中的系数EXT(Extension)增加一个约束DEL(Delete)删除一个约束SUB(SimpleUpperBound)给出一个变量的上界APPC(AppendColumn)增加一列SLB(SimpleLowerBound)给出一个变量的下界FREE取消一个变量的上下界EDIT用全屏幕编辑建立或修改模型7、退出(Quit)QUIT退出LINDO系统8、整数规划、二次规划和参数规划(Integer,QuadraticandParametricPrograms)INT定义一个0-1变量QCP*(QuadraticProgramming)定义二次规划PARA*(ParametricProgramming)求解参数规划POSD*(PositiveDefiniteness)检查二次规划矩阵的正定性TITAN*紧缩连续变量的上界以及0-1变量的系数BIP*在整数规划中给出一个剪枝的界GIN(GeneralInteger)定义一个整数变量IPTOL*设定整数规划最优解的宽容度9、对话参数(ConversationalParameters)WIDTH设置打印机宽度TERS(Terse)简洁输出信息VERB(Verbose)冗长输出信息BAT(Batch)成批输出信息PAGE设定屏幕页的大小PAUSE暂停10、用户子程序附录2LINDO使用手册304USER执行用户提供的子程序11、杂项INV*(INVERT)求当前基的逆矩阵,以减少叠代误差STAT(STATISTICS)统计模型矩阵的系数BUG如发现系统缺陷,提供有关信息SET设置LINDO的内部参数TITL(TITLE)给出模型的标题§1.2LINDO初步操作以下命令,可以完成模型输入,模型显示,模型运行,退出LINDO等操作,这些命令是:MAX开始输入一个极大化模型MIN开始输入一个极小化模型TITL输入模型标题EDIT全屏幕输入或全屏幕编辑一个模型LOOK在屏幕上显示已输入的模型GO模型运行QUIT退出LINDO,返回操作系统在这一章中,先对这几个命令的用法作详细解说。1、进入LINDO和调用其他任何应用程序一样,调用LINDO之前,用户先要完成登录、引导操作系统。在系统提示符(在这里,用C表示系统提示符)出现以后,就可以启动LINDO,即CLINDOCR执行此命令后,屏幕上出现:。:是LINDO接受命令的状态,在:后面,可以键入各种合法的LINDO的命令。每执行一个命令(除QUIT外),LINDO仍返回这一命令状态,等待下一个命令,如果是QUIT命令,则返回操作系统。2、输入模型命令MAX/MIN附录2LINDO使用手册305用MAX/MIN命令可以直接从键盘上输入一个模型到内存。MAX/MIN命令对规模较小的问题比较适用,对大规模问题的建立和输入,将在TAKE命令描述。设我们要输入的模型的数学形式为:MAX5.24X1+7.3X2+8.34X3+4.18X4SUBJECTTO1.5X1+X2+2.4X3+X42000X1+5X2+X3+3.5X480001.5X1+3X2+3.5X3+X45000X1,X2,X3,X40输入模型的操作作如下::MAX5.24X1+7.3X2+8.34X3+4.18X4!MAX后面必须空一格?ST!ST也可以写SUBJECTTO?1.5X1+1.0X2+2.4X3+1.0X42000!用或而不能用=,=?1.0X1+5.0X2+1.0X3+3.5X48000!?表示当前处于MAX命令状态?1.5X1+3.0X2+3.5X3+1.0X45000!END结束MAX命令状态。变量非负约束X1,X2,?END!X3,X4=0是隐含的,不必也不能输入MAX/MIN命令对模型的输入格式有一些限制,这些限制是:(1)模型中出现的关键词只能是MAX(或MIN),ST(或SUBJECTTO)和END。关键词中不能含有空格。MAX(或MIN),ST(或SUBJECTTO)的右面至少要有一个空格,关键词中字符大写和小写都合法的。(2)变量名不超过8个字符,其中第一个字符必须定字母,其余的可以是字母或数字。这样就可以藉助变量表示变量的实际含义。例如有10种燃料,可以分别记为FUEL01,…,FUEL10等。(3)不等号用<表示≤,用>表示≥。要注意的是当模型(用LOOK命令)输出(到屏幕或打印机)时,不等号分别写成<=和>=。(4)目标函数中不能出现常数项,也不能出现等式,例如:MAX2X1+3X2+5和MAXZ=2X1+3X2都是非法的。(5)无论连目标函数(第一行)或约束条件中,都不能出现括号、乘号。例如:MAX2(X1+X2)和MIN2*X1+3*X2都是非法的。附录2LINDO使用手册306(6)在约束条件中,变量必须在关系符左面,常数必须在关系符右边,例如:3X1+4X2-3<0和3X1<3-4X2都是非法的。(7)模型中系数必须写成整数或小数形式而不能写成指数形式,例如:下列系数的记法是非法的:.258E+5。如系数是小数形式,输入的位数限制定整数最大6位,小数最大5位。(8)除关键字中间,系数中间,变量名中间不能嵌入空格外,模型的其他地方都允许出现空格和回车CR。在模型输入时,空格和回车是等效的。例如,以下的模型输入格式是有效的:maxz=3x1+4x2+6x3-5x4s.t.x1+2x2-x3+2x4≤103x1+x2-3x3+6x4≤25x1x2x3x4≥0:MAX3X1+4X2+6x3-5x4CR?STX1+2x2-x3CR?+2X4<103x1+x2-3x3+6x425END:在用MAX/MIN命令输入模型时,如果模型的一行超过屏幕宽度,只要回车就可以在下一行继续输入。(9)变量的非负约束是隐含的,不需要在模型中加以意义。3、输入模型标题命令TITL为了识别模型相应的问题,LINDO设置了TITL命令,可以对模型作简要的说明,TITL放在模型的第一行,内容放在两个引号之间。同时,为了说明约束的性质,也可以在每个约束的前面加上不超过8个字符的说明。例如:TITLEThisisamaximumprofitproblem:MAX4X1+X2-X3+2X4?ST?RESOURCE)X1-X2+X3-X430?SALE)3X1+X2-X3+2X436?STORAGE)X1+2X2+X3-2X420附录2LINDO使用手册307?END用MAX/MIN命令输入一个模型后,该模型存放在内存中,可以对该模型施加其他命令。内存中只能存放一个模型。如果再次MAX/MIN命令输入另一个模型。内存中的第一个模型将被第二模型代替。如果退出LINDO,内存中有模型也被清除。因此,要保存一个已输入的模型,必须将它存放到磁盘中去,作为磁盘文件保存,模型存盘的命令将在SAVE,SMPS和DIVE命令中讲解。3.全屏幕编辑命令EDITEDIT命令可以用来输入一个新模型。例如:EDIT出现以下编辑窗口,可以在窗口输入、编辑一个模型。输入、编辑完毕以后,按ESC结束编辑,最后一次修改有效;ALT+ESC放弃修改,结束编辑。例如先用EDIT输入以下模型:LINDO/PC5.3©1995LINDOSYSTEMSINC.1MAX4X1+X2-X3+2X42ST3X1–X2+X3-X4=3043X1+X2-X3+2X4=365X1+2X2+X3–2X4=206END...23Esc-ExitwithcompileAltEsc-Exitwithoutcompile用ESC退出编辑并确认修改。EDIT也可以编辑一个已经输入的模型。例如,如果想把上一个已经输入的模型加上标题,约束加上说明,可以用EDIT进入编辑窗口,将模型编辑修改成:LINDO/PC5.3(C)1995LINDOSYSTEMSINC.1TITLThisisamaximumprofitproblem2MAX4X1+X2-X3+2X43ST4RESOURCE)X1-X2+X3-X4305SALES)3X1+X2-X3+2X436附录2LINDO使用手册3086STORAGE)X1+2X2+X3-2X4207END...23Esc-ExitwithcompileAltEsc-Exitwithoutcompile用EDIT命令编辑的模型规模由一定限制,最多只能编辑包含65998个字符的模型。规模更大的模型只能用下面介绍的其他命令来编辑,如ALT、EXT、APPC等。4.模型屏幕显示LOOKLOOK命令是将内存中的模型的一部分或全部在屏幕上显示。该命令的格式是:LOOK[行标识]CR其中行标识可以是某一特定的行号,是一个正整数。1表示第1行即目标函数,2表示第一约束等等,行标识也可以是所要显示的符的范围,如2-5表示显示从第二行到第五行止的模型,行标识也可以是ALL,即显示整个模型,如果行号n省略,则隐含第一行,即LOOKCR