matlab仿真多服务台排队系统
《系统仿真与matlab 》综合试题题目:编号:难度系数:17
姓名班级
学号联系方式成绩***自动化**********
《系统仿真与matlab 》综合试题.....................................................................................................0
摘要...........................................................................................................................................1
1. 要求分析.....................................................................................................................................2
2. 问题分析.....................................................................................................................................2
3. 模型假设.....................................................................................................................................3
4. 模型分析.....................................................................................................................................3
4.1排队系统构成.....................................................................................................................3
4.1.1到达过程..................................................................................................................3
4.1.2排队过程..................................................................................................................3
4.1.3服务过程..................................................................................................................4
4.1.4系统性能..................................................................................................................4
4.2参数分布与建模依据..........................................................................................................4
4.2.1非负指数分布..........................................................................................................5
4.2.2泊松分布..................................................................................................................5
5. M/M/N多服务台模型............................................................................................................... 5
5.1多服务台模型......................................................................................................................5
5.2服务利用率..........................................................................................................................7
5.3平均队长..............................................................................................................................7
5.4平均等待时间......................................................................................................................7
6. 程序设计.....................................................................................................................................8
6.1运算流程图..........................................................................................................................8
6.2动画流程图..........................................................................................................................9
7. 系统仿真结果...........................................................................................................................10
7.1程序界面介绍....................................................................................................................10
8. 系统评估与难点分析...............................................................................................................12
8.1系统评估............................................................................................................................12
8.2难点评估............................................................................................................................12
9. 参考文献...................................................................................................................................12
10. 附录...........................................................................................................................................13
10.1模型数据计算程序..........................................................................................................13
10.2M/M/N模型计算主要程序............................................................................................... 14
摘要
排队是在日常生活中经常遇到的现象,如顾客到商店购买物品,病人到医院看病常常要排队。由于服务机构容量的限制,到达的顾客往往不能立即得到服务,而出现了排队现象。排队论(又称随机服务系统理论)就是通过对排队系统进行研究从而建立数学模型的一种理论。
本系统主要基于排队论中多服务系统模型,利用matlab7.0实现模型的建立于仿真,并且通过动画的形式使使用者对整个仿真模型拥有一个直观的认识。关键词:多服务员排队系统排队论MATLAB 仿真GUI
1. 要求分析
仿真系统以运筹学中排队论为数学基础,根据其中的多服务台负指数分布排队系统建立仿真模型。
对于排队服务系统,顾客往往注重排队顾客是否太多、等待时间是否太长,而服务员则关心她的空闲时间。因此队长、等待时间以及服务利用率等指标可以衡量系统性能。多服务排队系统(M/M/N模型)中,按照顾客到达的时间概率分布为泊松分布,顾客服务时间的长短服从负指数分布的情况,对排队系统进行仿真。
其过程如下图:
2. 问题分析
根据系统要求,设计过程中主要需要解决一下问题
1.利用MATLAB 所提供的GUI 工具,设计系统界面。
2.根据输入参数,建立服务模型,使顾客到达率符合泊松分布,顾客服务时间符合负指数分布,并由数学关系得到平均等待时间、平均队长、服务利用率。3.通过输入参数,利用MATLAB 图形功能实现系统动画仿真。
4.对整体系统进行调整,检验系统稳定性与正确性,完善系统功能。5.对整个设计过程进行评估。
3. 模型假设
根据系统设计要求与实际情况,服务系统基于以下假设:
1.顾客源是无穷的;
2.排队长度没有限制;
3.到达系统的顾客按先到先服务原则依次进入服务;
4.服务员在仿真过程中没有休假;
5.顾客到达时排成一队,当有服务台空闲时进入服务状态;
6.单位时间内到达的顾客数量服从泊松分布;
7.顾客所需的服务时间服从负指数分布;
8.各服务台服务无相互影响且平均服务时间相同。
4. 模型分析
4.1排队系统构成
系统设计过程中,将排队过程分为到达过程,排队过程,服务过程三部分。
4.1.1到达过程
到达过程主要针对顾客到达情况,对于不同的模型背景,顾客到达情况有不同的限制,此次系统设计过程中顾客到达基于以下假设:
1. 顾客源是无限的。
2. 顾客单个到来,且相互独立。
3. 顾客到达的时间服从泊松分布,且到达过程是平稳的。
4.1.2排队过程
排队过程规定顾客在排队过程中的排队规则,即规定顾客在排队系统中按怎样的规则、次序接收服务的,本次系统设计采用以下排队规则:
1. 顾客到达时若所有服务台均被占用,则顾客均选择排队等候。
2. 顾客的服务次序采取先到先服务。
3. 队列数目为单列,顾客不会在排队过程中中途退出。
4.1.3服务过程
服务过程规定顾客在接收服务过程中的服务规则,本次系统设计采用一下服务规则:
1. 服务机构为多服务台并联型(包括单服务台的特殊情况),各服务台独立为不同顾客提供服务。
2. 服务采用先到先服务的原则,未设置服务优先级。
4.1.4系统性能
根据设计要求,系统性能参数主要包括以下部分
1. 平均队长:服务过程中顾客数的数学期望。
2. 服务利用率:服务台使用频率的数学期望。
3. 平均等待时间:指一个顾客在排队系统中排队等待时间的数学期望。
4.2参数分布与建模依据
系统中参数分布主要利用泊松分布和非负指数分布,其涉及的主要变量符号如下表所示:符号说明
顾客到达时间参数
顾客服务时间参数
出现某种状态的概率单位人数/分人数/分\
\
人
人
分钟
分钟s p 服务利用率平均排队长平均队长平均逗留时间平均等待时间s s
q
4.2.1非负指数分布
指数分布是单参数λ的非对称分布,记作Exp (λ) ,概率密度函数为:
-λt ⎧⎪λe , (t ≥0)f (t )=⎨⎪(t
它的数学期望为1λ,方差为1
λ。
指数分布是唯一具有无记忆性的连续型随机变量,即有P (X >t +s |X >t )=P (X >s ),在排队论、可靠性分析中有广泛应用。本文将用负指数分布来产生顾客的服务时间。
4.2.2泊松分布
泊松分布与指数分布有密切的关系。当顾客平均到达率为常数λ的到达间隔服从指数分布时,单位时间内到达的顾客数K 服从泊松分布,即单位时间内到达k 位顾客的概率为
P =k ! k k -λ(2)
记作Poisson(λ) 。泊松分布在排队服务、产品检验、生物与医学统计、天文、物理等领域都有广泛应用。本文将用泊松分布来产生单位时间内到达的顾客数目。
5. M/M/N多服务台模型
5.1多服务台模型
根据模型分析中对系统的假设,系统具有N 个独立服务台,且服务时间均服从参数为μ的负指数分布。顾客到达时间服从参数为λ的负指数分布并且到达过程是平稳的。
记p n =P {N =n }(n =0, 1, 2 )为系统达到平稳状态后的队长N 的概率分布,根据
排队论有关方法可以得到:
λ
和n =λ, (n =0, 1, 2 )(3)
μ
记服务强度ρ,s n ⎧n μ, =⎨⎩s μ, n =1, 2 s n =s , s +1, (4)
ρ
,则当ρ
⎧⎪⎪⎪=C n ⎨⎪⎪⎪⎩(λμ), n =1, 2 , s n λ(λμ)⎛ s ⎫ μ⎪⎪⎝⎭n =(λμ), n ≥s n (6)
s ! ⋅-故
⎧n
⎪ρp , n =1, 2, s ⎪⎪0=⎨n ⎪ρ⎪-p 0, n ≥s ⎪⎩s ! p n (7)
其中⎡s -1ρ⎤ρ+p =⎢∑⎥⎣n =0-ρs ⎦0n s -1(8)
为系统空闲的概率。
5.2服务利用率
由公式(8),可以得到服务利用率:
⎡s -1ρ⎤ρ+P =1-⎢∑⎥n =0-ρs ⎦⎣S n s -1(9)
5.3平均队长
由公式(7)(8),可以得到平均队长:
L =L s p +ρ(10)
其中L p 为平均等待人数且:
5.4平均等待时间
系统的平均等待时间可以有Little 公式求得:
W q =Lp
λ(12)
6. 程序设计开始输入参数参数是否正确?
Y 计算, 显示结果END
N 6.1运算流程图
6.2
动画流程图
7. 系统仿真结果
7.1程序界面介绍
程序运行时界面如下:
通过选择仿真类型可以在单服务台系统和多服务台系统之间切换,在输入框中输入有关参数,并按下“计算”按键,系统将计算有关参数,并显示出来。
下面以平均到达率0.9,平均服务率0.4,服务台数3
为例,仿真结果如下:
计算结束后,单击“动画”按钮,可以观看仿真动画:
从动画界面可以看到,实时服务台数,空闲服务台数,实时队列长度,顾客总数统计均可通过右侧显示框实时显示,服务动画通过圆点显示顾客运动状态。在动画状态下,可以通过按下“STOP ”停止动画显示。
若输入参数不符合系统运行条件,按下“计算”后系统将会显示“错误警告”,
如图所示:
8. 系统评估与难点分析
8.1系统评估
1.
2. 经实际运行测试,系统可以准确实现对多服务台问题(包括单服务台问题)的分析处理,参数计算均符合理论结果。系统仿真动画可以定性的对多服务问题进行动画模拟,为使用者提供直观印象。
3. 系统仿真动画侧重于考虑对模型性能的反映,在界面上为进行进一步处理,美观程度略显不足。
4. 整个系统基于理想化的M/M/N模型,与实际情况存在一定的差异,仿真结果无法很好的满足实际需求。
8.2难点评估
系统设计过程中难点主要在于两方面:
一是对于问题的建模与数学计算,由于MATLAB 提供了丰富的数学函数,在很大程度上简化了建模的难度。
二是动画的实现,其主要难度在于动画的运行需基于一个特定的时间轴,满足一个指定的时间分布。为了解决排队队列和服务台队列中时间点的更新,在设计中才用了了数据结构队列的思想,使动画能够按照要求进行。
9. 参考文献
[1]
[2]
[3]
[4]王小平齐欢. 系统建模与仿真. 清华大学出版社[M],2004.7运筹学教材编写组. 运筹学(第三版). 清华大学出版社[M],2005.6陈垚光. 精通MATLAB GUI 设计. 电子工业出版社[M].2011罗华飞.MATLAB GUI 设计学习笔记. 北京航空航天大学出版社[M].2011
10. 附录
10.1模型数据计算程序
%-------------------------------------------------------------------------%参数计算函数
%-------------------------------------------------------------------------%---Executes on button press in js.
function js_Callback(hObject,eventdata, handles)
%hObject handle to js (seeGCBO)
%eventdata reserved -to be defined in a future version of MATLAB %handles structure with handles and user data (seeGUIDATA) global mode %仿真类型选择
global daoda1%顾客到达率
global fuwu1%单个服务台服务率
global tai1%服务台数
%axes(handles.myaxes);
%读取到达率,转换为数字
daoda =str2num(get(handles.ddl,'string'));
%读取服务率,转换为数字
fuwu =str2num(get(handles.fwl,'string'));
%tai=str2num(get(handles.fwts,'string'));
%switchmode
%case'd'
%tai =1;
%case's'
%tai =str2num(get(handles.fwts,'string'));
%end
%判断仿真类型
switch mode
case'd' %单服务台模式
liyong =daoda/fuwu;%获得服务强度
%----以下为仿真模型参数计算
if (liyong>0)&&(liyong0)&&(fuwu>0)AP =zhuangtai(fuwu,daoda,1,liyong);
Lq =(liyong)*liyong*AP/((1-liyong)^2);
Ls =Lq +daoda/fuwu;
Wq =Lq/daoda;
Ps =1-AP;
daoda1=daoda;
fuwu1=fuwu;
tai1=1;
else
errordlg('输入错误,请重新输入',' 错误');
end
case's' %多服务模式
tai =str2num(get(handles.fwts,'string'));
liyong =daoda/(fuwu*tai)
if (liyong>0)&&(liyong0)&&(fuwu>0)&&(tai>0)
AP =zhuangtai(fuwu,daoda,tai,liyong);
Lq =((tai*liyong)^tai)*liyong*AP/(factorial(tai)*(1-liyong)^2);Ls =Lq +daoda/fuwu;
Wq =Lq/daoda;
Ps =1-AP;
daoda1=daoda;
fuwu1=fuwu;
tai1=tai;
else
errordlg('输入错误,请重新输入',' 错误');
end
otherwise
errordlg('请选择仿真类型',' 错误');
end
%显示平均等待时间,平均队长,服务利用率
set(handles.spjdd,'string',num2str(Wq));
set(handles.spjdc,'string',num2str(Ls));
set(handles.sfwlyl,'string',num2str(Ps));
10.2M/M/N模型计算主要程序
%动画制作
%---Executes on button press in dh.
function dh_Callback(hObject,eventdata, handles)
%hObject handle to dh (seeGCBO)
%eventdata reserved -to be defined in a future version of MATLAB %handles structure with handles and user data (seeGUIDATA) global daoda1
global fuwu1
global tai1
global stp
stp =0;
axes(handles.myaxes);
N =10000;
%获得到达率与服务率、服务台数
daoda2=1/daoda1;
fuwu2=1/fuwu1;
tai2=tai1;
%num_ser=0;
%num_wait=0;
%num_leave=0;
%利用泊松分布获得到达时间间隔与服务时间
time_arrive=(ceil(poissrnd(daoda2,1,N)));
time_ser=(ceil(exprnd(fuwu2,1,N)));
%延长各时间,避免出现连续间隔为0导致结果错误time_arrive=time_arrive+0.1;
time_ser=time_ser+0.1;
%time_arrive_sum=cumsum(time_arrive(1,:));
%time_ser_sum=cumsum(time_ser(1,:));
%time_leave(1)=time_arrive(1)+time_ser(1);
%fork=2:N
%time_leave(k)=time_leave(k-1)+time_ser(k);
%end
%-------绘制入口
X0=[4040606040];
Y0=[0202000];
plot(X0,Y0);
fill(X0,Y0,'b');
text(45,11,'\fontsize{20}入口');
hold on
%-------绘制服务台
X1=[3535656535];
Y1=[[1**********]0];
plot(X1,Y1);
fill(X1,Y1,'Y');
text(43,92,'\fontsize{20}服务台');
hold on
%-------绘制出口
X2=[[1**********]0];
Y2=[[1**********]0];
plot(X2,Y2);
fill(X2,Y2,'b');
text(85,92,'\fontsize{20}出口');
hold on
%-------绘制服务信息显示区
X3=[0020200];
Y3=[010010000];
plot(X3,Y3);
fill(X3,Y3,'r');
text(5,95,'\fontsize{10}服务台数');
text(2,75,'\fontsize{10}空闲服务台数');
text(5,55,'\fontsize{10}队列长度');
text(5,35,'\fontsize{10}顾客总数');
text(5,15,'\fontsize{10}欢迎光临');
plot([0,20],[10,10]);
plot([0,20],[20,20]);
plot([0,20],[30,30]);
plot([0,20],[40,40]);
plot([0,20],[50,50]);
plot([0,20],[60,60]);
plot([0,20],[70,70]);
plot([0,20],[80,80]);
plot([0,20],[90,90]);
hold on
%--------绘制排队等候区
X4=[3535656535];
Y4=[5070705050];
plot(X4,Y4);
fill(X4,Y4,'g');
text(43,62,'\fontsize{20}排队区');
hold on
%--------绘制各区域顾客(通过原点表示)
a0=50;
b0=10;
r0=plot(a0,b0,'.');
a1=50;
b1=60;
r1=plot(a1,b1,'.');
a2=50;
b2=90;
r2=plot(a2,b2,'.');
a3=90;
b3=90;
r3=plot(a3,b3,'.');
%------------------------------------
w =0;%等待人数
f =0;%服务人数
s =0;%顾客总数
speed =0.1;%动画速度
set(r0,'EraseMode','xor','MarkerSize',18);
set(r1,'EraseMode','xor','MarkerSize',18);
set(r2,'EraseMode','xor','MarkerSize',18);
%获取系统时间
clk =clock;
%time_clk=clk(6)+clk(5)*60+clk(4)*60*60+clk(3)*24*60*60;%出于实际考虑,计数时间以一天为一次循环
time_clk=clk(6)+clk(5)*60+clk(4)*60*60;
time_now=time_clk;
%显示总服务台数
str2=num2str(tai2);
text(8,85,str2,'fontsize',20);
time_leave=0;%用于存取顾客离开时间
%Xa与Ya 为服务信息显示区坐标,用于擦出前一次数据Xa=[0020200];
%------执行动画
while 1
if(stp==1)
h_axes=findobj(gcf,'type','axes');
h_children_axes=allchild(h_axes);
delete(h_children_axes);
break;
end
time =clock; %循环获取当前时间
%time1=time(6)+time(5)*60+time(4)*60*60+time(3)*24*60*60;time1=time(6)+time(5)*60+time(4)*60*60;
%获取下一位顾客到达时间
time_temp=time_clk+time_arrive(s+1);
if (time1>time_temp)
%--------有顾客到达
time_clk=time1;
s =s+1;
%更新顾客总数
str1=num2str(s);
Ya=[2030302020];
fill(Xa,Ya,'r');
text(8,25,str1,'fontsize',20);
%----服务台空闲且等待区无人
if (f
f =f+1;%更新新服务人数
str3=num2str(tai2-f);
Ya=[6070706060];
fill(Xa,Ya,'r');
text(8,65,str3,'fontsize',20);%获取顾客离开时间
time_leave(f)=time1+time_ser(s);b0=10;
%顾客直接进入服务台
while b0
drawnow
b0=speed +b0;
set(r0,'XData',a0,'YData',b0);end
%----否则顾客进入等待区else
w =w+1;%更新等待人数str4=num2str(w);
Ya=[4050504040];
fill(Xa,Ya,'r');
text(8,45,str4,'fontsize',20);time_wait(w)=time_ser(s);b0=10;
%进入等待区
while b0
drawnow
b0=speed +b0;
set(r0,'XData',a0,'YData',b0);end
end
end
%----服务台空闲且有顾客等待if (f0)
f =f+1;%更新服务人数
str3=num2str(tai2-f);
Ya=[6070706060];
fill(Xa,Ya,'r');
%fill(2,65,'r');
text(8,65,str3,'fontsize',20);%获得顾客离开时间
time_leave(f)=time1+time_wait(1);b1=60;
while b1
drawnow
b1=speed +b1;
set(r1,'XData',a1,'YData',b1);
end
%出队,更新等待队列time_wait(w+1)=0;
for t=1:w
time_wait(t)=time_wait(t+1);end
w =w-1; %更新等待人数str4=num2str(w);
%fill(2,45,'r');
Ya=[4050504040];fill(Xa,Ya,'r');
text(8,45,str4,'fontsize',20);end
%ifismember(time1,time_leave)%-------有顾客服务结束
if (time1>min(time_leave(1:f)))
%exam=min(time_leave(1:f))%更新服务队列
time_leave(f+1)=0;
for g =1:f
time_leave(g)=time_leave(g+1);end
%time_leave(f)=0;
f =f-1;
str3=num2str(tai2-f);%fill(2,65,'r');
Ya=[6070706060];fill(Xa,Ya,'r');
text(8,65,str3,'fontsize',20);a2=50;
%顾客离开
while a2
drawnow
a2=speed +a2;
set(r2,'XData',a2,'YData',b2);end
end
end
19