MM1排队系统仿真matlab实验报告.doc
M/M/1 排队系统 实验报告 一、实验目的 本次实验要求实现 M/M/1 单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。 二、实验原理 根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。 1、 顾客到达模式 设到达过程是一个参数为 的 Poisson 过程,则长度为 t 的时间内到达 k 个呼叫的概率 服从 Poisson 分布,即 e tkk kttp , ,2,1,0k ,其中 0 为一常数,表示了平均到达率或 Poisson 呼叫流的强度。 2、 服务模式 设每个呼叫的持续时间为 i ,服从参数为 的负指数分布,即其分布函数为 1 , 0tP X t e t 3、 服务规则 先进先服务的规则( FIFO) 4、 理论分析结果 在该 M/M/1 系统中,设 ,则稳态时的平均等待队长为 1Q ,顾客的平均等待时间为 T 。 三 、实验内容 M/M/1 排队系统 实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按 FIFO 方式服务。 四 、采用的语言 MatLab 语言 源代码 clear; clc; M/M/1排队系统仿真 SimTotal请输入仿真顾客总数 SimTotal; 仿真顾客总数 ; Lambda0.4; 到达率 Lambda; Mu0.9; 服务率 Mu; t_Arrivezeros1,SimTotal; t_Leavezeros1,SimTotal; ArriveNumzeros1,SimTotal; LeaveNumzeros1,SimTotal; Interval_Arrive-logrand1,SimTotal/Lambda;到达时间间隔 Interval_Serve-logrand1,SimTotal/Mu;服务时间 t_Arrive1Interval_Arrive1;顾客到达时间 ArriveNum11; for i2SimTotal t_Arriveit_Arrivei-1Interval_Arrivei; ArriveNumii; end t_Leave1t_Arrive1Interval_Serve1;顾客离开时间 LeaveNum11; for i2SimTotal if t_Leavei-12 QueLengthiCusNumi-1; else QueLengthi0; end end QueLength_avgsum0 QueLength.*Time_interval 0 /Timepointend;系统平均等待队长 仿真图 figure1; set1,position,0,0,1000,700; subplot2,2,1; title各顾客到达时间和离去时间 ; stairs0 ArriveNum,0 t_Arrive,b; hold on; stairs0 LeaveNum,0 t_Leave,y; legend到达时间 ,离去时间 ; hold off; subplot2,2,2; stairsTimepoint,CusNum,b title系统等待队长分布 ; xlabel时间 ; ylabel队长 ; subplot2,2,3; title各顾客在系统中的排队时间和等待时间 ; stairs0 ArriveNum,0 t_Queue,b; hold on; stairs0 LeaveNum,0 t_Wait,y; hold off; legend排队时间 ,等待时间 ; 仿真值与理论值比较 disp理论平均等待时间 t_Wait_avg,num2str1/Mu-Lambda; disp理论平均排队时间 t_Wait_avg,num2strLambda/Mu*Mu-Lambda; disp理论系统中平均顾客数 ,num2strLambda/Mu-Lambda; disp理论系统中平均等待队长 ,num2strLambda*Lambda/Mu*Mu-Lambda; disp仿真平均等待时间 t_Wait_avg,num2strt_Wait_avg disp仿真平均排队时间 t_Queue_avg,num2strt_Queue_avg disp仿真系统中平均顾客数 ,num2strCusNum_avg; disp仿真系统中平均等待队长 ,num2strQueLength_avg; 五 、数据结构 1.仿真设计算法(主要函数) 利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流 ,产生符合负指数分布的随机变量作为每个顾客的服务时间 Interval_Arrive-logrand1,SimTotal/Lambda;到达时间间隔 ,结果与调用exprnd1/Lambda, m函数产生的结果相同 Interval_Serve-logrand1,SimTotal/Mu;服务时间间隔 t_Arrive1Interval_Arrive1;顾客到达时间 时间计算 t_Waitt_Leave-t_Arrive; 各顾客在系统中的等待时间 t_Queuet_Wait-Interval_Serve; 各顾客在系统中的排队时间 由事件来触发仿真时钟的不断推进。每发生一次事件 ,记录下两次事件间隔的时间以及在该时间段内排队的人数 Timepointt_Arrive,t_Leave; 系统中顾客数变化 CusNumzerossizeTimepoint; CusNum_avgsumCusNum_fromStart.*Time_interval 0 /Timepointend; 系统中平均顾客数计算 QueLength_avgsum0 QueLength.*Time_interval 0 /Timepointend; 系统平均等 待队长 2.算法的流程图 六 、仿真结果分析 顾客的平均等待时间与顾客的平均等待队长,计算其方差如下 开始 计算第 1 个顾客的离开时间 i-2 输入仿真人数 计算第 i 个顾客的等待时间、离开时间、标示位 i1 标志位置 0 ii1 系 统是否接纳第i 个顾客 仿真时间是否越界 结束 输出结果 仿真顾客总数100000 1 2 3 4 5 平均值 方差平均等待时间 2.023 1.9971 1.9945 1.9961 2.0043 2.003 0.000556360平均排队时间 0.91147 0.8865 0.88293 0.88404 0.89495 0.89198 0.000563657平均顾客数 0.8101 0.79846 0.79334 0.79958 0.80433 0.80116 0.000160911平均等待队长 0.365 0.35444 0.3512 0.35412 0.35915 0.35678 0.0001168736 7 8 9 10 理论值平均等待时间 1.9738 2.0054 1.9911 1.9909 1.9927 2平均排队时间 0.86612 0.89068 0.8832 0.87527 0.88503 0.88889中平均顾客数 0.78545 0.8037 0.79797 0.79166 0.80024 0.8平均等待队长 0.34465 0.35695 0.35395 0.34804 0.35542 0.35556仿真顾客总数1000000 1 2 3 4 5 平均值 方差平均等待时间 2.0029 1.9975 1.9943 2.0019 2.0115 2.00162 0.000169888平均排队时间 0.89209 0.88624 0.88494 0.891 0.89873 0.8906 0.000119522平均顾客数 0.80157 0.79955 0.79763 0.80013 0.80531 0.80084 0.000032986平均等待队长 0.35702 0.35474 0.35394 0.35612 0.35982 0.35633 0.0000209406 7 8 9 10 理论值平均等待时间 1.9991 1.9908 1.9965 2.0016 1.996 2平均排队时间 0.88623 0.88111 0.8849 0.88987 0.88652 0.88889平均顾客数 0.79824 0.79621 0.79865 0.79943 0.79755 0.8平均等待队长 0.35387 0.35239 0.35399 0.35541 0.35424 0.35556从上表可以看出,通过这种模型和方法仿真的结果和理论值十分接近,增加仿真 顾客数时 ,可以得到更理想的结果。但由于变量定义的限制,在仿真时顾客总数超过 1,500,000 时会溢出。证明使 此 静态仿真的思想对排队系统进行仿真是切实可行的。 实验结果截图如下( SimTotal 分别为 100、 1000、 10000、 100000) (仿真顾客总数为 100000 和 1000000 时,其图像与 10000 的区别很小) 七、 遇到的问题及解决方法 1.在算法设计阶段 对计算平均队长时对应的时间段不够清楚,重新画出状态转移图后, 引入变量 Timepoint 用来返回按时间排序的到达和离开的时间点,从而得到正确的时间间隔内的 CusNum,并由此计算出平均队长 。 2.在刚开始进行仿真时 仿真顾客数设置较小,得到的仿真结果与理论值相差巨大,进行改进后,得到的结果与理论值相差不大 。 3.刚开始使用 exprndMu,m产生负指数分布,但运行时报错,上网查找资料后找到替代方法改成 Interval_Serve-logrand1,SimTotal/Mu;方法生成负指数分布,运行正常。 八、 实验心得 通过本次实验 我 对 M/M/1 单窗口无限排队系统 有了更深的认识, 同时对MatLab 编程语言更加熟悉,并了解到仿真在通信网中的重要作用。此次实验我受益匪浅。