MMN排队系统建模及仿真_第1页
MMN排队系统建模及仿真_第2页
MMN排队系统建模及仿真_第3页
MMN排队系统建模及仿真_第4页
MMN排队系统建模及仿真_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-.z......资料...TOC\o"1-3"\h\u2932"系统仿真与matlab"综合试题 027807M/M/N排队系统的模拟仿真121160摘要 152161.问题分析 26202.模型假设 2129583.符号说明 3141414.模型准备 374694.1排队系统的组成和特征 3137334.1.1输入过程4236394.1.2排队规则 4274244.1.3效劳过程 4318974.1.4排队系统的主要指标 5315874.2输入过程与效劳时间的分布 5244054.2.1负指数分布 5257924.2.2泊松分布 525974.3生灭过程 6237365.标准M/M/N模型 8127165.1多效劳台模型准备 8199565.2多效劳台模型建立 9256335.2.1效劳利用率 9274565.2.2平均排队长 963655.2.3平均队长 10100555.2.4平均等待时间 10219436.程序设计 1179516.1动画流程图 11245706.2 M/M/N流程图 12137147.程序运行实例介绍 13241087.1动画实例讲解 13207127.2M/M/N排队系统实例讲解 14146038.程序实现难点和模型评价 17281138.1程序实现难点 17157158.2模型评价 1793919.参考文献 171988710.附录 172129510.1动画实现的核心程序 171065910.2M/M/N模型计算主要程序 22M/M/N排队系统的模拟仿真摘要排队是在日常生活中经常遇到的事,由于顾客到达和效劳时间的随机性,使得排队不可防止。因此,本文建立标准的M/M/N模型,并运用Matlab软件,对M/M/N排队系统就行了仿真,从而更好地深入研究排队问题。问题一,基于顾客到达时间服从泊松分布和效劳时间服从负指数分布,建立了标准的M/M/N模型。运用Matlab软件编程,通过输入效劳台数量、泊松分布参数以及负指数分布参数,求解出平均队长、效劳利用率、平均等待时间以及平均排队长等重要指标。然后,分析了输入参数与输出结果之间的关系。得出当效劳台数增加时,几个参数都会变小的结论。问题二,为了更加清晰地反映出实际排队过程。本文通过运用Matlab软件编程,制作了M/M/1排队过程的动画仿真,通过输入泊松分布参数以及负指数分布参数来模拟不同情况下的排队过程。通过仿真动画,可以看到明显的等待和排队过程。问题三,为了清晰地展示程序执行的效果以及程序功能的使用方法。本文特意制作了程序运行指南,并做了程序运行实例分析。通过详细地介绍,使读者能更好地理解M/M/N模型以及如何使用该仿真程序。最后,对建立的M/M/N模型做了评价,并提出了一些改良的思路。同时,指出了程序实现的难点等问题。关键词:M/M/N排队系统泊松分布负指数分布动画模拟仿真问题分析排队论〔QueuingTheory〕也称随机效劳系统理论,就是为解决有关排队问题而开展的一门学科。它研究的容有以下三局部:性态问题,即研究各种排队系统的概率规律性,主要是研究队长分布、等待时间分布和忙期分布等,包括了瞬态和稳态两种情形。最优化问题,又分静态最优和动态最优,前者指最优设计。后者指现有排队系统的最优运营。排队系统的统计推断,即判断一个给定的排队系统符合于哪种模型,以便根据排队理论进展分析研究。其过程如以下图:本文需要解决的问题:建立顾客到达时间服从泊松分布、效劳时间服从负指数分布的M/M/N排队模型,并利用Matlab软件实现输入参数的键入以及输出参数的显示。运用Matlab软件编程制作M/M/1排队系统的动态仿真模拟动画,并拥有输入参数的键入功能。制作程序运行指南,并结合程序运行实例对程序功能作深入分析。对本文建立的标准M/M/N排队模型作评价。模型假设针对本问题,建立如下合理的假设:顾客源是无穷的;排队长度没有限制;到达系统的顾客按先到先效劳原则依次进入效劳;效劳员在仿真过程中没有休假;顾客到达时排成一队,当有效劳台空闲时进入效劳状态;单位时间到达的顾客数量服从泊松分布;顾客所需的效劳时间服从负指数分布;各效劳台工作是相互独立且平均效劳时间一样。符号说明符号说明单位顾客到达时间参数人数/分顾客效劳时间参数人数/分出现*种状态的概率\效劳利用率\平均排队长人平均队长人平均逗留时间分钟平均等待时间分钟模型准备4.1排队系统的组成和特征一般的排队过程都由输入过程、排队规则、效劳过程三局部组成,现分述如下:4.1.1输入过程输入过程是指顾客到来时间的规律性,可能有以下不同情况:顾客的组成可能是有限的,也可能是无限的。顾客到达的方式可能是一个—个的,也可能是成批的。顾客到达可以是相互独立的,即以前的到达情况对以后的到达没有影响,否则是相关的。输入过程可以是平稳的,即相继到达的间隔时间分布及其数学期望、方差等数字特征都与时间无关,否则是非平稳的。4.1.2排队规则排队规则指到达排队系统的顾客按怎样的规则排队等待,可分为损失制,等待制和混合制三种。损失制〔消失制〕。当顾客到达时,所有的效劳台均被占用,顾客随即离去。等待制。当顾客到达时,所有的效劳台均被占用,顾客就排队等待,直承受完效劳才离去。例如出故障的机器排队等待维修就是这种情况。混合制。介于损失制和等待制之间的是混合制,即既有等待又有损失。有队列长度有限和排队等待时间有限两种情况,在限度以就排队等待,超过一定限度就离去。排队方式还分为单列、多列和循环队列。4.1.3效劳过程效劳机构。主要有以下几种类型:单效劳台;多效劳台并联〔每个效劳台同时为不同顾客效劳〕;多效劳台串联〔多效劳台依次为同一顾客效劳〕;混合型。效劳规则。按为顾客效劳的次序采用以下几种规则:先到先效劳,这是通常的情形。后到先效劳,如情报系统中,最后到的情报信息往往最有价值,因而常被优先处理。随机效劳,效劳台从等待的顾客中随机地取其一进展效劳,而不管到达的先后。优先效劳,如医疗系统对病情严重的病人给予优先治疗。4.1.4排队系统的主要指标平均队长:指系统顾客数〔包括正被效劳的顾客与排队等待效劳的顾客〕的数学期望。平均排队长:指系统等待效劳的顾客数的数学期望。平均逗留时间:顾客在系统逗留时间〔包括排队等待的时间和承受效劳的时间〕的数学期望。平均等待时间:指一个顾客在排队系统中排队等待时间的数学期望。平均忙期:指效劳机构连续繁忙时间〔顾客到达空闲效劳机构起,到效劳机构再次空闲止的时间〕长度的数学期望。4.2输入过程与效劳时间的分布排队系统中的事件流包括顾客到达流和效劳时间流。由于顾客到达的间隔时间和效劳时间不可能是负值,因此,它的分布是非负随机变量的分布。最常用的分布有泊松分布、确定型分布,指数分布和爱尔朗分布。由于本文只用到了泊松分布和负指数分布,因此只对这两种分布加以说明。4.2.1负指数分布指数分布是单参数的非对称分布,记作,概率密度函数为:它的数学期望为,方差为。指数分布是唯一具有无记忆性的连续型随机变量,即有,在排队论、可靠性分析中有广泛应用。本文将用负指数分布来产生顾客的效劳时间。4.2.2泊松分布泊松分布与指数分布有密切的关系。当顾客平均到达率为常数的到达间隔服从指数分布时,单位时间到达的顾客数K服从泊松分布,即单位时间到达k位顾客的概率为记作Poisson(λ)。泊松分布在排队效劳、产品检验、生物与医学统计、天文、物理等领域都有广泛应用。本文将用泊松分布来产生单位时间到达的顾客数目。4.3生灭过程在排队论中,如果表示时刻系统中的顾客数,则就构成了一个随机过程。如果用“生〞表示顾客的到达,“灭〞表示顾客的离去,则对许多排队过程来说,就是一类特殊的随机过程-生灭过程。定义1设为一个随机过程。假设的概率分布具有以下性质:假设,则从时刻起到下一个顾客到达时刻止的时间服从参数为的负指数分布,。假设,则从时刻起到下一个顾客离去时刻止的时间服从参数为的负指数分别,。同一时刻只有一个顾客到达或离去。则称为一个生灭过程。当系统运行相当时间而到达平衡状态后,对任一状态,即其中表示系统中一共有名顾客,单位时间进入该状态的平均次数和单位时间离开该状态的平均次数应该相等,这就是系统在统计平衡下的“流入=流出〞原理。根据这一原理,可得到任一状态下的平衡方程如下:有上述平衡方程,可求得因此,记则平稳状态的分布为由概率分布的要求可以得到即系统空闲状态的概率。注意只有当级数收敛时才有意义。标准M/M/N模型5.1多效劳台模型准备设顾客单个到达,相继到达时间间隔服从参数为的负指数分布,系统中共有个效劳台,每个效劳台的效劳时间相互独立,且服从参数为的负指数分布。当顾客到达时,假设有空闲的效劳台则马上承受效劳,否则便排成一个队列等待,等待时间为无限。记为系统到达平稳状态后的队长N的概率分布,注意到对个数为s的多效劳台系统,有和记效劳强度,,则当时,由式〔3〕、〔4〕、〔5〕、〔6〕,可以得到故其中为系统空闲的概率。因此,系统中有任意多个顾客的概率都可以由式〔11〕和式〔12〕得到。从而,就可以计算出反映该系统性能的各种重要指标。5.2多效劳台模型建立5.2.1效劳利用率在本文中,简单的把效劳利用率定义为系统处于非空闲状态的概率。因此,由公式〔12〕,可以得到效劳利用率为5.2.2平均排队长对于多效劳台排队系统,由公式〔11〕和公式〔12〕可以得到系统到达平稳状态的平均排队长。5.2.3平均队长对于到达平稳状态的多效劳台排队系统,平均队长等于平均排队长与正在承受效劳的顾客的平均数之和,即记系统中正在承受效劳的顾客的平均数为,则因此,平均队长5.2.4平均等待时间对于顾客在系统中平均等待时间的建模,可以先计算顾客在系统中的逗留时间,然后再减去顾客在系统中的效劳时间,这样就可以得到顾客的平均等待时间。顾客在系统中的逗留时间可以看作一个服从的负指数分布,即因此,平均逗留时间又因为顾客在系统中的逗留时间等于等待时间与承受效劳的时间之和,即故平均等待时间程序设计6.1动画流程图开场输入顾客到达的泊松分布参数、效劳时间的负指数分布参数开场输入顾客到达的泊松分布参数、效劳时间的负指数分布参数NONO判断时间是否等于第i个人的到达时间?判断时间是否等于第i个人的到达时间?YESYESNO是否空闲?NO是否空闲?YESYES进入系统承受效劳进入系统承受效劳NO效劳完毕?NO效劳完毕?YESYES离开离开NONO完毕?完毕?YESYESENDEND6.2 M/M/N流程图开场开场输入参数输入参数NONO判断输入是否正确?判断输入是否正确?YESYES代入公式计算,并显示结果代入公式计算,并显示结果NONO完毕?完毕?YESYESENDEND程序运行实例介绍7.1动画实例讲解当运行程序时就会出现下面的窗口:如果要观看M/M/1排队系统的仿真动画,可以现在左下角输入每分钟到达人数和每分钟效劳人数。然后,点击“观看动画〞按钮,就可以观看仿真动画。例如,设每分钟到达人数为0.35、每分钟效劳人数为0.4.程序运行一段时间后,我们可以看到如下的画面:由上图,可以得到等待人数、总接待人数以及离开人数。如果要重新设置参数,可以按左下角的“重置〞键。当“重置〞键按下后,我们可以看到如下画面:然后,重新设置每分钟到达人数以及每分钟效劳人数,并点击“观看动画〞。7.2M/M/N排队系统实例讲解在窗口的“请设置参数〞下方,可以设置效劳台数、每分钟到达人数以及每分钟效劳人数。然后,点击“开场〞按钮,在“模型仿真结果〞下方就可以得到平均队长、效劳利用率、平均等待时间以及平均排队长度。如果要重新设置参数,可以点击开场键旁边“重置〞,点击后可得到如下画面:可以看见“M/M/N排队系统计算〞下面所有的框都被置为0。如果输入参数出错时,程序会弹出窗口自动提示,如以下图:并且在切换到提示时,并不会影响前面动画的执行。因此,不必担忧输入参数出错而影响其他程序的运行。点击“返回〞即可回到前一画面,并且可以看见“M/M/N排队系统计算〞所有的框都被置为0。点击后的画面如以下图:注:本程序在执行时是以一秒钟代替一分钟程序实现难点和模型评价8.1程序实现难点本段程序的主要难点在制作动画中,在制作动画时不是很容易把泊松分布和负指数分布产生的数据和实际的时间联系起来。最后,利用了clock函数解决了问题。在GUI设计时,切换画面时总是会有一定的闪动,此问题暂时还没有解决。8.2模型评价本文建立的是标准的M/M/N排队系统模型,而在实际生活中并不是这样的。在实际的生活中往往是一种有损失制的排队系统,当人们在排队的时候看见排队的人数很多就会局部人就会离开,而从模型并没有考虑此情况。因此,模型还有待改良。参考文献[1]"运筹学"教材编写组,运筹学〔第三版〕,:清华大学[M],2005[2]齐欢王小平系,统建模与仿真:清华大学[M],2004。[3]启源金星,数学模型(第三版),:高等教育[M],2003。[4],MATLAB与控制系统仿真实践,:航空航天大学[M],2009[5]施晓红周佳,精通GUI图形界面编程,:大学[M],2003附录10.1动画实现的核心程序functionMypush_Callback(hObject,eventdata,handles)%hObjecthandletoMypush(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)a*es(handles.Mya*e);N=10000;%geta=str2double(get(findobj('tag','MYGETA'),'String'));%serveb=str2double(get(findobj('tag','MYSERVEB'),'String'));geta=str2double(get(handles.MYGETA,'String'));serveb=str2double(get(handles.MYSERVEB,'String'));geta=1/geta;serveb=1/serveb;reset=0;%动画标志nownum=0;%初始人数servenum=0;%承受效劳的总人数outnum=0;%state=0;%0效劳台无人,1有人gettime0=ceil(poissrnd(geta,1,N));%%产生到达时间gettime=cumsum(gettime0(1,:));servetime0=ceil(e*prnd(serveb,1,N));%%产生效劳时间servetime=cumsum(servetime0(1,:));leavetime(1)=gettime(1)+servetime0(1);forj=2:Nleavetime(j)=leavetime(j-1)+servetime0(j);%等于前一个离开时间加其效劳时间endwaittime(1)=0;forj=2:Nwaittime(j)=-gettime(j)+leavetime(j-1);%等待时间end*=10;y=0;h=plot(*,y,'.');holdon*0=10;y0=8;h1=plot(*0,y0,'.');holdon*l=10;yl=16;h2=plot(*l,yl,'.');holdon%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%效劳台*1=[812128];%指定*坐标的值y1=[15151717];%指定y坐标的值*1=[*1*1(1)];%首尾相连Y1=[y1y1(1)];%首尾相连plot(*1,Y1);fill(*1,Y1,'y');te*t(8,18,'效劳台');holdon%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%等待处*2=[812128];%指定*坐标的值y2=[7799];%指定y坐标的值*2=[*2*2(1)];%首尾相连Y2=[y2y2(1)];%首尾相连plot(*2,Y2);fill(*2,Y2,'r');te*t(8,10,'等待处');holdon%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%等待人数*3=[14161614];%指定*坐标的值y3=[7799];%指定y坐标的值*3=[*3*3(1)];%首尾相连Y3=[y3y3(1)];%首尾相连plot(*3,Y3);fill(*3,Y3,'g');te*t(13,10,'等待人数');holdon%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%总接待人数*4=[3553];%指定*坐标的值y4=[15151717];%指定y坐标的值*4=[*4*4(1)];%首尾相连Y4=[y4y4(1)];%首尾相连plot(*4,Y4);fill(*4,Y4,'b');te*t(1,18,'总接待人数');holdon%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%入口*5=[911119];%指定*坐标的值y5=[0022];%指定y坐标的值*5=[*5*5(1)];%首尾相连Y5=[y5y5(1)];%首尾相连plot(*5,Y5);fill(*5,Y5,'g');te*t(11.5,1,'入口');holdon%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%出口*6=[17191719];%指定*坐标的值y6=[15151717];%指定y坐标的值*6=[*6*6(1)];%首尾相连Y6=[y6y6(1)];%首尾相连plot(*6,Y6);fill(*6,Y6,'g');te*t(18,18,'出口');holdon%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%离开人数*7=[14161614];%指定*坐标的值y7=[15151717];%指定y坐标的值*7=[*7*7(1)];%首尾相连Y7=[y7y7(1)];%首尾相连plot(*7,Y7);fill(*7,Y7,'g');te*t(12,18,'离开人数');holdona*is([020020])a*issquaregridoffset(h,'EraseMode','*or','MarkerSize',18)%异或实现动画set(h1,'EraseMode','*or','MarkerSize',18)set(h2,'EraseMode','*or','MarkerSize',18)i=1;j=1;t=1;temp=clock;nowtime=temp(6)+temp(5)*60+temp(4)*60*60+temp(3)*24*60*60;nowtime0=nowtime;%记录开场仿真的时间while1geta=str2double(get(handles.MYGETA,'String'));serveb=str2double(get(handles.MYSERVEB,'String'));if(geta==0||serveb==0)%按下重置键h_a*es=findobj(gcf,'type','a*es');%获得当前图中所有坐标的句柄h_children_a*es=allchild(h_a*es);%获得坐标的子对象的句柄delete(h_children_a*es);%删除所有坐标子对象句柄,到达清空目的break;end%if(geta==-1||serveb==-1)%按下退出键%break;%endif(reset==1)%把坐标置到〔10,0〕入口处*=10;y=0;reset=0;endtime=clock;curtime=time(6)+time(5)*60+time(4)*60*60+time(3)*24*60*60;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%顾客到来if(i<=length(gettime))if(curtime-nowtime0>=gettime(i))y=y+0.005;set(h,'*Data',*,'YData',y)if(y>=8)reset=1;fill(*3,Y3,'g')nownum=nownum+1;te*t(15,8,num2str(nownum));i=i+1;%tempnum=1;%nowtime=curtime;%更新时间%plot(*,y,'o');%holdonendendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%顾客去效劳if(j<i)if(nownum>0)if(curtime-nowtime0>=gettime(j)+waittime(j))*0=10.000;y0=y0+0.005;set(h1,'*Data',*0,'YData',y0)if(y0>=16)nownum=nownum-1;servenum=servenum+1;%state=1;fill(*3,Y3,'g')te*t(15,8,num2str(nownum));fill(*4,Y4,'b');te*t(3.7,16,num2str(servenum));*0=10;y0=8;j=j+1;endendendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%顾客离开if(t<j)if(servenum>0)%if(state>0)if(curtime-nowtime0>=leavetime(t))*l=*l+0.005;yl=16;set(h2,'*Data',*l,'YData',yl)%if(*l>=20)%t=t+1;%*l=10;%endif(*l>=18)t=t+1;*l=10;outnum=outnum+1;fill(*7,Y7,'g');te*t(14.5,16,num2str(outnum));%state=0;%endendendendendif(i>size(gettime))if(j>size(waittime))if(t>size(leavetime))break;endendenddrawnowend10.2M/M/N模型计算主要程序functionMYstart_Callback(hObject,eventdata,handles)%hObjecthandletoMYstart(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)serve_num=str2double(get(handles.MY_taishu,'String'));%效劳台数get_mmn=str2double(get(handles.MY_get,'String'));%到达时间参数serve_mmn=str2double(get(handles.MY_serve,'String'));%效劳时间参数p=get_mmn/serve_m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论