数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2464|回复: 5

跪求LINGO的教程!!!

[复制链接]
发表于 2004-7-27 01:10:49 | 显示全部楼层 |阅读模式
<>那位大侠有LINGO的教程请发给小弟!</P>
<><a href="mailtempiredu@163.com" target="_blank" >empiredu@163.com</A></P>
<>先谢谢了!!</P>
发表于 2004-7-27 08:55:14 | 显示全部楼层
<><a href="http://netroom.hbu.edu.cn/personal/cnc_maths/zyxz/zyxz.htm" target="_blank" >http://netroom.hbu.edu.cn/personal/cnc_maths/zyxz/zyxz.htm</A></P><>上面可能有你想要的,自己去看看吧。</P>
发表于 2004-7-27 10:31:09 | 显示全部楼层
<>我也要!!</P>
发表于 2004-7-28 02:39:14 | 显示全部楼层
用LINDO、LINGO 解运筹学问题(数学规划方面)
<a href="http://www.lindo.com/" target="_blank" >http://www.lindo.com/</A>
一、 软件简介
LINDO 是一种专门用于求解数学规划问题的软件包。由于LINDO 执行速度很
快、易于方便输入、求解和分析数学规划问题。因此在数学、科研和工业界得到
广泛应用。LINDO 主要用于解线性规划、非线性规划、二次规划和整数规划等问
题。也可以用于一些非线性和线性方程组的求解以及代数方程求根等。LINDO 中
包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者
建立规划问题时调用。
一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划
(LP—Linear Programming)。整数规划(IP—Integer Programming)问题。
其中LINDO 6 .1 学生版至多可求解多达300 个变量和150 个约束的规划问题。
其正式版(标准版)则可求解的变量和约束在1 量级以上。
LINDO 则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP
—QUARATIC PROGRAMING)其中LINGO 6.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
(1 g/cm^2=98Pa)
表2
飞机汽油 辛烷数 蒸汽压力(g/cm^2) 产量需求(L)
1 &gt;=91 &lt;=9.96*10^(-2) 越多越好
2 &gt;=100 &lt;=9.96*10^(-2) &gt;=250000
建模过程 略(详见《运筹学基础》P54—55)
目标函数:max z=x1+x2+x3+x4
约束条件:x5+x6+x7+x8&gt;=250000
x1+x5&lt;=380000
x2+x6&lt;=265200
x3+x7&lt;=408100
x4+x8&lt;=130100
2.85x1-1.42x2+4.27x3-18.49x4&gt;=0
2.85x5-1.42x6+4.27x7-18.49x8&gt;=0
16.5x1+2.0x2-4.0x3+17x4&gt;=0
7.5x5-7.0x6-13.0x7+8.0x8&gt;=0
xj&gt;=0(j=1,2...,8)
下面我们就用LINDO 来解这一优化问题。
输入语句:
max(不区分大小写) x1+x2+x3+x4
ST(大写或写subject to)
x5+x6+x7+x8&gt;=250000
x1+x5&lt;=380000
x2+x6&lt;=265200
x3+x7&lt;=408100
x4+x8&lt;=130100
2.85x1-1.42x2+4.27x3-18.49x4&gt;=0
2.85x5-1.42x6+4.27x7-18.49x8&gt;=0
16.5x1+2.0x2-4.0x3+17x4&gt;=0
7.5x5-7.0x6-13.0x7+8.0x8&gt;=0
end
然后再按运算符键即可得结果。
LINDO 是规定Xj 非负的,我们可发现输入方式与我们的数学书写的形式基本一
致,运算后,计算机会问您是否需要灵敏度分析,我们选择是,结果如下:
LP OPTIMUM FOUND AT STEP 6
OBJECTIVE FUNCTION VALUE
1) 933400.0
VARIABLE VALUE REDUCED COST
X1 161351.734375 0.000000
X2 265200.000000 0.000000
X3 408100.000000 0.000000
X4 98748.265625 0.000000
X5 218648.265625 0.000000
X6 0.000000 0.000000
X7 0.000000 0.000000
X8 31351.734375 0.000000
ROW SLACK OR SURPLUS DUAL PRICES
2) 0.000000 -1.000000
3) 0.000000 1.000000
4) 0.000000 1.000000
5) 0.000000 1.000000
6) 0.000000 1.000000
7) 0.000000 0.000000
8) 43454.000000 0.000000
9) 3239024.250000 0.000000
10) 1890675.875000 0.000000
NO. ITERATIONS= 6
RANGES IN WHICH THE BASIS IS UNCHANGED:
OBJ COEFFICIENT RANGES
VARIABLE CURRENT ALLOWABLE ALLOWABLE
COEF INCREASE DECREASE
X1 1.000000 0.000000 1.154137
X2 1.000000 INFINITY 0.000000
X3 1.000000 INFINITY 0.000000
X4 1.000000 0.000000 0.000000
X5 0.000000 1.154137 0.000000
X6 0.000000 0.000000 INFINITY
X7 0.000000 0.000000 INFINITY
X8 0.000000 0.000000 0.000000
RIGHTHAND SIDE RANGES
ROW CURRENT ALLOWABLE ALLOWABLE
RHS INCREASE DECREASE
2 250000.000000 186222.062500 234752.984375
3 380000.000000 234752.984375 15247.017578
4 265200.000000 30601.410156 265200.000000
5 408100.000000 156685.250000 10176.581055
6 130100.000000 2350.135254 36184.207031
7 0.000000 43454.000000 669046.000000
8 0.000000 43454.000000 INFINITY
9 0.000000 3239024.250000 INFINITY
10 0.000000 1890675.875000 INFINITY
下面给出其结果的一般解释:
“LP OPTIMUM FOUND AT STEP 6”表示LINDO 在(用单纯形法)6次迭代或旋转
后得到最优解。
“OBJECTIVE FUNCTION VALUE 1)933400.0”表示最优目标值为933400。
“VALUE”给出最优解中各变量的值。
“SLACK OR SURPLUS”给出松弛变量的值。上例中SLK 2= 第二行松弛变量=0
(模型第一行表示目标函数,所以第二行对应第一个约束)
“REDUCE COST”列出最优单纯形表中判别数所在行的变量的系数,表示当变量
有微小变动时,目标函数的变化率,其中基变量的reduce cost 值应为0,对
于非基变量Xj 相应的reduce cost 值表示Xj 增加一个单位(此时假定其他非
基变量保持不变)时目标函数减小的量(max 型问题)。上例中:X1 对应的 reduce
cost 值为0,表示当X1=1 时,目标函数值不变。
“DUAL PRICE”(对偶价格)列出最优单纯形表中判别数所在行的松弛变量的系
数,表示当对应约束有微小变动时,目标函数的变化率,输出结果中对应每一个
约束有一个对偶价格。若其数值为X,表示对应约束中不等式右端项若增加一个
单位,目标函数将增加X个单位(max 型问题)。上例中:第二行对应的对偶价
格值应为-1表示当约束 2)X5 + X6 + X7 + X8&gt;250000 变为 2)X5 + X6 +
X7 + X8&gt;250001 时,
目标函数值=933400-1=933399
当REDUCE COST 或DUAL PRICE 的值为0。表示当微小扰动不影响目标函数。
有时,通过分析DUAL PRICE,也可对产生不可行问题的原因有所了解。
灵敏度分析:如果做敏感性分析,则系统报告当目标函数的费用系数和约束右端
项在什么范围变化(此时假定其他系数保持不变)时,最优基保持不变。报告中
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“的”Tab lean“选项。
注意事项:
1) 目标函数及各约束条件之间一定要有“Subject to (ST) ”分开。
2) 变量名不能超过8个字符。
3) 变量与其系数间可以有空格,单不能有任何运算符号(如乘号“*”等)。
4) 要输入&lt;=或&gt;=约束,相应以&lt;或&gt;代替即可。
5) 一般LINDO 中不能接受括号“()“和逗号“,“,例:400(X1+X2) 需写
成400X1+400X2;10,000 需写成10000。
6) 表达式应当已经过简化。不能出现 2 X1+3 X2-4 X1,而应写成-2X1+3 X2。
例2.(选自《运》P94 习题2.4;整数规则)
有四个工人,要分别指派他们完成四项不同的工作,每个人做各项工作所消耗的
时间如表。问应该如何指派,才能使总的消耗时间为最小?


所耗
时间
工人
A B C D
甲 15 18 21 24
乙 19 23 22 18
丙 26 17 16 19
丁 19 21 23 17
这是一道典型的整数规则问题。
我们记派第I 去做工作记为Xij
注意到每人只能做一项工作。每项工作一人做。我们得到目标函数为约束条件:
min
15x11+19x21+26x31+19x41+18x12+23x22+17x32+21x42+24x13+22x23+16x33+23x
43+24x14+18x24+19x34+17x44
ST
x11+x12+x13+x14=1
x21+x22+x23+x24=1
x31+x32+x33+x34=1
x41+x42+x43+x44=1
x11+x21+x31+x41=1
x12+x22+x32+x42=1
x13+x23+x33+x43=1
x14+x24+x34+x44=1
end
int 16
运行后我们可得到最优目标值为70
当 ,其余为0 时。(具体的Reports 我们略去)
在用LINDO 解整数规划(IP)问题时,只要在END 后加上标识即可,其中解0/1
规划的用命令。
INT name 或 INT n (n 指前n 个变量标识为0/1 型)解混合型整数规划则用GIN
来标识。
LINDO 解整数规划对变量的限制为50 个。(指LINDO 6.1 学生版)。所以说,
尽管LINDO 对整数规划问题是很有威力。要有效地使用还是需要一定技术的。这
是因为,人们很容易将一个本质上很简单的问题列成一个输入模型。从而有可能
会导致一个冗长的分支定界计算。
例3 用LINDO 解目标规划
由于LINDO 不能直接求解目标规划问题,这是否就意味着LINDO 失去了效力呢?
不是的。
由求解目标规划问题的有效算法——序贯式算法可知其实目标规划我们常采取
分解成前面二种办法而已。
例如算:min a=((d1_+d1),(2d2+d3))
G1:x1-10x2+d1_-d1=50
G2:3x1+5x2+d2_-d2=20
G3:8x1+6x2+d3_-d3=100
xi(i=1,2),dj_,dj(j=1,2,3)&gt;=0
先求目标函数的最优值
min d1_+d1
ST
x1-10x2+d1_-d1=50
3x1+5x2+d2_-d2=20
end
求得D1_+D1 的最优值为0
然后再求
min 2d2+d3
ST
x1-10x2+d1_-d1=50
3x1+5x2+d2_-d2=20
8x1+6x2+d3_-d3=100
d1_+d1=0
end
即可算得第二级最优值2d2+d3
例4 LINDO 虽亦可求解二次规划问题。(但我认为它在输入对不如用LINGO
方便,用LINDO 输入时要先作偏导数计算不如LINGO 哪样可直接输入。(选自《运
筹学基础》P190.习题4.10
min f(x)=(x1-1)^2+(x2-2)^2
x2-x1=1
x1+x2&lt;=2
x1&gt;=0,x2&gt;=0
先来说一说如何使用LINGO
一般来说LINGO 多用于解决大规模数学规划。
用时要注意以下几点:
(1) 每条语句后必须使用分号“;”结束。问题模型必须由MODEL 命令开始,
END 结束。
(2) 用MODEL 命令来作为输入问题模型的开始,格式为MODEL:statement (语
句)。
(3) 目标函数必须由“min =”或“max =”开头。
则上面的例子的输入就为
modul:
min=(x1-1)^2+(x2-2)^2;
x2-1=1;
x1+x2&lt;=2;
end
我们即可得到最优值0.5。当X1=0.5,X2=1.5,及灵敏度分析。我们还可得作图
分析。
对于大规模规划求解请参见LINGO 的HELP 文件。
一.计算机代数系统 <a href="http://www.fosu.edu.cn/li/math/SXRJ/QITA/DSXT.htm" target="_blank" >http://www.fosu.edu.cn/li/math/SXRJ/QITA/DSXT.htm</A>
二.Matlab <a href="http://www.fosu.edu.cn/li/math/SXRJ/QITA/LINDOLINGO.htm" target="_blank" >http://www.fosu.edu.cn/li/math/SXRJ/QITA/LINDOLINGO.htm</A>
三.Mathematica <a href="http://www.fosu.edu.cn/li/math/SXRJ/QITA/LINDOLINGO.htm" target="_blank" >http://www.fosu.edu.cn/li/math/SXRJ/QITA/LINDOLINGO.htm</A>
四.统计软件SAS
五.运筹学软件及教程 (LINDO,LINGO)
 楼主| 发表于 2004-7-28 06:57:04 | 显示全部楼层
<>请问有LINGO比较详细的教程吗?我也有一点,但介绍得太简单了。不找到那位大侠有比较详细的教程!</P>
发表于 2004-8-11 22:27:11 | 显示全部楼层
<>在数模网站就有,你自己找一下</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-28 12:48 , Processed in 0.053006 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表