预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

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_Arrive(i) 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; temp=temp+1; ArriveFlag(i)=1; else CusNum(i)=CusNum(i-1)-1; end end %系统中平均顾客数计算 Time_interval=zeros(size(Timepoint)); Time_interval(1)=t_Arrive(1); fori=2:length(Timepoint) Time_interval(i)=Timepoint(i)-Timepoint(i-1); end CusNum_fromStart=[0CusNum]; CusNum_avg=sum(CusNum_fromStart.*[Time_interval0])/Timepoint(end); QueLength=zeros(size(CusNum)); fori=1:length(CusNum) ifCusNum(i)>=2 QueLength(i)=CusNum(i)-1; else QueLength(i)=0;