clear
clc
%*****************************************
%初始化顾客源
%*****************************************
%总仿真时间
Total_time = 10
%队列最大长度
N = 10000000000
%到达率与服务率
lambda = 10
mu = 6
%平均到达时间与平均服务时间
arr_mean = 1/lambda
ser_mean = 1/mu
arr_num = round(Total_time*lambda*2)
events = []
%按负指数分布产生各顾客达到时间间隔
events(1,:) = exprnd(arr_mean,1,arr_num)
%各顾客的到达时刻等于时间间隔的累积和
events(1,:) = cumsum(events(1,:))
%按负指数分布产生各顾客服务时间
events(2,:) = exprnd(ser_mean,1,arr_num)
%计算仿真顾客个数,即到达时刻在仿真时间内的顾客数
len_sim = sum(events(1,:)<= Total_time)
%*****************************************
%计算第 1个顾客的信息
%*****************************************
%第 1个顾客进入系统后直接接受服务,无需等待
events(3,1) = 0
%其离开时刻等于其到达时刻与服务时间之和
events(4,1) = events(1,1)+events(2,1)
%其肯定被系统接纳,此时系统内共有
%1个顾客,故标志位置1
events(5,1) = 1
%其进入系统后,系统内已有成员序号为 1
member = [1]
for i = 2:arr_num
%如果第 i个顾客的到达时间超过了仿真时间,则跳出循环
if events(1,i)>Total_time
break
else
number = sum(events(4,member) >events(1,i))
%如果系统已满,则系统拒绝第 i个顾客,其标志位置 0
if number >= N+1
events(5,i) = 0
%如果系统为空,则第 i个顾客直接接受服务
else
if number == 0
%其等待时间为 0
2009.1516
%PROGRAMLANGUAGEPROGRAMLANGUAGE
events(3,i) = 0
%其离开时刻等于到达时刻与服务时间之和
events(4,i) = events(1,i)+events(2,i)
%其标志位置 1
events(5,i) = 1
member = [member,i]
%如果系统有顾客正在接受服务,且系统等待队列未满,则 第 i个顾客进入系统
else len_mem = length(member)
%其等待时间等于队列中前一个顾客的离开时刻减去其到 达时刻
events(3,i)=events(4,member(len_mem))-events(1,i)
%其离开时刻等于队列中前一个顾客的离开时刻加上其服
%务时间
events(4,i)=events(4,member(len_mem))+events(2,i)
%标识位表示其进入系统后,系统内共有的顾客数
events(5,i) = number+1
member = [member,i]
end
end
end
end
%仿真结束时,进入系统的总顾客数
len_mem = length(member)
%*****************************************
%输出结果
%*****************************************
%绘制在仿真时间内,进入系统的所有顾客的到达时刻和离
%开时刻曲线图(stairs:绘制二维阶梯图)
stairs([0 events(1,member)],0:len_mem)
hold on
stairs([0 events(4,member)],0:len_mem,'.-r')
legend('到达时间 ','离开时间 ')
hold off
grid on
%绘制在仿真时间内,进入系统的所有顾客的停留时间和等
%待时间曲线图(plot:绘制二维线性图)
figure
plot(1:len_mem,events(3,member),'r-*',1: len_mem,events(2,member)+events(3,member),'k-')
legend('等待时间 ','停留时间 ')
grid on
当 s 个服务台被占用后,顾客自动离去。这里我们着重介绍如何使用 LINGO 软件中的相关函数。
对于损失制排队模型,其模型的基本参数与等待制排队模型有些不同,我们关心如下指标。
(1)系统损失的概率
其中rho是系统到达负荷 ,s是服务台或服务员的个数。
(2)单位时间内平均进入系统的顾客数( )
(3)系统的相对通过能力( )与绝对通过能力( )
(4)系统在单位时间内占用服务台(或服务员)的均值(即 )
注意:在损失制排队系统中, ,即等待时间为0。
在上述公式,引入 是十分重要的,因为尽管顾客以平均 的速率到达服务系统,但当系统被占满后,有一部分顾客会自动离去,因此,真正进入系统的顾客输入率是 ,它小于
其参数为 。编写LINGO程序如下:
求得系统的顾客损失率为43%,即43%的电话没有接通,有57%的电话得到了服务,通话率为平均每分钟有0.195次,系统的服务效率为43%。对于一个服务台的损失制系统,系统的服务效率等于系统的顾客损失率,这一点在理论上也是正确的。
(1)电话交换台的服务分为两类,第一类内线打外线,其强度为:
第二类时外线打内线,其强度为:
因此,总强度为:
(2)这是损失制服务系统,按题目要求,系统损失率不能超过5%,即:
(3)外线是整数,在满足条件下,条数越小越好。
由上述三条,编写相应的Lingo程序如下:
求得需要15条外线。在此条件下,交换台的顾客损失率为3.65 %,有96.35%的电话得到了服务,通话率为平均每小时185.67次,交换台每条外线的服务效率为64.23%。
求解时,尽量选用简单的模型让LINGO软件求解,而上述程序是解非线性整数规划(尽管是一维的),但计算时间可能会较长,因此,我们选用下面的处理方法,分两步处理。
编写LINGO程序:
求得
第二步,注意到@pel(rho,s)是s的单调递减函数,因此,对s取整数(采用只入不舍原则)就是满足条件的最小服务台数,然后再计算出其它的参数指标。
编写LINGO程序如下:
比较上面两种方法的计算结果,其答案是相同的,但第二种方法比第一种方法在计算时间上要少许多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)