matlab单服务台排队系统实验报告 下载本文

内容发布更新时间 : 2024/7/5 14:12:52星期一 下面是文章的全部内容请认真阅读。

matlab单服务台排队系统实验报告

一、实验目的

本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。

二、实验原理

根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。

1、 顾客到达模式

设到达过程是一个参数为?的Poisson过程,则长度为t的时间内到达k个呼

(?t)kpk(t)?k!叫的概率 服从Poisson分布,即

e??t,k?0,1,2,?????????,其中?>0为一

常数,表示了平均到达率或Poisson呼叫流的强度。

2、 服务模式

?设每个呼叫的持续时间为i,服从参数为?的负指数分布,即其分布函数为

P{X?t}?1?e??t,t?0

3、 服务规则

先进先服务的规则(FIFO) 4、 理论分析结果

??在该M/M/1系统中,设的平均等待时间为

T????Q??,则稳态时的平均等待队长为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)

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;

for i=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); for i=2:length(Timepoint)

Time_interval(i)=Timepoint(i)-Timepoint(i-1); end

CusNum_fromStart=[0 CusNum];

CusNum_avg=sum(CusNum_fromStart.*[Time_interval 0] )/Timepoint(end);

QueLength=zeros(size(CusNum)); for i=1:length(CusNum) if CusNum(i)>=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');