matlab仿真设计多服务台排队系统建模与动画仿真精品.docx

上传人:b****5 文档编号:4552941 上传时间:2022-12-06 格式:DOCX 页数:16 大小:41.40KB
下载 相关 举报
matlab仿真设计多服务台排队系统建模与动画仿真精品.docx_第1页
第1页 / 共16页
matlab仿真设计多服务台排队系统建模与动画仿真精品.docx_第2页
第2页 / 共16页
matlab仿真设计多服务台排队系统建模与动画仿真精品.docx_第3页
第3页 / 共16页
matlab仿真设计多服务台排队系统建模与动画仿真精品.docx_第4页
第4页 / 共16页
matlab仿真设计多服务台排队系统建模与动画仿真精品.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

matlab仿真设计多服务台排队系统建模与动画仿真精品.docx

《matlab仿真设计多服务台排队系统建模与动画仿真精品.docx》由会员分享,可在线阅读,更多相关《matlab仿真设计多服务台排队系统建模与动画仿真精品.docx(16页珍藏版)》请在冰豆网上搜索。

matlab仿真设计多服务台排队系统建模与动画仿真精品.docx

matlab仿真设计多服务台排队系统建模与动画仿真精品

matlab仿真设计-多服务台排队系统建模与动画仿真-精品

2020-12-12

【关键字】情况、方法、条件、领域、模式、行动、运行、认识、问题、难点、系统、密切、整体、平稳、合理、执行、建立、了解、研究、关键、稳定、理想、思想、基础、需要、体系、需求、方式、结构、反映、速度、关系、设置、检验、分析、简化、丰富、满足、优先、服务、解决、调整、完善、实现、关心、系统性

题目:

M/M/N排队系统(多服务员排队系统)的仿真

编号:

17

难度系数:

*****

姓名***

班级自动化****

学号******

联系方式*******

成绩

摘要

排队是在日常生活中经常遇到的现象,如顾客到商店购买物品,病人到医院看病常常要排队。

由于服务机构容量的限制,到达的顾客往往不能立即得到服务,而出现了排队现象。

排队论(又称随机服务系统理论)就是通过对排队系统进行研究从而建立数学模型的一种理论。

本系统主要基于排队论中多服务系统模型,利用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排队系统构成

系统设计过程中,将排队过程分为到达过程,排队过程,服务过程三部分。

到达过程主要针对顾客到达情况,对于不同的模型背景,顾客到达情况有不同的限制,此次系统设计过程中顾客到达基于以下假设:

1.顾客源是无限的。

2.顾客单个到来,且相互独立。

3.顾客到达的时间服从泊松分布,且到达过程是平稳的。

排队过程规定顾客在排队过程中的排队规则,即规定顾客在排队系统中按怎样的规则、次序接收服务的,本次系统设计采用以下排队规则:

1.顾客到达时若所有服务台均被占用,则顾客均选择排队等候。

2.顾客的服务次序采取先到先服务。

3.队列数目为单列,顾客不会在排队过程中中途退出。

服务过程规定顾客在接收服务过程中的服务规则,本次系统设计采用一下服务规则:

1.服务机构为多服务台并联型(包括单服务台的特殊情况),各服务台独立为不同顾客提供服务。

2.服务采用先到先服务的原则,未设置服务优先级。

根据设计要求,系统性能参数主要包括以下部分

1.平均队长:

服务过程中顾客数的数学期望。

2.服务利用率:

服务台使用频率的数学期望。

3.平均等待时间:

指一个顾客在排队系统中排队等待时间的数学期望。

4.2参数分布与建模依据

系统中参数分布主要利用泊松分布和非负指数分布,其涉及的主要变量符号如下表所示:

符号

说明

单位

顾客到达时间参数

人数/分

顾客服务时间参数

人数/分

出现某种状态的概率

\

服务利用率

\

平均排队长

平均队长

平均逗留时间

分钟

平均等待时间

分钟

指数分布是单参数

的非对称分布,记作

,概率密度函数为:

它的数学期望为

,方差为

指数分布是唯一具有无记忆性的连续型随机变量,即有

,在排队论、可靠性分析中有广泛应用。

本文将用负指数分布来产生顾客的服务时间。

泊松分布与指数分布有密切的关系。

当顾客平均到达率为常数

的到达间隔服从指数分布时,单位时间内到达的顾客数K服从泊松分布,即单位时间内到达k位顾客的概率为

记作Poisson(λ)。

泊松分布在排队服务、产品检验、生物与医学统计、天文、物理等领域都有广泛应用。

本文将用泊松分布来产生单位时间内到达的顾客数目。

5.M/M/N多服务台模型

5.1多服务台模型

根据模型分析中对系统的假设,系统具有N个独立服务台,且服务时间均服从参数为

的负指数分布。

顾客到达时间服从参数为

的负指数分布并且到达过程是平稳的。

为系统达到平稳状态后的队长N的概率分布,根据排队论有关方法可以得到:

记服务强度

,则当

时,可以得到

其中

为系统空闲的概率。

5.2服务利用率

由公式(8),可以得到服务利用率:

5.3平均队长

由公式(7)(8),可以得到平均队长:

其中

为平均等待人数且:

5.4平均等待时间

系统的平均等待时间可以有Little公式求得:

6.程序设计

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]王小平齐欢.系统建模与仿真.清华大学出版社[M],2004.7

[2]运筹学教材编写组.运筹学(第三版).清华大学出版社[M],2005.6

[3]陈垚光.精通MATLABGUI设计.电子工业出版社[M].2011

[4]罗华飞.MATLABGUI设计学习笔记.北京航空航天大学出版社[M].2011

10.附录

10.1模型数据计算程序

%-------------------------------------------------------------------------

%参数计算函数

%-------------------------------------------------------------------------

%---Executesonbuttonpressinjs.

functionjs_Callback(hObject,eventdata,handles)

%hObjecthandletojs(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

globalmode%仿真类型选择

globaldaoda1%顾客到达率

globalfuwu1%单个服务台服务率

globaltai1%服务台数

%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

%判断仿真类型

switchmode

case'd'%单服务台模式

liyong=daoda/fuwu;%获得服务强度

%----以下为仿真模型参数计算

if(liyong>0)&&(liyong<1)&&(daoda>0)&&(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)&&(liyong<1)&&(daoda>0)&&(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模型计算主要程序

%动画制作

%---Executesonbuttonpressindh.

functiondh_Callback(hObject,eventdata,handles)

%hObjecthandletodh(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

globaldaoda1

globalfuwu1

globaltai1

globalstp

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}入口');

holdon

%-------绘制服务台

X1=[3535656535];

Y1=[801001008080];

plot(X1,Y1);

fill(X1,Y1,'Y');

text(43,92,'\fontsize{20}服务台');

holdon

%-------绘制出口

X2=[808010010080];

Y2=[801001008080];

plot(X2,Y2);

fill(X2,Y2,'b');

text(85,92,'\fontsize{20}出口');

holdon

%-------绘制服务信息显示区

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]);

holdon

%--------绘制排队等候区

X4=[3535656535];

Y4=[5070705050];

plot(X4,Y4);

fill(X4,Y4,'g');

text(43,62,'\fontsize{20}排队区');

holdon

%--------绘制各区域顾客(通过原点表示)

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];

%------执行动画

while1

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;

%顾客直接进入服务台

whileb0<90

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;

%进入等待区

whileb0<60

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;

whileb1<90

drawnow

b1=speed+b1;

set(r1,'XData',a1,'YData',b1);

end

%出队,更新等待队列

time_wait(w+1)=0;

fort=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;

forg=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;

%顾客离开

whilea2<90

drawnow

a2=speed+a2;

set(r2,'XData',a2,'YData',b2);

end

end

end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1