浅析LINGO模型在疏散问题中的应用.docx
《浅析LINGO模型在疏散问题中的应用.docx》由会员分享,可在线阅读,更多相关《浅析LINGO模型在疏散问题中的应用.docx(11页珍藏版)》请在冰豆网上搜索。
浅析LINGO模型在疏散问题中的应用
本科生实践教学活动周实践教学成果
成果形式:
论文
成果名称:
浅析LINGO模型在疏散问题中的应用
学生姓名:
学号:
专业:
班级:
指导教师:
完成时间:
年3月8日
浅析LINGO模型在疏散问题中的应用
摘要
简述LINGO编写格式的特点,需要注意的部分。
LINGO的函数的使用介绍以及对LINGO函数分类和使用详情的介绍,LINGO模型在疏散问题中的应用,并且对疏散问题进行求解,建模。
上机对疏散问题的建模进行检验,并修改。
关键词:
编写格式函数分类疏散问题上机检验修改
目录
一、LINGO的简单介绍1
(一)LINGO编写格式1
1.语句的四大部分1
(二)编写LINGO程序要注意的几点2
(三)LINGO内部函数使用详解2
1.常用数学函数2
2.集合函数3
3.变量界定函数4
4.财务函数4
5.概率函数4
二、LINGO模型在疏散问题中的应用5
(一)对疏散问题的求解5
(二)对疏散问题进行建模6
(三)上机检验8
(四)结论10
三、总结11
一、LINGO的简单介绍
(一)LINGO编写格式
LINGO模型以MODEL开始,以END结束。
中间为语句,分为四大部分(SECTION)。
1.语句的四大部分
(1)集合部分(SETS)
这部分以“SETS:
”开始,以“ENDSETS”结束。
这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。
在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(ATTRIBUTE,类似于数组)。
LINGO中的集合有两类:
一类是原始集合(PRIMITIVESETS),其定义的格式为:
SETNAME/memberlist(or1..n)/:
attribute,attribute,etc
另一类是是导出集合(DERIVEDSETS),即引用其它集合定义的集合,其定义的格式为:
SETNAME(set1,set2,etc。
):
attribute,attribute,etc
如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。
(2)目标与约束
这部分定义了目标函数、约束条件等。
一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。
求解优化问题时,该部分是必须的。
(3)数据部分(DATA)
这部分以“DATA:
”开始,以“ENDDATA”结束。
其作用在于对集合的属性(数组)输入必要的数值。
格式为:
attribut=value_list。
该部分主要是方便数据的输入。
(4)初始化部分(INIT)
这部分以“INIT:
”开始,以“ENDINIT”结束。
作用在于对集合的属性(数组)定义初值。
格式为:
attribute=value_list。
由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。
通常可改变初值来得到不同的解,从而发现更好的解。
(二)编写LINGO程序要注意的几点
1.所有的语句除SETS、ENDSETS、DATA、ENDDATA、INIT、ENDINIT和MODEL,END之外必须以一个分号“;”结尾。
2.LINGO求解非线性规划时已约定各变量非负。
(三)LINGO内部函数使用详解
LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。
1.常用数学函数
@ABS(X)返回变量X的绝对数值。
@COS(X)
返回X的余弦值,X的单位为弧度
@EXP(X)
返回
的值,其中e为自然对数的底,即
@FLOOR(X)
向0靠近返回X的整数部分。
如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3。
@LGM(X)
返回
函数的自然对数值。
@LOG(X)
返回变量X的自然对数值。
@SIGN(X)
返回变量X的符号值,当X<0时为-1;当X>0时为1。
@SIN(X)
返回X的正弦值,X的单位为弧度
@SMAX(X1,X2,...,XN)
返回一列值X1,X2,...,XN的最大值。
@SMIN(X1,X2,...,XN)
返回一列值X1,X2,...,XN的最小值。
@TAN(X)
返回X的正切值,X的单位为弧度
2.集合函数
集合函数的用法如下:
set_operator(set_name|condition:
expression)
其中set_oprator部分是集合函数名(见下),set_name是数据集合名,expression部分是表达式,|condition部分是条件,用逻辑表达式描述(无条件时可省略)。
逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系酸符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于))。
常见的集合函数如下:
@FOR(set_name|constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述。
@MAX(set_name|expression)返回集合上的表达式(expression)的最大值。
@MIN(set_name|expression)返回集合上的表达式(expression)的最小值。
@SUM(set_name|expression)返回集合上的表达式(expression)的和。
@SIZE(set_name)返回数据集set_name中包含元素的个数。
@IN(set_name,set_element)如果数据集set_name中包含元素set_element则返回1,否则返回0。
3.变量界定函数
变量函数对变量的取值范围附加限制,共有四种。
@BND(L,X,U)限制
@BIN(X)限制X为0或1。
@FREE(X)取消对X的符号限制(即可取任意实数值)。
@GIN(X)限制X为整数值。
4.财务函数
返回如下情形下的净现值:
单位时段利率为
,连续
个时段支付,每个时段支付费用,即:
=
返回如下情形下的净现值:
单位时段利率为
,第
个时段支付单位费用,即:
=
5.概率函数
@PSN(X)标准正态分布的分布函数。
@PSL(X)单位正态线性损失函数(即返回
的期望值,其中Z为标准正态随机变量)
@PPS(A,X)均值为A的Possion分布的分布函数(当X不是整数时,采用线性插值进行计算)。
@PPL(X)Possion分布的线性损失函数(即返回
的期望值,其中Z为Possion分布随机变量)
@PBN(P,N,X)二项分布的分布函数当N或X不是整数时,采用线性插值进行计算)。
@PHG(POP,G,N,X)超几何分布的分布函数(当POP,G,N或X不是整数时,采用线性插值进行计算)。
@PFD(N,D,X)自由度为N和D的F分布的分布函数。
@PCX(N,X)自由度为N的
分布的分布函数。
@PTD(N,X)自由度为N的t分布的分布函数。
@RAND(X)返回0与1之间的伪随机数(X为种子数,典型用法为U(I)=@RAND(U(I+1)))。
二、LINGO模型在疏散问题中的应用
(一)对疏散问题的求解
甲市一家大公司由5个部门(A、B、C、D、E)组成。
现要将它的几个部门迁出甲市,迁至乙市或丙市。
除去因政府鼓励这样做以外,还有用房便宜,招工方便等好处。
对这些好处已作出数量估价,所值每年万元数如下表:
部门
迁市
A
B
C
D
E
乙
10
15
10
20
5
丙
10
20
15
15
15
然而,疏散之后各部门间的通讯费用将增加。
部门间每年通讯量如下表:
部门
B
C
D
E
A
0
1000
1500
0
B
1400
1200
0
C
0
2000
D
700
不同城市之间单位通讯量的费用如下表(单位:
元)
市
甲
乙
丙
甲
100
130
90
乙
50
140
丙
50
试求各部门应该置于何市,使年费用最少?
解:
设
其中各部门依次为A、B、C、D、E,各城市依次为甲、乙丙。
令
代表第
个部门迁往第
个城市的新增价值(元),
代表第
个部门与第
个部门的通讯量,
代表第
个城市与第
个城市的单位通讯量的费用
则
(二)对疏散问题进行建模
则可建立如下模型:
Lingo程序如下:
MODEL:
SETS:
part/1..5/;
city/1..3/;
part_city(part,city):
x,a;
part_part(part,part):
t;
city_city(city,city):
c;
ENDSETS
DATA:
a=0,100000,100000,
0,150000,200000,
0,100000,150000,
0,200000,150000,
0,50000,150000;
t=0,0,1000,1500,0,
0,0,1400,1200,0,
0,0,0,0,2000,
0,0,0,0,700,
0,0,0,0,0;
c=100,130,90,
130,50,140,
90,140,50;
ENDDATA
MIN=@SUM(part_part(i,j)|i#LE#4#AND#j#GE#(i+1):
t(i,j)*
@SUM(city_city(l,m):
x(i,l)*x(j,m)*c(l,m)))-
@SUM(part_city:
a*x);
@FOR(part(i):
@SUM(city(j):
x(i,j))=1);!
每个部门只能迁往一个城市
@FOR(part_city(i,j):
@BIN(x(i,j)));END
(三)上机检验
1.第一次上机
2.第二次上机
(四)结论
所求解为:
x(1,3)=1,x(2,3)=1,x(3,3)=x,x(4,3)=1,x(5,3)=1,其它为0,即各部门迁往丙市
最少费用为-360000元。
即这样迁市获利最多,为360000元。
三、总结
通过本次课题研究,对LINGO有了一定的了解,并且可以进行简单的实际建模,对获利最大化提出一些较之可行的建议和意见。
尽管在学习LINGO的过程中出了很多的错误,但是通过多次尝试最终解决了错误,并且从这些常犯的错误中吸取到一些教训,尽量在以后的使用中避免这些错误。