MM1排队系统仿真matlab实验报告

合集下载

排队系统仿真matlab实验报告

排队系统仿真matlab实验报告

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

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

1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间内到达k 个呼叫的概率 服从Poisson 分布,即e t kk k t t p λλ-=!)()(,⋅⋅⋅⋅⋅⋅⋅⋅⋅=,2,1,0k ,其中λ>0为一常数,表示了平均到达率或Poisson 呼叫流的强度。

2、 服务模式设每个呼叫的持续时间为i τ,服从参数为μ的负指数分布,即其分布函数为{}1,0t P X t e t μ-<=-≥3、 服务规则先进先服务的规则(FIFO )4、 理论分析结果在该M/M/1系统中,设λρμ=,则稳态时的平均等待队长为1Q ρλρ=-,顾客的平均等待时间为T ρμλ=-。

三、实验内容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:SimTotalt_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间LeaveNum(1)=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);elset_Leave(i)=t_Leave(i-1)+Interval_Serve(i);endLeaveNum(i)=i;endt_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;elseCusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);for i=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_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)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。

基于matlab GUI的MG1排队系统的可视化仿真程序设计

基于matlab GUI的MG1排队系统的可视化仿真程序设计

基于matlab GUI的M/G/1排队系统的可视化仿真程序设计刘健鹭(云南民族大学电气与信息工程学院 10级信号与信息处理研究生邮编:650500)摘要:M/G/1排队系统是一个顾客到达是无记忆泊松过程,服务时间为相互独立的一般分布的、具有多种服务规则的排队系统。

利用matlab GUI的面向对象的可视化的开发环境,设计一个参数可调的,直观的动画仿真程序,用于不同参数的M/G/1排队系统;本程序的主要作用有:为研究M/G/1排队系统提供一个简单的可视化仿真环境;为课堂教学提供一个直观的演示平台。

关键词:M/G/1排队系统 matlab GUIM/G/1 queuing system of visual simulation programming basedon Matlab GUIJianLuLiu(Y unnan national university)Abstrac t: M/G/1 queuing system is a customer arrives is no memory Poisson process, service time is independent of the general distribution, with a variety of services, rules of queuing systems. Using matlab GUI object-oriented visual development environment, design an adjustable parameter, intuitive animation simulation program for different parameters of the M/G/1 queuing system; major role in this program are: to study the M/G/1 queuing system provides a simple visual simulation environment; for the classroom to provide a visual presentation platform;key word:M/G/1 queuing system Matlab GUI引言:排队论是研究系统由于随机因素的干扰而出现排队现象的一门学科。

(最新版)MATLAB实验报告

(最新版)MATLAB实验报告

(最新版)MATLAB实验报告实验一典型环节的MATLAB仿真一、实验目的1.熟悉MATLAB桌面和命令窗口,初步了解SIMULINK功能模块的使用方法。

2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节响应曲线的理解。

3.定性了解各参数变化对典型环节动态特性的影响。

二、SIMULINK的使用MATLAB中SIMULINK是一个用来对动态系统进行建模、仿真和分析的软件包。

利用SIMULINK功能模块可以快速的建立控制系统的模型,进行仿真和调试。

1.运行MATLAB软件,在命令窗口栏“>>”提示符下键入simulink命令,按Enter 键或在工具栏单击按钮,即可进入如图1-1所示的SIMULINK仿真环境下。

2.选择File菜单下New下的Model命令,新建一个simulink 仿真环境常规模板。

3.在simulink仿真环境下,创建所需要的系统。

以图1-2所示的系统为例,说明基本设计步骤如下:1)进入线性系统模块库,构建传递函数。

点击simulink下的“Continuous”,再将右边窗口中“Transfer Fen”的图标用左键拖至新建的“untitled”窗口。

2)改变模块参数。

在simulink仿真环境“untitled”窗口中双击该图标,即可改变传递函数。

其中方括号内的数字分别为传递函数的分子、分母各次幂由高到低的系数,数字之间用空格隔开;设置完成后,选择OK,即完成该模块的设置。

3)建立其它传递函数模块。

按照上述方法,在不同的simulink 的模块库中,建立系统所需的传递函数模块。

例:比例环节用“Math”右边窗口“Gain”的图标。

4)选取阶跃信号输入函数。

用鼠标点击simulink下的“Source”,将右边窗口中“Step”图标用左键拖至新建的“untitled”窗口,形成一个阶跃函数输入模块。

5)选择输出方式。

用鼠标点击simulink下的“Sinks”,就进入输出方式模块库,通常选用“Scope”的示波器图标,将其用左键拖至新建的“untitled”窗口。

实验三 MM1队列模型实验

实验三 MM1队列模型实验

建立一个M/M/1排队模型一、实验目的1、了解M/M/1排队模型的主要结构和特点。

2、掌握OPNET节点编辑器的基本使用方法。

3、掌握使用工程编辑器来收集和观察不同统计类型的方法。

4、掌握从仿真结果中数学分析统计数据的方法。

二、实验设备和环境PC、Windows XP、Opnet14.5A等;三、准备知识M/M/1排队模型:M/M/1排队模型由一个数据包到达过程为泊松过程的单入单出(FIFO)缓冲器和一台从缓冲区以特定速度接受分组数据包的服务器(server)组成。

M/M/1队列系统的性能取决于以下几个因素:(1)数据包到达速度(2)数据包大小(3)服务器服务容量如果平均数据包到达速度和平均数据包大小的综合影响超过了服务器所能提供的服务容量,队列长度将会无限增长。

M/M/1队列模型如图1所示:图1. M/M/1队列模型1, 和C分别表示到达速度、数据包大小和服务容量。

其中λ, μ在本次实验中,我们会建立一个M/M/1队列模型,通过设定特定的到达速度、数据包大小和服务容量来使队列达到稳定。

四、实验内容和步骤实验内容:创建一个M/M/1队列模型,需要在节点编辑器中选择对象,包括一个queue和两个过程processors。

source节点(用processor module表示)负责产生数据包,sink节点(用processor module表示)负责处理无用的数据包,queue module表示无限的缓冲器和服务器。

packet streams用来连接每个模块。

模型如图2.图2. M/M/1队列模型实验步骤:1)打开OPNET,并新建project和scenario。

分别命名为mm1net和mm1。

如图3所示:图3. 新建工程和场景2)打开Startup Wizard后,点击Quit,会在节点模型创建之后再进行场景的设置。

3)选择File\New...并在弹出的窗口下拉菜单中选择Node Model,点击ok。

Matlab仿真实验报告_发布

Matlab仿真实验报告_发布

2、实验目的
通过本次实验,应该掌握: (1) 用傅立叶变换进行信号分析时基本参数的选择。 (2) 经过离散时间傅立叶变换(DTFT)和有限长度离散傅立叶变换(DFT) 后信号频 谱上的区别,前者 DTFT 时间域是离散信号,频率域还是连续的,而 DFT 在两个域中都 是离散的。 (3) 离散傅立叶变换的基本原理、特性,以及经典的快速算法(基 2 时间抽选法) ,体 会快速算法的效率。 (4) 获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨 率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。 (5) 建立 DFT 从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念 的一个典型应用是数字音频压缩中的分析滤波器,例如 DVD AC3 和 MPEG Audio。
~4~
MATLAB 仿真实验报告
N=4000; % N>1/TΔf=1/357*T
n=0:1:N-1; f=fs*n/N;
%DTMF 信号编码 dtmf(1,:)=sin(2*pi*row(1)*T*n)+sin(2*pi*col(1)*T*n); dtmf(2,:)=sin(2*pi*row(1)*T*n)+sin(2*pi*col(2)*T*n); dtmf(3,:)=sin(2*pi*row(1)*T*n)+sin(2*pi*col(3)*T*n); dtmf(4,:)=sin(2*pi*row(2)*T*n)+sin(2*pi*col(1)*T*n); dtmf(5,:)=sin(2*pi*row(2)*T*n)+sin(2*pi*col(2)*T*n); dtmf(6,:)=sin(2*pi*row(2)*T*n)+sin(2*pi*col(3)*T*n); dtmf(7,:)=sin(2*pi*row(3)*T*n)+sin(2*pi*col(1)*T*n); dtmf(8,:)=sin(2*pi*row(3)*T*n)+sin(2*pi*col(2)*T*n); dtmf(9,:)=sin(2*pi*row(3)*T*n)+sin(2*pi*col(3)*T*n); dtmf(10,:)=sin(2*pi*row(4)*T*n)+sin(2*pi*col(2)*T*n); %1 %2 %3 %4 %5 %6 %7 %8 %9 %0

matlab仿真实验报告

matlab仿真实验报告

matlab仿真实验报告Matlab仿真实验报告引言:Matlab是一种广泛应用于科学和工程领域的数值计算软件,它提供了强大的数学和图形处理功能,可用于解决各种实际问题。

本文将通过一个具体的Matlab 仿真实验来展示其在工程领域中的应用。

实验背景:本次实验的目标是通过Matlab仿真分析一个电路的性能。

该电路是一个简单的放大器电路,由一个输入电阻、一个输出电阻和一个放大倍数组成。

我们将通过Matlab对该电路进行仿真,以了解其放大性能。

实验步骤:1. 定义电路参数:首先,我们需要定义电路的各个参数,包括输入电阻、输出电阻和放大倍数。

这些参数将作为Matlab仿真的输入。

2. 构建电路模型:接下来,我们需要在Matlab中构建电路模型。

可以使用电路元件的模型来表示电路的行为,并使用Matlab的电路分析工具进行仿真。

3. 仿真分析:在电路模型构建完成后,我们可以通过Matlab进行仿真分析。

可以通过输入不同的信号波形,观察电路的输出响应,并计算放大倍数。

4. 结果可视化:为了更直观地观察仿真结果,我们可以使用Matlab的图形处理功能将仿真结果可视化。

可以绘制输入信号波形、输出信号波形和放大倍数的变化曲线图。

实验结果:通过仿真分析,我们得到了以下实验结果:1. 输入信号波形与输出信号波形的对比图:通过绘制输入信号波形和输出信号波形的变化曲线,我们可以观察到电路的放大效果。

可以看到输出信号的幅度大于输入信号,说明电路具有放大功能。

2. 放大倍数的计算结果:通过对输出信号和输入信号的幅度进行计算,我们可以得到电路的放大倍数。

通过比较不同输入信号幅度下的输出信号幅度,可以得到放大倍数的变化情况。

讨论与分析:通过对实验结果的讨论和分析,我们可以得出以下结论:1. 电路的放大性能:根据实验结果,我们可以评估电路的放大性能。

通过观察输出信号的幅度和输入信号的幅度之间的比值,可以判断电路的放大效果是否符合设计要求。

MM1排队系统仿真matlab实验报告

MM1排队系统仿真matlab实验报告

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

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

1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间内到达k 个呼叫的概率 服从Poisson 分布,即etkk k t t p λλ-=!)()(,⋅⋅⋅⋅⋅⋅⋅⋅⋅=,2,1,0k ,其中λ>0为一常数,表示了平均到达率或Poisson 呼叫流的强度。

2、 服务模式设每个呼叫的持续时间为i τ,服从参数为μ的负指数分布,即其分布函数为{}1,0t P X t e t μ-<=-≥3、 服务规则先进先服务的规则(FIFO ) 4、 理论分析结果在该M/M/1系统中,设λρμ=,则稳态时的平均等待队长为1Q ρλρ=-,顾客的平均等待时间为T ρμλ=-。

三、实验内容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:SimTotalt_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间LeaveNum(1)=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);elset_Leave(i)=t_Leave(i-1)+Interval_Serve(i);endLeaveNum(i)=i;endt_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;CusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);for i=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_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)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_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');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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。

matlab仿真实验总结

matlab仿真实验总结

matlab仿真实验总结摘要:本文旨在介绍基于Matlab的仿真实验,从基本的Matlab 代码编写开始,到分析参数变化的影响,再到定量分析实验结果。

实验结果表明,通过Matlab的仿真实验,可以很容易地理解模型的参数变化对模型性能的影响,并对模型调整做出科学决策。

关键词:Matlab;仿真实验;参数变化;定量分析Matlab仿真实验总结一、实验目标1、掌握Matlab基本的语法、操作和使用;2、掌握利用Matlab进行模型仿真及参数调优的基本方法;3、熟悉Matlab程序运行过程,熟悉Matlab调试程序的基本方法;4、通过程序仿真实验,了解系统及模型的基本特性,定性分析及定量分析系统特性;二、实验内容1、基于Matlab的程序编写:(1)建立Matlab编辑器环境,熟悉编辑环境基本操作;(2)了解Matlab程序编写的基本方法,熟悉调试Matlab程序的基本方法;(3)编写模型仿真程序。

2、Matlab仿真实验:(1)分析仿真实验结果,收集数据;(2)定性分析实验结果,观察参数变化对结果的影响;(3)计算参数变化后的结果,定量分析实验结果;(4)将实验结果以图形的形式展示,完成Matlab仿真实验报告。

三、实验结果通过本次Matlab仿真实验,可以得出:1、通过Matlab的仿真实验,可以很容易地理解模型的参数变化对模型性能的影响,从而有效地进行模型调整;2、可以定量分析实验结果,从而更好地进行科学决策;3、Matlab操作安全,程序编写简单实用,可以有效地减少实验工时。

四、实验总结本次Matlab仿真实验对于掌握Matlab程序编写及仿真实验的基本方法,了解实验结果的定性及定量分析等方面有着很大的帮助,为今后更深入的Matlab程序及仿真研究打下了基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

1、顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间到达k 个呼叫的概率 服从Poisson 分布,即etkk k t t p λλ-=!)()(,⋅⋅⋅⋅⋅⋅⋅⋅⋅=,2,1,0k ,其中λ>0为一常数,表示了平均到达率或Poisson 呼叫流的强度。

2、服务模式设每个呼叫的持续时间为i τ,服从参数为μ的负指数分布,即其分布函数为{}1,0t P X t e t μ-<=-≥3、服务规则先进先服务的规则(FIFO ) 4、理论分析结果在该M/M/1系统中,设λρμ=,则稳态时的平均等待队长为1Q ρλρ=-,顾客的平均等待时间为T ρμλ=-。

三、实验容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:SimTotalt_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间LeaveNum(1)=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);elset_Leave(i)=t_Leave(i-1)+Interval_Serve(i);endLeaveNum(i)=i;endt_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;elseCusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);for i=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_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)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_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,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编程语言更加熟悉,并了解到仿真在通信网中的重要作用。

此次实验我受益匪浅。

相关文档
最新文档