mm1排队系统仿真matlab实验报告,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; clc; %M/M/1排队系统仿真 SimTotal=input( 请输入仿真顾客总数SimTotal= ); %仿真顾客总数;

Lambda=0.4; %到达率Lambda;

Mu=0.9; %服务率Mu;

t_Arrive=zeros(1,SimTotal); t_Leave=zeros(1,SimTotal); ArriveNum=zeros(1,SimTotal); LeaveNum=zeros(1,SimTotal); Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔 Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间 t_Arrive(1)=Interval_Arrive(1);%顾客到达时间 ArriveNum(1)=1; for i=2:SimTotal t_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i); ArriveNum(i)=i; end t_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间 LeaveNum(1)=1; for i=2:SimTotal if t_Leave(i-1)=2 QueLength(i)=CusNum(i)-1; else QueLength(i)=0; end end QueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end);%系统平均等待队长 %仿真图 figure(1); set(1, position ,[0,0,1000,700]); subplot(2,2,1); title( 各顾客到达时间和离去时间 ); stairs([0 ArriveNum],[0 t_Arrive], b ); hold on; stairs([0 LeaveNum],[0 t_Leave], y ); legend( 到达时间 , 离去时间 ); hold off; subplot(2,2,2); stairs(Timepoint,CusNum, b ) title( 系统等待队长分布 ); xlabel( 时间 ); ylabel( 队长 ); subplot(2,2,3); title( 各顾客在系统中的排队时间和等待时间 ); stairs([0 ArriveNum],[0 t_Queue], b ); hold on; stairs([0 LeaveNum],[0 t_Wait], y ); hold off; 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)]); 五、数据结构 1.仿真设计算法(主要函数) 利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流,产生符合负指数分布的随机变量作为每个顾客的服务时间:

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_interval 0] )/Timepoint(end); %系统中平均顾客数计算 QueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end); %系统平均等待队长 2.算法的流程图 开始 计算第1个顾客的离开时间:i-2 输入仿真人数 计算第i个顾客的等待时间、离开时间、标示位:

i+1 标志位置0:i=i+1 系统是否接纳第i个顾客? 仿真时间是否越界? 结束 输出结果 六、仿真结果分析 顾客的平均等待时间与顾客的平均等待队长,计算其方差如下:

从上表可以看出,通过这种模型和方法仿真的结果和理论值十分接近,增加仿真顾客数时,可以得到更理想的结果。但由于变量定义的限制,在仿真时顾客总数超过1,500,000时会溢出。证明使此静态仿真的思想对排队系统进行仿真是切实可行的。

实验结果截图如下(SimTotal分别为100、1000、10000、100000):

(仿真顾客总数为100000和1000000时,其图像与10000的区别很小) 七、遇到的问题及解决方法 1.在算法设计阶段对计算平均队长时对应的时间段不够清楚,重新画出状态转移图后,引入变量Timepoint用来返回按时间排序的到达和离开的时间点,从而得到正确的时间间隔内的CusNum,并由此计算出平均队长。

2.在刚开始进行仿真时仿真顾客数设置较小,得到的仿真结果与理论值相差巨大,进行改进后,得到的结果与理论值相差不大。

3.刚开始使用exprnd(Mu,m)产生负指数分布,但运行时报错,上网查找资料后找到替代方法:改成Interval_Serve=-log(rand(1,SimTotal))/Mu;方法生成负指数分布,运行正常。

八、实验心得 通过本次实验我对M/M/1单窗口无限排队系统有了更深的认识,同时对MatLab编程语言更加熟悉,并了解到仿真在通信网中的重要作用。此次实验我受益匪浅。

推荐访问:分区

分区

分区

分区

分区

分区

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值