LINGO程序有以下特点Word格式.docx
《LINGO程序有以下特点Word格式.docx》由会员分享,可在线阅读,更多相关《LINGO程序有以下特点Word格式.docx(6页珍藏版)》请在冰豆网上搜索。
=”可分别用“<
”及“>
”代替。
★一行中感叹号“!
”后面的文字为是注释语句,可增强程序的可读性,不参与模型的建立。
名称
含义
IPBound
(整数规划的界)
显示整数规划的界(对最大化问题显示上界;
对最小化问题,显示下界):
“N/A”含义同上。
Branches
(分枝数)
显示分枝定界算法已经计算的分枝数:
“N/A”含义同上。
ElapsedTime
(所用时间)
显示计算所用时间(秒):
“0.00”说明计算太快了,用时还不到0.005秒。
UpdateInterval
(刷新本界面的时间间隔)
显示和控制刷新本界面的时间间隔:
“1”表示1秒;
用户可以直接在界面上修改这个时间间隔。
InterruptSolver
(中断求解程序)
当模型规模比较大时(尤其对整数规划),可能求解时间会很长,如果不想再等待下去时,可以在程序运行过程中用鼠标点击该按钮终止计算。
求解结束后这个按钮变成了灰色,再点击就不起作用了。
Close(关闭)
该按钮只是关闭状态窗口,并不终止计算。
如果你关闭了状态窗口,将来随时可以选择WINDOW|OPENSTATUSWINDOW菜单命令来再次打开这个窗口。
输出结果表示的意思是:
“LPOPTIMUMFOUNDATSTEP2”
表示单纯形法在两次迭代(旋转)后得到最优解
“OBJECTIVEFUNCTIONVALUE1)7.4545450”
表示最优目标值为7.4545450.(注意:
在LINDO中目标函数所在的行总是被认为是第1行,这就是这里“1)”的含义)。
“VALUE”
给出最优解中各变量(VARIABLE)的值:
X=1.272727,Y=1.636364.
“REDUCEDCOST”给出最优的单纯形表中目标函数行(第1行)中变量对应的系数(即各个变量的检验数(也称为判别数)).其中基变量的reducedcost值一定为0;
对于非基变量(注意:
非基变量本身取值一定为0),相应的reducedcost值表示当该非基变量增加一个单位(其他非基变量保持不变)时目标函数减少的量(对max型问题)。
本例最优解中两个变量都是基变量,所以对应的REDUCEDCOST的值均为0。
“SLACKORSURPLUS(松驰或剩余)”给出约束对应的松驰变量的值:
第2、3行松驰变量均为0,说明对于最优解来讲,两个约束(第2、3行)均取等号,即都是紧约束。
“DUALPRICES”给出对偶价格的值:
第2、3行对偶价格分别为.090909,.545455。
“NO.ITERATIONS=2”表示用单纯形法进行了两次迭代(旋转)。
LINDO模型的一些注意事项
1. 变量名由字母和数字组成,但必须以字母开头,且长度不能超过8个字符,不区分大小写字母,包括关键字(如MAX、MIN等)也不区分大小写字母。
2. 对目标函数和约束用行号(行名)进行标识,这些标识会在将来的求解结果报告中用到。
行名可以和变量名一样命名,也可以只用数字命名,还可以含有中文字符,但长度同样不能超过8个字符。
为了方便将来阅读求解结果报告,建议用户总是自觉地对每个约束进行命名。
行名结束标志符号、即右括号“)”必须是英文字符,否则会出现错误。
3. 可以用“TITLE”语句对输入的模型命名,用法是在TITLE后面写出其名字(最多72个字符,可以有汉字),在程序中单独占一行,可以在模型的任何地方。
模型命名的第一个作用类似于对模型的注释和说明。
模型命名的另一个目的,是为了方便将来阅读求解结果报告。
因为用户有可能同时处理多个模型,很容易混淆模型与求解结果的对应关系。
这时如果对不同模型分别进行了命名,就可以随时(例如在求解当前模型前)使用菜单命令“FILE|TITLE”将当前模型的名字显示在求解结果报告窗口中,这样就容易判别每个求解结果与每个模型的对应关系。
4. 模型中以感叹号“!
”开头的是注释行(注释语句,或称为说明语句),可以帮助他人或以后自己理解这个模型。
实际上,每行中“!
”符号后面的都是注释或说明。
注释语句中可以使用汉字字符。
5. 变量不能出现在一个约束条件的右端(即约束条件的右端只能是常数);
变量与其系数间可以有空格(甚至回车),但不能有任何运算符号(包括乘号“*”等)。
6. 模型中不接受括号“()”和逗号“,”等符号(除非在注释语句中)。
例如:
4(X1+X2)需写为4X1+4X2;
“10,000”需写为10000。
7. 表达式应当已经经过化简。
如不能出现2X1+3X2-4X1,而应写成-2X1+3X2等。
8. LINDO中已假定所有变量非负。
若要取消变量的非负假定,可在模型的“END”语句后面用命令“FREE”。
例如,在“END”语句后输入FREEvname,可将变量vname的非负假定取消。
9. 可以在模型的“END”语句后面用命令“SUB”(即设置上界(SETUPPERBOUND)的英文缩写)设定变量的上界,用命令“SLB”(即设置下界(SETLOWERBOUND)的英文缩写)设定变量的上下界。
其用法是:
“SUBvnamevalue”将变量vname的上限设定为value;
“SLB”的用法类似。
用“SUB”和“SLB”表示的上下界约束不计入模型的约束,因此LINDO也不能给出其松紧判断和敏感性分析。
10. 数值均衡化考虑:
如果约束系数矩阵中各非零元的绝对值的数量级差别很大(相差1000倍以上),则称其为数值不均衡的。
为了避免数值不均衡引起的计算问题,使用者应尽可能自己对矩阵的行列进行均衡化。
此时还有一个原则,即系数中非零元的绝对值不能大于100000或者小于.0001。
LINDO不能对LP中的系数自动进行数值均衡化,但如果LINDO觉得矩阵元素之间很不均衡,将会给出警告。
11.简单错误的检查和避免:
输入模型时可能会有某些输入错误.当问题规模较大时,要查找错误是比较困难的。
在LINDO中有一些可帮助寻找错误的功能,其中之一就是菜单命令“Report|Picture(Alt+5)”,它的功能是可以将目标函数和约束表达式中的非零系数通过列表(或图形)显示出来。
例2.2菜单命令“Report|Picture(Alt+5)”的功能
对如下的一个有错误的模型输入:
MIN5A0+6A1+2A2+4B0+3B1+7B2+2C0+9C1+8C2
SUBJECTTO
2)A0+Al+A2<
=8
3)B0+B1+B2<
=9
4)C0+C1+C2<
=6
5)A0+B0+CO=6
6)A1+B1+C1=5
7) A2+B2+C2=9
END
用Report|Picture命令,将弹出一个对话框,在弹出的对话框中采用缺省选项(即不采用下三角矩阵形式,并以图形方式显示),直接按“OK”按钮可得到一个输出图形。
可以从图中很直观地发现,其实错误原因只不过是在输入5)行的表达式中C0与CO弄混了(英文字母O与数字0弄混了)。
在图中,还可以用鼠标控制显示图形的缩放,这对于规模较大的模型是有用的。
例2.3三个变量范围限定命令(FREE、SUB、SLB)的作用
求解如下的LP问题:
这个模型中对变量x没有非负限制,对y有上限限制,对z有下限限制。
用FREE、SUB、SLB三个命令可以实现这些功能。
具体输入如下:
MAX2x–3y+4z
S.T.
con2)4x+3y+2z<
=10
con3)-3x+5y-z<
12
con4)x+y+5z>
8
con5)-5x-y-z>
2
freex!
说明:
变量x没有非负限制
suby20!
变量y的上界为20
slbz30!
变量z的下界为30
解得到的结果:
最大值为122,最优解为x=-17,y=0,z=39。
可以看出y的上界(20)在最优解中并没有达到,z的下界(30)也没有达到,因此模型中去掉“suby20”和“slbz30”两个语句,得到的结果应该是不变的。
但由于最优解中x的取值为负值,所以“freex”这个语句确实是不能少的。
不妨试一下,去掉这个语句后效果会怎样?