(完整版)MM1排队系统仿真matlab实验报告.doc

上传人:b****9 文档编号:118194 上传时间:2022-10-03 格式:DOC 页数:9 大小:944.69KB
下载 相关 举报
(完整版)MM1排队系统仿真matlab实验报告.doc_第1页
第1页 / 共9页
(完整版)MM1排队系统仿真matlab实验报告.doc_第2页
第2页 / 共9页
(完整版)MM1排队系统仿真matlab实验报告.doc_第3页
第3页 / 共9页
(完整版)MM1排队系统仿真matlab实验报告.doc_第4页
第4页 / 共9页
(完整版)MM1排队系统仿真matlab实验报告.doc_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

(完整版)MM1排队系统仿真matlab实验报告.doc

《(完整版)MM1排队系统仿真matlab实验报告.doc》由会员分享,可在线阅读,更多相关《(完整版)MM1排队系统仿真matlab实验报告.doc(9页珍藏版)》请在冰豆网上搜索。

(完整版)MM1排队系统仿真matlab实验报告.doc

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;

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;

end

end

QueLength_avg=sum([0QueLength].*[Time_interval0])/Timepoint(end);%系统平均等待队长

%仿真图

figure

(1);

set(1,'position',[0,0,1000,700]);

subplot(2,2,1);

title('各顾客到达时间和离去时间');

stairs([0ArriveNum],[0t_Arrive],'b');

holdon;

stairs([0LeaveNum],[0t_Leave],'y');

legend('到达时间','离去时间');

holdoff;

subplot(2,2,2);

stairs(Timepoint,CusNum,'b')

title('系统等待队长分布');

xlabel('时间');

ylabel('队长');

subplot(2,2,3);

title('各顾客在系统中的排队时间和等待时间');

stairs([0ArriveNum],[0t_Queue],'b');

holdon;

stairs([0LeaveNum],[0t_Wait],'y');

holdoff;

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_interval0])/Timepoint(end);%系统中平均顾客数计算

QueLength_avg=sum([0QueLength].*[Time_interval0])/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编程语言更加熟悉,并了解到仿真在通信网中的重要作用。

此次实验我受益匪浅。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1