文档介绍:该【MM1排队系统仿真matlab实验报告 】是由【幸福人生】上传分享,文档一共【11】页,该文档可以免费在线阅读,需要了解更多关于【MM1排队系统仿真matlab实验报告 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。MM1排队系统仿真matlab实验报告M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。1、 顾客到达模式设到达过程是一个参数为的Poisson过程,则长度为的时间内到达个呼叫的概率服从Poisson分布,即,,其中>0为一常数,表示了平均到达率或Poisson呼叫流的强度。2、 服务模式设每个呼叫的持续时间为,服从参数为的负指数分布,即其分布函数为3、 服务规则先进先服务的规则(FIFO)4、 理论分析结果在该M/M/1系统中,设,则稳态时的平均等待队长为,顾客的平均等待时间为。三、实验内容M/M/1排队系统:实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按FIFO(先入先出队列)方式服务。四、采用的语言MatLab语言源代码:clear;temp=temp+1;ArriveFlag(i)=1;elseCusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);fori=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_fromStart=[0CusNum];CusNum_avg=sum(CusNum_fromStart.*[Time_interval0])/Timepoint(end);QueLength=zeros(size(CusNum));fori=1:length(CusNum)ifCusNum(i)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_avg=sum([0QueLength].*[Time_interval0])/Timepoint(end);%系统平均等待队长%仿真图figure(1);set(1,'position',[0,0,1000,700]);subplot(2,2,1);title('各顾客到达时间和离去时间');stairs([0ArriveNum],[0t_Arrive],'b');holdon;stairs([0LeaveNum],[0t_Leave],'y');legend('到达时间','离去时间');holdoff;subplot(2,2,2);stairs(Timepoint,CusNum,'b')title('系统等待队长分布');xlabel('时间');ylabel('队长');subplot(2,2,3);title('各顾客在系统中的排队时间和等待时间');stairs([0ArriveNum],[0t_Queue],'b');holdon;stairs([0LeaveNum],[0t_Wait],'y');holdoff;legend('排队时间','等待时间');%仿真值与理论值比较disp(['理论平均等待时间t_Wait_avg=',num2str(1/(Mu-Lambda))]);disp(['理论平均排队时间t_Wait_avg=',num2str(Lambda/(Mu*(Mu-Lambda)))]);disp(['理论系统中平均顾客数=',num2str(Lambda/(Mu-Lambda))]);disp(['理论系统中平均等待队长=',num2str(Lambda*Lambda/(Mu*(Mu-Lambda)))]);disp(['仿真平均等待时间t_Wait_avg=',num2str(t_Wait_avg)])disp(['仿真平均排队时间t_Queue_avg=',num2str(t_Queue_avg)])disp(['仿真系统中平均顾客数=',num2str(CusNum_avg)]);disp(['仿真系统中平均等待队长=',num2str(QueLength_avg)]);五、(主要函数)利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流,产生符合负指数分布的随机变量作为每个顾客的服务时间:Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔,结果与调用exprnd(1/Lambda,m)函数产生的结果相同Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间间隔t_Arrive(1)=Interval_Arrive(1);%顾客到达时间时间计算t_Wait=t_Leave-t_Arrive;%各顾客在系统中的等待时间t_Queue=t_Wait-Interval_Serve;%各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。每发生一次事件,记录下两次事件间隔的时间以及在该时间段内排队的人数:Timepoint=[t_Arrive,t_Leave];%系统中顾客数变化CusNum=zeros(size(Timepoint));CusNum_avg=sum(CusNum_fromStart.*[Time_interval0])/Timepoint(end);%系统中平均顾客数计算QueLength_avg=sum([0QueLength].*[Time_interval0])/Timepoint(end);%:i-2输入仿真人数计算第i个顾客的等待时间、离开时间、标示位:i+1标志位置0:i=i+1系统是否接纳第i个顾客?仿真时间是否越界?结束输出结果六、仿真结果分析顾客的平均等待时间与顾客的平均等待队长,计算其方差如下:从上表可以看出,通过这种模型和方法仿真的结果和理论值十分接近,增加仿真顾客数时,可以得到更理想的结果。但由于变量定义的限制,在仿真时顾客总数超过1,500,000时会溢出。证明使此静态仿真的思想对排队系统进行仿真是切实可行的。实验结果截图如下(SimTotal分别为100、1000、10000、100000):(仿真顾客总数为100000和1000000时,其图像与10000的区别很小)七、,重新画出状态转移图后,引入变量Timepoint用来返回按时间排序的到达和离开的时间点,从而得到正确的时间间隔内的CusNum,并由此计算出平均队长。,得到的仿真结果与理论值相差巨大,进行改进后,得到的结果与理论值相差不大。(Mu,m)产生负指数分布,但运行时报错,上网查找资料后找到替代方法:改成Interval_Serve=-log(rand(1,SimTotal))/Mu;方法生成负指数分布,运行正常。八、实验心得