MM1排队系统仿真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的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.理解系统仿真的基本概念和原理。
2.熟悉Matlab软件的基本操作和功能。
3.掌握Matlab系统仿真的常用方法和技巧。
4.能够运用Matlab进行简单的系统仿真分析。
5.能够编写Matlab脚本程序进行系统仿真。
6.能够运用Matlab进行复杂的系统仿真分析,并能够进行结果的可视化。
情感态度价值观目标:1.培养学生的创新意识和解决问题的能力。
2.培养学生对系统仿真技术的兴趣和热情。
3.培养学生团队合作和交流的能力。
二、教学内容根据课程目标,教学内容主要包括以下几个部分:1.Matlab系统仿真基础:介绍系统仿真的基本概念和原理,Matlab软件的基本操作和功能。
2.Matlab系统仿真方法:讲解Matlab系统仿真的常用方法和技巧,包括连续系统仿真、离散系统仿真、非线性系统仿真等。
3.Matlab系统仿真实例:通过具体的实例分析,使学生能够熟练运用Matlab进行系统仿真分析,并能够进行结果的可视化。
4.复杂系统仿真:介绍复杂系统仿真的基本概念和方法,讲解复杂系统仿真的建模和分析技巧。
三、教学方法为了达到课程目标,本课程将采用多种教学方法相结合的方式进行教学:1.讲授法:通过讲解和演示,使学生掌握Matlab系统仿真的基本原理和方法。
2.案例分析法:通过分析具体的案例,使学生能够熟练运用Matlab进行系统仿真分析。
3.实验法:通过实验操作,使学生能够亲身体验和掌握Matlab系统仿真方法。
4.讨论法:通过小组讨论和交流,培养学生的团队合作和解决问题的能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择一本与Matlab系统仿真相关的教材,作为学生学习的主要参考资料。
2.参考书:提供一些与Matlab系统仿真相关的参考书籍,供学生进一步深入学习。
matlab仿真实训课程设计

matlab仿真实训课程设计一、课程目标知识目标:1. 理解Matlab仿真的基本原理,掌握仿真模型的构建方法;2. 学会运用Matlab进行数据可视化,分析仿真结果,并提取有效信息;3. 掌握结合课本知识,运用Matlab解决实际问题的能力。
技能目标:1. 能够独立进行Matlab仿真实验,熟练操作Matlab软件;2. 学会编写简单的Matlab程序,实现对仿真模型的参数调整和优化;3. 能够运用Matlab工具箱进行数据分析和处理,提高问题解决效率。
情感态度价值观目标:1. 培养学生对Matlab仿真的兴趣,激发学生探索科学问题的热情;2. 培养学生的团队协作意识,提高沟通与表达能力;3. 引导学生认识到仿真技术在工程领域的应用价值,树立正确的工程观念。
课程性质:本课程为选修课,旨在帮助学生掌握Matlab仿真的基本技能,提高解决实际问题的能力。
学生特点:学生具备一定的编程基础和数学知识,对Matlab软件有一定了解,但实际操作能力较弱。
教学要求:结合课本内容,注重实践操作,提高学生的动手能力,使学生在实践中掌握理论知识。
将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. Matlab仿真基础- 介绍Matlab软件的安装与基本操作;- Matlab编程基础,包括数据类型、流程控制、函数编写等;- 理解仿真原理,掌握仿真模型构建的基本方法。
2. 数据可视化与分析- 学会使用Matlab进行数据可视化,如二维、三维图形绘制;- 掌握曲线拟合、插值、图像处理等数据分析方法;- 结合课本案例,进行实际操作练习。
3. 仿真实验与问题求解- 根据课本内容,选择合适的问题进行Matlab仿真实验;- 学会调整仿真模型参数,优化实验结果;- 分析实验数据,提取有效信息,解决实际问题。
4. 工具箱应用- 介绍Matlab常用工具箱,如信号处理、控制系统、神经网络等;- 学会运用工具箱进行数据分析和处理,提高问题解决效率;- 结合课本案例,进行实际应用练习。
MATLAB仿真技术实验教案

MATLAB仿真技术实验教案第一篇:MATLAB仿真技术实验教案《MATLAB仿真技术》实验教案实验一实验名称:熟悉Matlab交互工作界面一、实验目的1、熟悉Matlab各种工作界面的操作要旨2、掌握Matlab的基本操作命令二、实验步骤1、命令窗口(1)体验命令窗口的菜单及各项功能(2)尝试命令窗口编辑特殊功能键和设置2、工作空间窗口与当前路径窗口(1)在工作空间窗口查看及修改变量(2)添加新的路径为Matlab路径3、图形窗口和文本编辑窗口(1)练习图形窗口中修改图形的方法(2)在文本编辑窗口调试程序4、体会Matlab的基本操作命令三、实验仪器PC机 MATLAB软件四、实验结果五、结论实验二实验名称:Matlab在符号计算方面的应用一、实验目的1、掌握标识符的生成和使用2、掌握矩阵及变量的赋值3、熟悉三类运算符及其功能二、实验内容1、标识符的生成和使用1)、计算y=x+(x-0.98)/(x+1.35)-5(x+1/x),当x=2和x=4时的值。
>>x=[2 4];y=x.^3+(x-0.98).^2./(x+1.35).^3-5*(x+1./x);y y = -4.4723 42.8096 32)、计算cos60-9-2。
ο323>> y=cos(pi/3)-(9-sqrt(2))^(1/3)y =-1.46492、矩阵及变量的赋值21)、已知a=3,A=4,b=a,B=b2-1,c=a+A-2B,C=a+2B+c,求C >> a=3;A=4;b=a^2;B=b^2-1;c=a+A-2*B;C=a+2*B+c;C C = 2)、创建3×4矩阵魔方阵和相应的随机矩阵,将两个矩阵并接起来,然后提取任意两个列向量。
>> A=magic(4);A(4,:)=[];B=rand(3,4);C=[A B];D=C(:,3);E=C(:,4);D,E D = 3 10 6E =8 12 3)、创建一个5×5随机阵并求其逆。
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;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的mmn型排队仿真源程序

Matlab的mmn型排队仿真源程序题目:旅客登机前需要进行安检。
首先接受安检人员的检查,有两名安检人员,旅客根据安检人员前的等待人数排队;然后通过一道安检门完成检查。
请编制仿真程序,估计顾客通过安检所需时间。
function[meant]=newMM2andMM1(mean_arr,mean_serv,mean_serv1,mean_serv21,mean_serv22,peo_nu m)%mean_arr,到达的时间参数%mean_serv,服务台a的服务时间参数%mean_serv1,服务台b的服务时间参数%mean_serv21,mean_serv22,二级服务台的均匀分布的参数%peo_num,总服务人数nt=exprnd(mean_arr,1,peo_num);%各顾客到达时间间隔服从指数分布state_a=zeros(3,peo_num);%用一个三行矩阵表示a台每个顾客的状态%三行依次为:到达时间间隔,服务时间,等待时间state_b=zeros(3,peo_num);%用一个三行矩阵表示b台每个顾客的状态%三行依次为:到达时间间隔,服务时间,等待时间state_a(2,:)=exprnd(mean_serv,1,peo_num);%生成a台各顾客服务时间的矩阵state_b(2,:)=exprnd(mean_serv1,1,peo_num);%生成b台各顾客服务时间的矩阵state_a(3,1)=0;state_b(3,1)=0;a=1;%a台服务的人数b=1;%b台服务的人数arr_time=cumsum(nt);%到达时间由时间间隔变成连续时间state_b(1,1)=arr_time(1);state_a(1,1)=arr_time(2);%state(1,:)=arr_time;lea_time_a(1)=sum(state_a(:,1));%先计算前1名顾客的离开时间lea_time_b(1)=sum(state_b(:,1));%先计算第2名顾客的离开时间for i=3:peo_numif lea_time_a(a)<lea_time_b(b)%第i个顾客到达,服务台满,等待时间为%当时服务台最早离开的顾客的离开时间减去第i个顾客的到达时间 a=a+1;state_a(1,a)=arr_time(i);if state_a(1,a)<=state_a(3,a-1)+state_a(2,a-1)state_a(3,a)=state_a(3,a-1)+state_a(2,a-1)-state_a(1,a-1);elsestate_a(3,a)=0;endlea_time_a(a)=sum(state_a(:,a));elseb=b+1;state_b(1,b)=arr_time(i);if state_b(1,b)<=state_b(3,b-1)+state_b(2,b-1)state_b(3,b)=state_b(3,b-1)+state_b(2,b-1)-state_b(1,b-1);elsestate_b(3,b)=0;endlea_time_b(b)=sum(state_b(:,b));endend%连接两个状态矩阵state=[state_a(:,1:a),state_b(:,1:b)];state(3,:)=[lea_time_a(1:a),lea_time_b(1:b)];%连接两个离开时间%[g,m]=min(lea_time_a);%[h,n]=min(lea_time_b);lea_time=[lea_time_a,lea_time_b];%按离开时间的先后顺序排队guodu1=lea_time;guodu2=zeros(1,peo_num);for i=1:peo_num[guodu2(i),j]=min(guodu1);guodu1(j)=max(guodu1);endstate2=zeros(3,peo_num);%用一个三行矩阵表示二级服务台每个顾客的状态%三行依次为:到达时间间隔,服务时间,等待时间state2(2,:)=unifrnd(mean_serv21,mean_serv22,1,peo_num); %产生二级服务台的服务时间分布state2(1,:)=guodu2;for i=2:peo_numif state2(1,i)<=state2(3,i-1)+state2(2,i-1)%需要等待,更新等待时间state2(3,i)=state2(3,i-1)+state2(2,i-1)-state2(1,i);elsestate2(3,i)=0;end;end;%arr_time2=cumsum(state2(1,:));%state2(1,:)=arr_time2;lea_time2=sum(state2);%计算平均时间t1=0;t2=0;for i=1:peo_numt1=t1+state(3,i)-state(1,i);t2=t2+lea_time2(i)-state2(1,i);endmeant=(t1+t2)/peo_num;调用格式:meant=newMM2andMM1(1,1.5,2,0.2,1,300) 得到结果:meant =2.2418;。
实验三 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。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
每发生一次事件,记录下两次事件间隔的时间以及在该时间段内排队的人数: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编程语言更加熟悉,并了解到仿真在通信网中的重要作用。
此次实验我受益匪浅。