LINDO软件求线性规划整数规划和01规划.docx
- 文档编号:8805318
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:28
- 大小:482.64KB
LINDO软件求线性规划整数规划和01规划.docx
《LINDO软件求线性规划整数规划和01规划.docx》由会员分享,可在线阅读,更多相关《LINDO软件求线性规划整数规划和01规划.docx(28页珍藏版)》请在冰豆网上搜索。
LINDO软件求线性规划整数规划和01规划
LINDO软件简介/求解线性规划问题
LINDO是一种专门用于求解数学规划问题的软件包。
由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。
因此在数学、科研和工业界得到广泛应用。
LINDO/GO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。
也可以用于一些非线性和线性方程组的求解以及代数方程求根等。
LINDO/GO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。
一般用LINDO(LinearInteractiveandDiscreteOptimizer)解决线性规划(LP—LinearProgramming)。
整数规划(IP—IntegerProgramming)问题。
其中LINDO6.1学生版至多可求解多达300个变量和150个约束的规划问题。
其正式版(标准版)则可求解的变量和约束在1量级以上。
LINGO则用于求解非线性规划(NLP—NON—LINEARPROGRAMMING)和二次规则(QP—QUARATICPROGRAMING)其中LINGO6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦在10^4量级以上。
虽然LINDO和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。
要学好用这两个软件最好的办法就是学习他们自带的HELP文件。
下面拟举数例以说明这两个软件的最基本用法。
(例子均选自张莹《运筹学基础》)
例1.(选自《运筹学基础》P54.汽油混合问题,线性规划问题)
一种汽油的特性可用两个指标描述:
其点火性用“辛烷数”描述,其挥发性用“蒸汽压力”描述。
某炼油厂有四种标准汽油,设其标号分别为1,2,3,4,其特性及库存量列于下表1中,将上述标准汽油适量混合,可得两种飞机汽油,某标号为1,2,这两种飞机汽油的性能指标及产量需求列于表2中。
问应如何根据库存情况适量混合各种标准汽油,使既满足飞机汽油的性能指标,而产量又为最高。
表1
标准汽油
辛烷数
蒸汽压力(g/cm^2)
库存量
1
107.5
7.11*10^(-2)
380000
2
93.0
11.38*10^(-2)
262200
3
87.0
5.69*10^(-2)
408100
4
108.0
28.45*10^(-2)
130100
(1g/cm^2=98Pa)
表2
飞机汽油
辛烷数
蒸汽压力(g/cm^2)
产量需求(L)
1
>=91
<=9.96*10^(-2)
越多越好
2
>=100
<=9.96*10^(-2)
>=250000
建模过程 略(详见《运筹学基础》P54—55)
目标函数:
maxz=x1+x2+x3+x4
约束条件:
x5+x6+x7+x8>=250000
x1+x5<=380000
x2+x6<=265200
x3+x7<=408100
x4+x8<=130100
2.85x1-1.42x2+4.27x3-18.49x4>=0
2.85x5-1.42x6+4.27x7-18.49x8>=0
16.5x1+2.0x2-4.0x3+17x4>=0
7.5x5-7.0x6-13.0x7+8.0x8>=0
xj>=0(j=1,2...,8)
下面我们就用LINDO来解这一优化问题。
输入语句:
max(不区分大小写)x1+x2+x3+x4
ST(大写或写subjectto)
x5+x6+x7+x8>=250000
x1+x5<=380000
x2+x6<=265200
x3+x7<=408100
x4+x8<=130100
2.85x1-1.42x2+4.27x3-18.49x4>=0
2.85x5-1.42x6+4.27x7-18.49x8>=0
16.5x1+2.0x2-4.0x3+17x4>=0
7.5x5-7.0x6-13.0x7+8.0x8>=0
end
然后再按运算符键即可得结果。
LINDO是规定Xj非负的,我们可发现输入方式与我们的数学书写的形式基本一致,运算后,计算机会问您是否需要灵敏度分析,我们选择“是”,结果如下:
下面给出其结果的一般解释:
“LPOPTIMUMFOUNDATSTEP6”表示LINDO在(用单纯形法)6次迭代或旋转后得到最优解。
“OBJECTIVEFUNCTIONVALUE1)933400.0”表示最优目标值为933400。
“VALUE”给出最优解中各变量的值。
“SLACKORSURPLUS”给出松弛变量的值。
上例中SLK2=第二行松弛变量=0(模型第一行表示目标函数,所以第二行对应第一个约束)
“REDUCECOST”列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时,目标函数的变化率,其中基变量的reducecost值应为0,对于非基变量Xj相应的reducecost值表示Xj增加一个单位(此时假定其他非基变量保持不变)时目标函数减小的量(max型问题)。
上例中:
X1对应的reducecost值为0,表示当X1=1时,目标函数值不变。
“DUALPRICE”(对偶价格)列出最优单纯形表中判别数所在行的松弛变量的系数,表示当对应约束有微小变动时,目标函数的变化率,输出结果中对应每一个约束有一个对偶价格。
若其数值为X,表示对应约束中不等式右端项若增加一个单位,目标函数将增加X个单位(max型问题)。
上例中:
第二行对应的对偶价格值应为-1表示当约束 2)X5+X6+X7+X8>250000变为 2)X5+X6+X7+X8>250001时,
目标函数值=933400-1=933399
当REDUCECOST或DUALPRICE 的值为0。
表示当微小扰动不影响目标函数。
有时,通过分析DUALPRICE,也可对产生不可行问题的原因有所了解。
灵敏度分析:
如果做敏感性分析,则系统报告当目标函数的费用系数和约束右端项在什么范围变化(此时假定其他系数保持不变)时,最优基保持不变。
报告中INFINITY表示正无穷,如上例:
目标函数中X1的变量系数为1,当它在[1-1.154137,1-0]=
[-0.154137,1]变化时,最优基保持不变。
第一个约束右端项为250000,当它在[250000-234752.984375,250000+186222.0625]=[15247.015625,436222.0625]范围变化时,最优基保持不变。
当您要判断表达式输入是否有错误时,也可以使用菜单“Reports”的“Picture”选项。
若想获得灵敏度分析,可用“Reports”的“Rang”选项。
若需显示单纯形表,可执行“Reports”的“Tablean”选项。
注意事项:
1)目标函数与各约束条件之间一定要有“Subjectto(ST)”分开。
2)变量名不能超过8个字符。
3)变量与其系数间可以有空格,但不能有任何运算符号(如乘号“*”等)。
4)要输入<=或>=约束,相应以<或>代替即可。
5)一般LINDO中不能接受括号“()”和逗号“,”,例:
400(X1+X2)需写成400X1+400X2;10,000需写成10000。
6)表达式应当已经过简化。
不能出现2X1+3X2-4X1,而应写成-2X1+3X2。
LINDO常用命令注释表
(6.1版是面对用户的窗口,只需在窗口菜单上找到相应的操作菜单后单击即可,当然,后面的命令注释是有助于了解常用操作的命令菜单的。
)
LINDO软件包可以用来求解以自然格式输入的线性规划,整数规划及二次规划问题.下面即是一个常见问题的有效输入格式:
MAX2X+3Y
ST
4X+5Y<9
7X+6Y<13
END
GO
进入LINDO后,屏幕上出现":
",表示进入可接受命令的状态.此时键入LINDO的有效命令即可执行.
需要时,可键入"COMMANDS"即可得到LINDO的所有有效命令.如需得到其中某个命令的帮助信息,可键入"HELPname",其中"name"为该命令名.例如,初学者通过键入"HELPMAX"可以了解怎样输入一个LP问题的数学表达式,.
如要结束一个临时的问题输入,只需键入"END"或一个回车符,即可回到命令状态模式":
".欲知某命令的具体功效,执行该命令即可.
可求解的问题规模:
输入项最大规模
---------------------------------------------------------------------------
非零元4000
列201
行101
整型变量200
变量(行)名字符数8
LINDO命令类型目录.欲知某个具体命令的功能,键入"HELP"+"命令名".
1)信息类命令
HELPCOMLOCALCATTIME
2)输入类命令
MAXMINRETRRMPSTAKELEAVRDBCFBR
3)演示类命令
PICTABLLOOKNONZSHOCSOLURANGEBPICCPRIRPRI
4)文件输出类命令
SAVEDIVERVRTSMPSSDBCFBS
5)问题求解类命令
GOPIV
6)编辑类命令
ALTEXTDELSUBAPPCSLBFREEEDIT
7)退出命令
QUIT
8)与整数,二次型,及参数规划相关的命令
INTQCPPARAPOSDTITANBIPGINIPTOL
9)交互式参数命令
WIDTHTERSVERBBATPAGEPAUS
10)使用者应用程序
USER
11)其它
INVSTATBUGDEBSETTITL
*****************************************************************LINDO命令中文注释如下(按分类序):
1)INFORMATION
HELPCOMLOCALCATTIME
HELP命令:
键入"HELP"会显示出LINDO的一般信息.通过键入"HELPcommand",LINDO可帮你了解某个具体的命令,其中"command"是命令名.
COMMAND命令:
给出LINDO命令类型目录.
LOCAL命令:
给出该程序的版本信息.
CATEGORY命令:
列出LINDO命令类型,并可按提示有选择地给出某类型下的所有命令.
TIME命令:
显示执行LINDO后累计的CPU时间.
2)INPUT
MAXMINRETRRMPSTAKELEAVRDBCFBR
MAX/MIN命令:
用于输入一个包含目标函数,约束条件在内的LP模型.
输入程序如下:
输入"MAX"(或"MIN"),继之以自然格式的目标函数作为第一行;再输入"SUBJECTTO"(可简写为"ST"),后面跟约束条件行.最后,输入"END"回到命令状态模式.以后只需给出"GO"命令即可开始优化求解过程.
其中,变量名可以由1—8个字母或数字型的字符构成,且第一个字符必须是字母.变量系数不能是指数型,例如:
.258E+29形式的系数是不允许的.任一系数位数为6.5DIGITS.关键词("MAX","ST","END"...)及各行之间必须用一个或多个空格分隔开.空格可以出现在一行之中,但不能出现在变量名中.一个回车符等价于一个空格.
下面是同一问题的两种合法的输入方式:
1)MIN2X+3YSUBJECTTO-5X-2Z<=10
+10X-Y>5END
2)MIN2X+3Y
ST-5X-2Z
<10
10X-Y>+5
END
另外,任一约束可自由选择一个名称来代替行号,例如:
:
DEMAND)10X-Y>5
RETRIEVE命令:
执行该命令可直接从硬盘上获得一个问题模型.LINDO会为你提示可供选择的具体的文件名或UNITNUMBER.能被RETRIEVE的模型文件必须是以前经"SAVE"命令存入的.
RMPS命令:
转化一个MPS格式文件,形成问题输入.该MPS格式请见IBMMPSX手册
TAKE命令:
用该命令可执行由一系列LINDO命令组成的文件.该文件内容只能同终端输入一致,例如:
文件中不能有行号.且文件中最后一个命令应为"LEAVE".
LEAVE命令:
该命令表示结束一个"TAKE"文件的输入.任一TAKE文件中的最后一个命令必须是”LEAVE”.
RDBC命令:
给出当前模型的一个初始解.该解是以前由"SDBC"命令存入的.
FBR命令:
从一个由FBS命令建立的文件中得到一个(可行)基.一个与该(可行)基匹配的数学问题表达式必须是内存中已有的.
3)DISPLAY
PICTABLLOOKNONZSHOCSOLURANGEBPIC
CPRIRPRI
PICTURE命令:
给出一个LP问题中系数矩阵的简图.该命令有助于DEBUG一个模型.下面是图中对应字母代表的数字大小:
Z.000000--.000001
Y.000001--.000009
X.000010--.000099
W.000100--.000999
V.001000--.009999
U.010000--.099999
T100000--.999999
A1.000001--10.000000
B10.000001--100.000000
C100.000001--1000.000000
D1000.000001--10000.000000
E10000.000001--100000.000000
F100000.000001--1000000.000000
G>1000000
TABLEAU命令:
显示当前单纯形表中的系数.
LOOK命令:
可用"LOOK"查看当前问题模型的全部或部分.键入"LOOKALL"可看全部问题模型.键入"LOOKrow1,row2"可看行row1至行row2.
模型中系数只能有5个小数位,最多有9位整数.任何更大的数只能显示为*****.
NONZEROES命令:
显示一个小型的解报告,其中只有非零的变量及相应的行.注意:
"NONZ"命令并不能求解问题,所以需首先执行"GO"命令,且"NONZ"只有在设置了"TERSE"交互型模式后才能显示其作用.
SHOCOLUMN命令:
键入"SHOCvariable-name"可显示出变量variable-name的系数列.
SOLUTION命令:
显示解的标准报告.若要存到硬盘上,请见"DIVERT"命令.若需要更简明的解报告,请见"NONZ","CPRI"及"RPRI"命令.
RANGE命令:
显示关于RHS(右端项)及OBJ(目标函数)的范围报告.
BPICTURE命令:
按上一次转置/三角化的行序显示当前(可行)基的逻辑图.
4)OUTPUT
SAVEDIVERVRTSMPSSDBCFBS
CPRI/RPRI命令:
可有选择地显示列(用CPRI)或行(用RPRI)的有关信息.CPRI的命令格式如下:
CPRIprint-list:
conditional-expression
例如,执行
CPRINP:
N="M%%X".AND.D>0
将显示满足一定条件的列的名称及原始值(PRIMALVALUE),其条件为:
列名的第一个字符=M,第四个字符=X,且有一对偶(DUALACTIVITY)大于零.
如果"print-list"一项被省略了,将只显示匹配的数目.下面是print-list及conditional-expression中有关列/行特征的常用符号及意义:
N=NAME(名称)
P=PRIMALVALUE(相当于行的松驰量)
D=DUALVALUE(相当于列的REDUCEDCOST)
R=RIM(OBJ(目标函数),列系数;行的RHS(右端项))
U=SIMPLEUPPERBOUND(上界),L=SIMPLELOWERBOUND(下界)
T=键("C","I",or"F";"<","=",OR">")
Z=一列或一行中的非零元.
%=名称(N)中的不确定字符
其它一些有用的符号有:
算术运算符逻辑运算符关系运算符顺序运算符
+-/*^.AND.><=#()
LOG()EXP().OR.
ABS().NOT.
SAVE命令:
将当前的问题模型用压缩的LINDO格式存储到一个文件中.该问题模型可由"RETR"命令重新提取.
DIVERT命令:
要求你提供一个文件名,随后所有的结果输出(如解集报告等),将转至该文件中,直至你给出一个RVRT(REVERT)命令为止.
RVRT命令:
重新使以后的所有结果输出都回到终端.该命令的作用与"DIVERT"命令相反.
SMPS命令:
将当前的问题模型用MPS格式存储到文件中.细节参看IBMMPSX手册.
SDBC命令:
用DATABASE格式存储一列.变量名称,大小,REDUCEDCOST,上界SUB和下界SLB都以(A8,2G15.8,A1,2G15.8)格式存储.
FBS命令:
将当前的(可行)基存入一个文件.若重新提取,可参见FBR命令.
5)SOLUTION
GOPIV
GO命令:
求解当前的问题模型.该模型在求解过程中不会被改变.若在GO之后有一正整数,表示用单纯形法枢变(PIVOT)的次数.
PIVOT命令:
演示单纯形方法的每一步(PIVOTSTEP).如果键入"PIVOT"+变量名,则该变量会被输入到解中,同时会输出该变量所在的行号.
6)PROBLEMEDITING
ALTEXTDELSUBAPPCSLBFREEEDIT
ALTER命令:
用"ALTER"可编辑当前的问题模型.使用格式为:
"ALTERrow-idvar-id"."row-id"是需要改动的行的行号,"var-id"是需要改动的变量系数的变量名.随后,LINDO会提示你输入一个新的值.如果想改动RHS(右端项),DIRECTION(不等号方向)或某个行的名称,"var-id"一项可用"RHS","DIR",或"NAME".
注:
-对目标函数而言,有效的DIRECTIONS有"MAX"或
"MIN";对所有其它行可用"<","=",或"<".
-请用"DELETE"命令,而勿用"ALTER"来消去一行.
EXTEND命令:
可为一个以前定义的问题模型增添约束行.输入新的行,不要再键入"MAX","MIN"或"SUBJECTTO"这样的关键词.新的行将会被附在原问题模型的最后.键入"END"以结束.
DELETE命令:
键入"DELETErow-id"可从当前的问题模型中消除行"row-id".也可键入"DELETErow1row2"消去行row1至行row2."DELETEALL"可用来清除当前的整个问题模型.
SUB命令:
键入"SUBvar-idbound"可以输入或改变一个变量的上界,其中"var-id"是变量名,而"bound"是作为上界的具体数值.对大问题而言,SUB用于表示象X<10这样的约束是比较有效的.
APPENDCOLUMN命令:
键入"APPCvar-id"可为问题模型添加以"var-id"命名的新的一列.随后是关于该对应变量出现的行/系数值.每行有一对行/系数值;行和系数值要用一个空格分开.输入A0作为行名可结束.若以"RHS"为列名,将使输入成为新的RHS(右端项).
SLB命令:
键入"SLBvar-idbound"可以输入或改变一个变量的下界,其中"var-id"是变量名,而"bound"是作为下界的具体数值.对大问题而言,SUB用于表示象X>10这样的约束是比较有效的.
FREE命令:
键入:
FREEX可使当前数学表达式中的X成为一个自由变量,既无上界亦无下界.
EDIT命令:
LINDO转为全屏幕编辑状态.光标可游动于问题模型中.其它有用的编辑设置包括:
Cntrl-S光标移动到当前行的开始
Cntrl-E光标移动到当前行的结尾
Cntrl-rightarrow光标移动到当前词的结尾
Cntrl-leftarrow光标移动到当前词的开始
用EDIT命令编辑的问题模型不能超过30998个字符.问题若更大可用ALTER,DEL和EXTEND命令.
7)QUIT
QUIT
QUIT命令:
"QUIT"用于退出LINDO.任何未存储下来的问题模型会被丢失!
8)INTEGER,QUADRATIC,ANDPARAMETRICPROGRAMS
INTQCPPARAPOSDTITANBIPGINIPTOL
INTEGER命令:
INTEGER命令可将问题模型中的变量标为0/1型.第一种格式为"INTEGERn",其中n是整型变量的个数.LINDO要求整型变量应放在问题模型的最前面.第二种格式为"INTEGERvar-id",其中"var-id"是变量名.
执行GO命令后,将会显示一系列渐优的整数规划解.
QCP命令:
"QCP"用于求解二次规划问题.例如:
对于
MIN3X*X+Y*Y-X*Y+.4Y
ST
1.2X+.9Y>1.1
X+Y=1
Y<.7
该问题通过在实际约束前增加有关变量的一阶条件转化为线性(互补)型.这需
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINDO 软件 线性规划 整数 规划 01