lingo总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.@pel(load,S)(离开概率)
该函数返回值是当到达负荷为load,系统中有S个服务台且不允许排队时系统损失的概率,也就是顾客得不到服务离开的概率(损失制)
3.@pfs(load,S,K)
该函数的返回值是当到达负荷为load,顾客数为K,平行服务台数量为S时,有限源的泊松流服务系统等待或返修顾客数的期望值
#le#(小于等于)
低#and#(逻辑与)#or#(逻辑或)
数学函数:
Lingo提供了大量的标准数学函数:
@abs(x)返回x的绝对值
@sin(x)返回x的正弦值,x采用弧度制
@cos(x)返回x的余弦值
@tan(x)返回x的正切值
@exp(x)返回常数e的x次方
@log(x)返回x的自然对数
@lgm(x)返回x的gamma函数的自然对数
0<=x<=500;0<=y<=500;0<=z<=500;
(500-x)*y=0; (500-y)*z=0;
方案二:@if函数
Lingo解决排队论,排队论x/y/z/a/b/c
1.@peb(load,S)(等待概率)
该函数返回值是当到达负荷为load,系统中有S个服务台且允许排队时系统繁忙的概率,也就是顾客等待的概率(等待制)
Endsets
(不用一一列出所有的成员)
注释是以!开头,以;结束。
有时在定义集时,不写成员,成员在后面再列明。
for example:
max z=3*x1+5*x2
s.t. x1<4
2*x2<12
3*x1+2*x2<=18
一维:
c1*x1+c2*x2+..+cN*xN
sets:
decision/1..n/:c,x;
集(set)
定义原始集的语法规则:集的名字[/集的成员/][:集成员的属性];
注意:用“[]”表示该部分内容可选。
显式的:
1.sets:
students(集的名字)/John ,Jill,Rose ,Mike(集的成员)/:sex,age(集成员的属性);(成员也可以用空格隔开)
Endsets(记得这儿是不用分号的)
8 Cutoff(目标函数的截断值被达到)
9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止)
通常,如果返回值不是0、4或6时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。
用lingo导入数据和导出数据
@file从外部文件中导入数据,该函数可以放到模型的任何位置,格式是@file(’filename’),是.txt文件,在文件中~表示记录结束符,在一个文件中可以把多个量的数据放在一个文件中,之间用~隔开。
闭合式排队模型
设系统内有M个服务台,顾客到达系统的间隔时间和服务台的服务时间均为负指数分布,而系统的容量和潜在的顾客数都为K,顾客到达率为λ,服务台的平均服务率为μ,这样的系统称为闭合式排队模型,记为:M/M/S/K/K
1.平均队长:Ls=@pfs(load,S,K),load=K·λ/μ=KRT
即:系统的负荷=系统的顾客数×顾客到达率×顾客的服务时间
4 Feasible(可行)
5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界)
6 Local Optimum(局部最优)
7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个)
@index(set_name,成员名)【有时不用写set_name】返回成员的位置
@in(set_name,@index(...))【index要写set_name】显示该成员是否在该集中,在,返回1,否则,返回0。
变量界定函数:
@bin(x)限制x为0或1
@bnd(L,x,U)限制L≤x≤U
@free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数
@if函数的使用:
fy=@if(y #gt# 0,60+3*y,2*y);(表示y>0时,fy=60+3*y,否则,等于2*y)
返回Lingo求解模型结束后的状态:
0 Global Optimum(全局最优)
1 Infeasible(不可行)
2 Unbounded(无界)
3 Undetermined(不确定)
等待制排队模型中最常见的模型是:
M/M/S/∞,(输入和服务过程都符合泊松分布)
泊松分布:
1来自百度文库顾客到达相互独立
2.在(t2-t1)很小时,有一个顾客到达的概率与时间t无关
3.对于充分小的时间间隔里有2个或2个以上顾客到达的概率极小,甚至可以忽略
即顾客到达系统的相继到达时间间隔独立,且服从参数为λ(平均到达率,倒数是平均到达时间)的负指数分布(即输入过程为过程),服务台的服务时间也独立同分布,且服从参数为u(平均服务率,倒数是平均服务时间)的负指数分布,而且系统空间无限,允许永远排队(等待制)
endsets
@sum(decision(j):c(j)*x(j))
多维:
a11*x1+a12*x2+...+a1n*xn<=b1
.
.
.
am1*x1+am2*x2+...+amn*xn<=bm
decision/1..n/:C,x;
constraint/1..m/:B;
matrix(constraint,decision):A;
@sign(x)如果x<0返回-1;否则,返回1
@floor(x)返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。
@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值
@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值
@size(set_name)返回集的成员个数
C=3 5;
B=4 12 18;
A=1 0
0 2
3 2;
lingo是不区分大小写的
数据的定义:
sets:
decision/1 2/:C,X;
constraint/1..3/:B;
Matrix (constraint,decision):A;
endsets;
max=@sum(decision(i):c(i)*x(i));
2.单位时间平均进入系统的顾客数:
λe=λ(K-Ls)=R(K-Ls)=Re
3.顾客处于正常情况的概率:P=(K-Ls)/K
4.平均逗留时间、平均等待队长和平均排队等待时间
Ws=Ls/λe=Ls/Re Lq=Ls-λe/μ=Ls-Re·T
Wq=Ws-1/μ=Ws-T
5.每个服务台的工作强度:Pwork=λe/(Sμ)
@gin(x)限制x为整数
min = @smax(f(1),f(2),f(3));(首先求f(i)的最小值,然后求三个最小值中的最大值)
在默认情况下,Lingo规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。
@text把数据输入到文本文件中。
@OLE是从EXCEL中引入或输出数据的接口函数,.xls文件(excel文件)(?)
Lingo用作整数规划:
0-1整数规划的特点:a.有或没有,
b.选择或不选它,
c.有两个相互排斥的约束条件,通过0-1整数规划使它们只起一个作用,
d.多种方案可供选择,通过0-1整数规划可以避免分段讨论的繁琐。
当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开。这些表达式将被作为约束加到模型中。当使用其余的三个集循环函数时,expression_list只能有一个表达式。如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集。
@for(constraint(i):
@sum(decision(j)):
a(i,j)*x(j))<B(i));
Data:
c=3,5;
B=4 12 18;
A=1 0
0 2
3 2;
注意项:(1)将目标函数的表示方式从“min”变成了“min=”
(2)“ST”在LINGO模型中不再需要,所以被删除了
(3)每个系数与变量间增加了运算符“*”(即乘号不能省略)
5.系统服务台的效率:η=Ls/S
6.顾客在系统内平均逗留时间:Ws=1/μ=T
注意:在损失制系统中,Wq=0,即等待时间为0
混合制排队模型
混合制排队模型通常记为:M/M/S/K,即有S个服务台或服务员,系统空间容量为K,当K个位置已被顾客占用时,新到的顾客自动离去,当系统中有空位置时,新到的顾客进入系统排队等待
2.单位时间内平均进入系统的顾客数:
λe=Re=λ(1-Plost)=R(1-Plost)
3.系统的相对通过能力(Q)与绝对通过能力(A)
Q=1-Plost, A=λe·Q=λ(1-Plost)2 =Re·Q= R(1-Plost)2
4.系统在单位时间内占用服务台的均值:Ls=λe/μ=Re·T
注意:在损失制系统中,Lq=0,即等待队长为0
其中T/(S-load)可以看成一个合理的长度间隔,
3.顾客的平均逗留时间、队长和等待队长(little公式)
Ws= Wq+1/μ=Wq+T Ls=λ·Ws=RWs Lq=λ·Wq=R Wq
损失制排队模型
损失制排队模型通常记为
M/M/S/S,
当S个服务器被占用后,顾客自动离去
1.系统损失的概率:Plost=@pel(load,S)
(4)每行(目标、约束和说明语句)后面均增加了一个分号“;”
(5)模型结束标志“END”也被删除了(LINGO中只有当模型以“MODEL:”开始时才能以“END”结束)。
逻辑运算符:
这些运算符的优先级由高到低为:
高#not#(非)
#eq#(等于)#ne#(不相等)#gt#(大于)#ge#(大于等于)#lt#(小于)
等待制排队论的重要指标:
队长等待队长平均逗留时间平均服务时间
1.顾客等待的概率: Pwait=@peb(load,S),
其中S是服务台或服务员的个数,load=λ/μ=RT,其中R=λ,T= 1/μ,R是顾客的平均到达率,T是平均服务时间
2.顾客的平均等待时间:Wq= Pwait·T/(S-load),
在lingo中分段函数可以分解成这样来解:
购买量不超过500吨时的单价为10000元/吨;购买量超过500吨单不超过1000吨时,超过500吨的部分8000元/吨;购买量超过1000吨时,超过1000吨的部分6000元/吨
方案一:设以10000元购买的购买量为x,8000元y,6000元z;
购买的成本为:10000*x+8000*y+6000*z
(3)set_ index_list是集索引列表;
(4)conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环。
集循环函数:
@function(setname[(set_index_list)[|conditional_qualifier]]: expression_list);
(1)@function相应于下面罗列的四个集循环函数之一(@for、@sum、@max、@min);
(2)setname是要遍历的集;
2.集成员不放在集定义中,而在随后的数据部分来定义:
sets:
students:sex,age;
endsets
data:
students,sex,age= John 1 16
Jill 0 14
Rose 0 17
Mike 1 13;
enddata
隐式
sets:
students(集的名字)/1..19(集的成员)/:sex,age(集成员的属性);(成员也可以用空格隔开)
该函数返回值是当到达负荷为load,系统中有S个服务台且不允许排队时系统损失的概率,也就是顾客得不到服务离开的概率(损失制)
3.@pfs(load,S,K)
该函数的返回值是当到达负荷为load,顾客数为K,平行服务台数量为S时,有限源的泊松流服务系统等待或返修顾客数的期望值
#le#(小于等于)
低#and#(逻辑与)#or#(逻辑或)
数学函数:
Lingo提供了大量的标准数学函数:
@abs(x)返回x的绝对值
@sin(x)返回x的正弦值,x采用弧度制
@cos(x)返回x的余弦值
@tan(x)返回x的正切值
@exp(x)返回常数e的x次方
@log(x)返回x的自然对数
@lgm(x)返回x的gamma函数的自然对数
0<=x<=500;0<=y<=500;0<=z<=500;
(500-x)*y=0; (500-y)*z=0;
方案二:@if函数
Lingo解决排队论,排队论x/y/z/a/b/c
1.@peb(load,S)(等待概率)
该函数返回值是当到达负荷为load,系统中有S个服务台且允许排队时系统繁忙的概率,也就是顾客等待的概率(等待制)
Endsets
(不用一一列出所有的成员)
注释是以!开头,以;结束。
有时在定义集时,不写成员,成员在后面再列明。
for example:
max z=3*x1+5*x2
s.t. x1<4
2*x2<12
3*x1+2*x2<=18
一维:
c1*x1+c2*x2+..+cN*xN
sets:
decision/1..n/:c,x;
集(set)
定义原始集的语法规则:集的名字[/集的成员/][:集成员的属性];
注意:用“[]”表示该部分内容可选。
显式的:
1.sets:
students(集的名字)/John ,Jill,Rose ,Mike(集的成员)/:sex,age(集成员的属性);(成员也可以用空格隔开)
Endsets(记得这儿是不用分号的)
8 Cutoff(目标函数的截断值被达到)
9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止)
通常,如果返回值不是0、4或6时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。
用lingo导入数据和导出数据
@file从外部文件中导入数据,该函数可以放到模型的任何位置,格式是@file(’filename’),是.txt文件,在文件中~表示记录结束符,在一个文件中可以把多个量的数据放在一个文件中,之间用~隔开。
闭合式排队模型
设系统内有M个服务台,顾客到达系统的间隔时间和服务台的服务时间均为负指数分布,而系统的容量和潜在的顾客数都为K,顾客到达率为λ,服务台的平均服务率为μ,这样的系统称为闭合式排队模型,记为:M/M/S/K/K
1.平均队长:Ls=@pfs(load,S,K),load=K·λ/μ=KRT
即:系统的负荷=系统的顾客数×顾客到达率×顾客的服务时间
4 Feasible(可行)
5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界)
6 Local Optimum(局部最优)
7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个)
@index(set_name,成员名)【有时不用写set_name】返回成员的位置
@in(set_name,@index(...))【index要写set_name】显示该成员是否在该集中,在,返回1,否则,返回0。
变量界定函数:
@bin(x)限制x为0或1
@bnd(L,x,U)限制L≤x≤U
@free(x)取消对变量x的默认下界为0的限制,即x可以取任意实数
@if函数的使用:
fy=@if(y #gt# 0,60+3*y,2*y);(表示y>0时,fy=60+3*y,否则,等于2*y)
返回Lingo求解模型结束后的状态:
0 Global Optimum(全局最优)
1 Infeasible(不可行)
2 Unbounded(无界)
3 Undetermined(不确定)
等待制排队模型中最常见的模型是:
M/M/S/∞,(输入和服务过程都符合泊松分布)
泊松分布:
1来自百度文库顾客到达相互独立
2.在(t2-t1)很小时,有一个顾客到达的概率与时间t无关
3.对于充分小的时间间隔里有2个或2个以上顾客到达的概率极小,甚至可以忽略
即顾客到达系统的相继到达时间间隔独立,且服从参数为λ(平均到达率,倒数是平均到达时间)的负指数分布(即输入过程为过程),服务台的服务时间也独立同分布,且服从参数为u(平均服务率,倒数是平均服务时间)的负指数分布,而且系统空间无限,允许永远排队(等待制)
endsets
@sum(decision(j):c(j)*x(j))
多维:
a11*x1+a12*x2+...+a1n*xn<=b1
.
.
.
am1*x1+am2*x2+...+amn*xn<=bm
decision/1..n/:C,x;
constraint/1..m/:B;
matrix(constraint,decision):A;
@sign(x)如果x<0返回-1;否则,返回1
@floor(x)返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。
@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值
@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值
@size(set_name)返回集的成员个数
C=3 5;
B=4 12 18;
A=1 0
0 2
3 2;
lingo是不区分大小写的
数据的定义:
sets:
decision/1 2/:C,X;
constraint/1..3/:B;
Matrix (constraint,decision):A;
endsets;
max=@sum(decision(i):c(i)*x(i));
2.单位时间平均进入系统的顾客数:
λe=λ(K-Ls)=R(K-Ls)=Re
3.顾客处于正常情况的概率:P=(K-Ls)/K
4.平均逗留时间、平均等待队长和平均排队等待时间
Ws=Ls/λe=Ls/Re Lq=Ls-λe/μ=Ls-Re·T
Wq=Ws-1/μ=Ws-T
5.每个服务台的工作强度:Pwork=λe/(Sμ)
@gin(x)限制x为整数
min = @smax(f(1),f(2),f(3));(首先求f(i)的最小值,然后求三个最小值中的最大值)
在默认情况下,Lingo规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。
@text把数据输入到文本文件中。
@OLE是从EXCEL中引入或输出数据的接口函数,.xls文件(excel文件)(?)
Lingo用作整数规划:
0-1整数规划的特点:a.有或没有,
b.选择或不选它,
c.有两个相互排斥的约束条件,通过0-1整数规划使它们只起一个作用,
d.多种方案可供选择,通过0-1整数规划可以避免分段讨论的繁琐。
当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开。这些表达式将被作为约束加到模型中。当使用其余的三个集循环函数时,expression_list只能有一个表达式。如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集。
@for(constraint(i):
@sum(decision(j)):
a(i,j)*x(j))<B(i));
Data:
c=3,5;
B=4 12 18;
A=1 0
0 2
3 2;
注意项:(1)将目标函数的表示方式从“min”变成了“min=”
(2)“ST”在LINGO模型中不再需要,所以被删除了
(3)每个系数与变量间增加了运算符“*”(即乘号不能省略)
5.系统服务台的效率:η=Ls/S
6.顾客在系统内平均逗留时间:Ws=1/μ=T
注意:在损失制系统中,Wq=0,即等待时间为0
混合制排队模型
混合制排队模型通常记为:M/M/S/K,即有S个服务台或服务员,系统空间容量为K,当K个位置已被顾客占用时,新到的顾客自动离去,当系统中有空位置时,新到的顾客进入系统排队等待
2.单位时间内平均进入系统的顾客数:
λe=Re=λ(1-Plost)=R(1-Plost)
3.系统的相对通过能力(Q)与绝对通过能力(A)
Q=1-Plost, A=λe·Q=λ(1-Plost)2 =Re·Q= R(1-Plost)2
4.系统在单位时间内占用服务台的均值:Ls=λe/μ=Re·T
注意:在损失制系统中,Lq=0,即等待队长为0
其中T/(S-load)可以看成一个合理的长度间隔,
3.顾客的平均逗留时间、队长和等待队长(little公式)
Ws= Wq+1/μ=Wq+T Ls=λ·Ws=RWs Lq=λ·Wq=R Wq
损失制排队模型
损失制排队模型通常记为
M/M/S/S,
当S个服务器被占用后,顾客自动离去
1.系统损失的概率:Plost=@pel(load,S)
(4)每行(目标、约束和说明语句)后面均增加了一个分号“;”
(5)模型结束标志“END”也被删除了(LINGO中只有当模型以“MODEL:”开始时才能以“END”结束)。
逻辑运算符:
这些运算符的优先级由高到低为:
高#not#(非)
#eq#(等于)#ne#(不相等)#gt#(大于)#ge#(大于等于)#lt#(小于)
等待制排队论的重要指标:
队长等待队长平均逗留时间平均服务时间
1.顾客等待的概率: Pwait=@peb(load,S),
其中S是服务台或服务员的个数,load=λ/μ=RT,其中R=λ,T= 1/μ,R是顾客的平均到达率,T是平均服务时间
2.顾客的平均等待时间:Wq= Pwait·T/(S-load),
在lingo中分段函数可以分解成这样来解:
购买量不超过500吨时的单价为10000元/吨;购买量超过500吨单不超过1000吨时,超过500吨的部分8000元/吨;购买量超过1000吨时,超过1000吨的部分6000元/吨
方案一:设以10000元购买的购买量为x,8000元y,6000元z;
购买的成本为:10000*x+8000*y+6000*z
(3)set_ index_list是集索引列表;
(4)conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环。
集循环函数:
@function(setname[(set_index_list)[|conditional_qualifier]]: expression_list);
(1)@function相应于下面罗列的四个集循环函数之一(@for、@sum、@max、@min);
(2)setname是要遍历的集;
2.集成员不放在集定义中,而在随后的数据部分来定义:
sets:
students:sex,age;
endsets
data:
students,sex,age= John 1 16
Jill 0 14
Rose 0 17
Mike 1 13;
enddata
隐式
sets:
students(集的名字)/1..19(集的成员)/:sex,age(集成员的属性);(成员也可以用空格隔开)