MM1排队系统仿真matlab实验报告.docx
《MM1排队系统仿真matlab实验报告.docx》由会员分享,可在线阅读,更多相关《MM1排队系统仿真matlab实验报告.docx(11页珍藏版)》请在冰点文库上搜索。
![MM1排队系统仿真matlab实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/9/eed90553-151f-4c7c-bdb3-a9f9637f4880/eed90553-151f-4c7c-bdb3-a9f9637f48801.gif)
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;
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;
fori=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;
fori=2:
SimTotal
ift_Leave(i-1)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);
else
t_Leave(i)=t_Leave(i-1)+Interval_Serve(i);
end
LeaveNum(i)=i;
end
t_Wait=t_Leave-t_Arrive;%各顾客在系统中的等待时间
t_Wait_avg=mean(t_Wait);
t_Queue=t_Wait-Interval_Serve;%各顾客在系统中的排队时间
t_Queue_avg=mean(t_Queue);
Timepoint=[t_Arrive,t_Leave];%系统中顾客数随时间的变化
Timepoint=sort(Timepoint);
ArriveFlag=zeros(size(Timepoint));%到达时间标志
CusNum=zeros(size(Timepoint));
temp=2;
CusNum
(1)=1;
fori=2:
length(Timepoint)
if(temp<=length(t_Arrive))&&(Timepoint(i)==t_Arrive(temp))
CusNum(i)=CusNum(i-1)+1;
QueLength_avg=sum([0QueLength].*[Time_interval0])/Timepoint(end);%系统平均等待队长
2.算法的流程图
六、仿真结果分析
顾客的平均等待时间与顾客的平均等待队长,计算其方差如下:
从上表可以看出,通过这种模型和方法仿真的结果和理论值十分接近,增加仿真顾客数时,可以得到更理想的结果。
但由于变量定义的限制,在仿真时顾客总数超过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编程语言更加熟悉,并了解到仿真在通信网中的重要作用。
此次实验我受益匪浅。