单服务台排队系统离散事件系统仿真实验
第三章离散事件系统仿真
1 2 3 4 5 6 总 和
由表 1.5 中的数据可计算如下统计指标: 0 2 2 2 0 (1)平均每位顾客的等待时间:4/6≈ 0.667(分 0 1 3 1 0 钟) 3 0 9 3 3 (2)顾客要等待的概率:2 /6 ≈ 0.333 2 1 12 3 0
0 4 19 4 3 2 2 11 4 0
6 0 系统中顾客数 7 9 2 11 15 2 0 4
2 总 和 1
G3 G4
G1 G2
G3 G4 G5 G5 6 7 9 11 12 15
G6
0
2
3
19
仿真时钟
图 3.1
顾客在系统中的状态图
对于这样简单的系统我们可以采用手工模拟,并采用模拟表来描述,但实际系 统往往比这复杂得多,这就需要更高级的处理技术。
3.2 排队系统
3.2.1 排队系统基本概念 许多系统都可以归结为服务系统,服务系统的主要 特征是出现排队现象,因此也称为排队系统。 顾客到达时刻不确定,接受服务的时间不确定,导 致排队系统在某时刻的状态(例如队列长短)不确 定,故又称随机排队系统。
3.2.2 随机排队系统的三个组成部分
1. 到达模式——动态实体产生的规律。 2.服务机构: 1)数量 2)速度(一般也是一个随机变量) 3.排队规则: 如先进先出,后进先出,优先权,随机服务等。
3.1.3 进程 由若干事件与若干活动组成的过程称为进程。 由若干事件与若干活动组成的过程称为进程。它 描述了各事件活动发生的相互逻辑关系及时序关 系。例如,工件由车辆装入进货台;经装卸搬运 进入仓库;经保管、加工到配送至客户的过程就 是一个进程。事件、活动与进程的关系如图 3-1所 示进程
3.1.4.仿真时钟 3.1.4.仿真时钟 仿真时钟用于表示仿真事件的变化。 由于仿真实质上是对系统状态在一定时间序列的 动态描述,因此,仿真时钟一 般是仿真的主要自 变量,仿真时钟的推进是系统仿真程序的核心部 分。 应当指出,仿真时钟所显示的是仿真系统对应实 际系统的运行时间,而不是计算机运行仿 真模型 的时间。仿真时间与真实时间将设定成一定比例 关系,使得像物流系统这样复杂的系统, 利用计 算机仿真只需要几分钟就可以完成,而真实系统 的运行则需要若干天,甚至若干月。
队列的应用——单服务台排队系统的模拟
队列的应用:单服务台排队系统的模拟一、三个模拟1.离散事件模拟系统在排队系统中,主要有两类事件:顾客的到达事件和服务完毕后顾客的离去事件,整个系统就是不断有到达事件和离开事件的发生,这些事件并不是连续发生的,因此这样的系统被称为离散事件模拟系统。
(1)事件处理过程如果服务员没空,就去队列中排队;否则就为这个顾客生成服务所需的时间t,表示服务员开始为它服务,所需的服务时间是t。
每当一个离开事件发生,就检查有没有顾客在排队,如果有顾客在排队,则让队头顾客离队,为它提供服务,如果没有顾客排队,则服务员可以休息。
(2)如何产生顾客到达事件和离开事件在一个排队系统中,顾客的到达时间和为每个顾客服务的时间并不一定是固定的。
但从统计上来看是服从一定的概率分布。
假设到达的间隔时间和服务时间都满足均匀分布,则可以用随机数产生器产生的随机数。
①以生成顾客到达事件为例子如顾客到达的间隔时间服从[a,b]之间的均匀分布,则可以生成一个[a,b]之间的随机数x,表示前一个顾客到达后,经过了x的时间后又有一个顾客到达。
[a,b]之间的随机数可以按照下面的过程产生:假如系统的随机数生成器生成的随机数是均匀分布在0到RAND_MAX之间,可以把0到RAND_MAX之间的区间等分成b-a+1个,当生成的随机数落在第一个区间,则表示生成的是a,当落在第二个区间,则表示生成的是a+1…当落在最后一个区间,则表示生成的是b。
这个转换可以用rand()*(b-a+1)/( RAND_MAX+1)+a实现,rand 表示系统的随机数生成函数。
2.离散的时间驱动模拟在得到了在x秒后有一个事件生成的信息时,并不真正需要让系统等待x秒再处理该事件。
在模拟系统中,一般不需要使用真实的精确事件,只要用一个时间单位即可,这个时间单位是嘀嗒tick,可以表示1秒,也可以表示1min\1h.沿着时间轴,模拟每一个嘀嗒中发生了什么事件并处理该事件。
模拟开始时时钟是0嘀嗒,随后每一步都把时钟加1嘀嗒,并检查这个时间内是否有事件发生,如果有,则处理并生成统计信息。
单服务台排队系统仿真研究报告
物流系统建模与仿真09级自动化学院物流工程1班20085435 詹乐思20095277 安静20095278 陈红玲20095289 陈均剑20095290 翟瑞20095291 胡旺单服务台排队系统仿真研究报告——选重庆大学A区门口中国银行分行某一服务窗口为单服务台排队系统研究对象一、系统基本背景社会的进步越来越快,人们的生活节奏也随之越来越快。
在科技的发展,新技术的普及下, 我国的银行业以计算机和信息技术、互联网技术为前提, 通过大量资金和科技的投入, 不断地开发出新产品和新业务。
另外有网上银行、支付宝等新业务的出现, 大大提高了工作效率。
然而现代的金融服务并不是都可以靠刷卡来解决, 许多技术还不完善, 这些新技术也并不适合所有顾客群,去银行办理业务的顾客仍然经常性地出现排队现象。
顾客等待时间过长, 造成顾客满意度下降, 矛盾较为突出, 因此本报告试利用单服务台排队论的方法, 定性定量地对具有排队等候现象的银行服务系统进行统计调查与分析研究,希望能帮助改进银行工作效率, 优化系统的运营。
本报告研究对象为中国银行重庆大学处分行某一服务窗口,数据取自银行内唯一非现金业务柜台。
研究对象的选取虽然不是最典型的,但是综合考虑了研究地域范围和小组成员作业时间有限,另有其他方案由于各种原因无法进行,故选择离学校较近的有代表性的中国银行中的服务窗口作为最终方案。
中国银行简介:中国银行是中国历史最为悠久的银行之一,在大家对银行的概念中有着一定地位。
中国银行主营传统商业银行业务,包括公司金融业务、个人金融业务和金融市场业务。
公司业务以信贷产品为基础,致力于为客户提供个性化、创新的金融服务和融资、财务解决方案。
个人金融业务主要针对个人客户的金融需求,提供包括储蓄存款、消费信贷和银行卡在内的服务。
作为中国金融行业的百年品牌,中国银行在稳健经营的同时,积极进取,不断创新,创造了国内银行业的许多第一,在国际结算、外汇资金和贸易融资等领域得到业界和客户的广泛认可和赞誉。
实验单服务台单队列排队系统仿真
实验单服务台单队列排队系统仿真简介实验单服务台是指在实验室或研究机构等地,为科学实验、研究项目提供相关服务的地方。
对于一个实验室来说,合理的排队系统可以提高实验员的工作效率,并且能够更好地管理实验项目。
本文将介绍一种基于单队列的排队系统仿真方法,通过模拟实验单的排队过程,评估实验室排队系统的性能,为实验室提供有效的管理建议。
目标本次排队系统仿真的目标是评估实验室中的排队系统性能,包括等待时间、队列长度等指标,以及不同服务台数量下的性能表现。
通过仿真实验,可以找出最优的服务台数量,从而提高实验室的工作效率,减少实验员的等待时间,提供更好的服务。
方法实验单生成在排队系统仿真中,需要生成一批实验单用于模拟实验员的需求。
实验单的生成可以根据实验室的实际情况和需求来设计,可以包括实验名称、实验员姓名、实验日期等信息。
生成一批实验单后,即可进行排队模拟实验。
单队列排队模型本文使用单队列排队模型来模拟实验室的排队系统。
模型中有一个服务台,实验员依次排队等待被服务。
当服务台空闲时,队列中的第一个实验员将被服务,其余实验员依次推进队列。
在模拟过程中,需要记录实验员进入队列的时间和离开队列的时间,以计算等待时间、队列长度等性能指标。
仿真实验仿真实验的过程可以分为以下几个步骤:1.生成实验单:根据实验室的实际情况,生成一批实验单。
2.初始化队列和服务台:将生成的实验单放入队列中,并初始化服务台的状态。
3.开始仿真:根据队列中实验员的情况,模拟实验员进入队列、离开队列以及服务台的状态变化。
记录实验员的等待时间,计算队列长度等性能指标。
4.评估实验结果:根据实验的性能指标,评估排队系统的表现,并分析不同服务台数量下的性能差异。
5.提出改进建议:根据实验结果,提出优化排队系统的建议,如增加服务台数量、调整队列管理策略等。
结果与分析通过对排队系统的仿真实验,可以得到一些重要的结果和分析:1.等待时间分布:通过模拟实验员的等待时间,可以得到等待时间的分布情况,从而评估实验室排队系统的性能。
综合实验四 排队问题的离散系统模拟实验
综合实验四 排队问题的离散系统模拟实验一.实验目的1.了解排队论;2. 通过对每个个别的随机服务现象的统计研究,找出反映这些随机现象平均特性的规律;3. 通过实例掌握简单的离散事件系统模拟的基本方法及其MATLAB 实现方法。
二.实验内容单服务员的排队模型:在某商店有一个售货员,顾客陆续来到,售货员逐个地接待顾客.当到来的顾客较多时,一部分顾客便须排队等待,被接待后的顾客便离开商店.设:a .顾客到来间隔时间服从参数为0.1的指数分布.b .对顾客的服务时间服从[4,15]上的均匀分布.c .排队按先到先服务规则,队长无限制.并假定一个工作日为8小时,时间以分钟为单位。
要求:(1) 模拟一个工作日内完成服务的个数及顾客平均等待时间t .(2) 模拟100个工作日,求出平均每日完成服务的个数及每日顾客的平均等待时间。
三.实验要求写出实验步骤、结果显示及分析四.实验分析本实验采用蒙特卡洛(Monte Carlo )模拟方法,蒙特卡洛是一种应用随机数来进行计算机模拟的方法.此方法对研究的系统进行随机观察抽样,通过对样本值的观察统计,求得所研究系统的某些参数.在MATLAB 中发生指数分布的随机数命令为exprnd(),产生均匀分布随机数命令为unifrnd()。
符号说明:STi :第i 个顾客到来的时刻i t :第i 个顾个接受服务后离开的时间i Tj :第i 个顾客和第i-1个顾客到来的间隔时间i Tf :第i 个顾客需要服务的时间 i s :第i 个顾客的等待时间考察第i 个顾客和第i-1个顾客排队并将接受服务的情形,有以下两种情况: (1),11i i i i t Tj -=>∑如图此时有:(2) ,如下图此时有: (2)作出程序流程图顾客到来的时间间隔和所需服务时间可分别由MATLAB 随机数发生器exprnd()和unifrnd()产生,根据第一步的分析,通过迭代即可模拟每个工作日的该服务员接待顾客和顾客排队的情形,时间以分钟为单位,程序流程图为:1i t -s t 1i t -t 1i i i ii t Tj s Tf ==++∑1ii i i ii t Tj s Tf ==++∑i s =11i i ii s t Tj -==-∑11111i i i i i i t Tj s Tf ----==++∑11i i i i t Tj -=≤∑11111i i i i i i t Tj s Tf ----==++∑单个工作日的排队系列流程图100个工作日的排队系列流程图五、实验步骤1.模拟一个工作日内完成服务的个数及顾客平均等待时间t.(1)编写MATLAB程序clear,clc;sMeanM=[];sIM=[];TjM=[];TfM=[];sTj=0;while (sTj<=480)Tjp=exprnd(10);Tfp=unifrnd(4,15);TjM=[TjM;Tjp];TfM=[TfM;Tfp];sTj=sTj+Tjp;endn=length(TjM);s=0;sM=[];T=[];for i=1:n-1t=sum(TjM(1:i,1))+s+TfM(i);s=(t-sum(TjM(1:(i+1),1)))*((t-sum(TjM(1:(i+1),1)))>0); if t>480sI=i;breakelseT=[T;t];sM=[sM;s];endendsMean=mean([0;sM]);sMeanM=[sMeanM;sMean]sIM=[sIM;sI](2)结果显示:sMeanM =33.0934sIM =452.模拟100个工作日,求出平均每日完成服务的个数及每日顾客的平均等待时间。
单服务台排队系统仿真
单服务台排队系统仿真单服务台排队系统是指在一个服务台只有一个服务员的情况下,客户需要按顺序等待服务的系统。
本文将介绍一个针对单服务台排队系统的仿真模型。
在设计仿真模型之前,我们需要确定一些重要的参数。
首先是服务时间,即每个客户接受服务所需要的时间。
服务时间可以通过实际观察数据或者估算得出。
其次是到达间隔时间,即每个客户到达的时间间隔。
到达间隔时间可以通过实际观察数据或者使用随机数生成器进行模拟。
首先,我们需要创建一个事件队列来模拟客户的到达和离开。
事件队列是一个按照发生时间顺序排序的队列,每个事件都包含两个属性:时间和类型。
接下来,我们创建一个时钟来记录仿真进行的时间。
初始时,时钟指向第一个到达事件的时间。
然后,我们从事件队列中取出第一个事件,并更新时钟指向该事件的时间。
如果当前事件类型是到达事件,我们需要进行如下操作:首先,模拟下一个客户到达的时间,并将该事件添加到事件队列中。
然后,判断当前是否有客户正在接受服务。
如果没有,我们将当前事件类型设置为离开事件,并模拟该客户的服务时间和离开时间,并将该离开事件添加到事件队列中。
如果有客户正在接受服务,我们将当前事件类型设置为到达事件。
如果当前事件类型是离开事件,我们需要进行如下操作:首先,更新服务台的空闲状态。
然后,判断是否还有等待服务的客户。
如果有,我们将当前事件类型设置为离开事件,并模拟下一个客户的服务时间和离开时间,并将该离开事件添加到事件队列中。
如果没有等待服务的客户,我们将当前事件类型设置为到达事件。
重复上述步骤,直到事件队列中没有事件为止。
最后,我们可以根据仿真的结果,比如客户的等待时间、服务时间和系统繁忙率等指标,来评估和优化该排队系统的性能。
通过以上的模型,我们可以对单服务台排队系统进行仿真,并评估其性能。
我们可以通过改变服务时间、到达间隔时间等参数,来探究不同情况下系统的表现和优化方案。
同时,我们还可以根据仿真结果,对系统进行调整和改进,以提高客户的满意度和服务效率。
单服务台排队系统的仿真
实验2---单服务台排队系统的仿真姓名:学号:一、目标任务①模拟路由器缓存区M|M|1|m实验。
②设定:λ=8/s,μ=10/s,ρ=0.8,m=10。
③模拟系统106s,求系统报文的丢失率及报文在路由器中停留时间的均值。
④模拟100次,图展示每次的模拟结果,并与理论值0.0184比较。
二、编程语言Matlab三、关键代码lamda = 8; %报文到达强度u = 10; %路由器处理强度m = 10; %路由器缓冲区长度T = 1000000; %模拟时间a = []; %模拟运行时丢失率的运行结果mean_a = 0; %模拟运行时丢失率的平均运行结果ref_value = 0.0184; %丢失率理论值大小b = []; %模拟运行时报文在路由器中的停留时间mean_b = 0; %模拟运行时报文在路由器中停留时间的均值%模拟运行一百次for i=1:100time = 0; %绝对时钟t = 0; %路由器的下一空闲时刻N = 0; %到达报文数NI = 0; %丢失报文数q = 0; %队长stay_time = 0; %报文在路由器中的停留时间%按指数分布产生随机到达时间和服务时间while 1CRTime = exprnd(1/lamda); %按指数分布产生下一报文的到达随机时间间隔time = CRTime + time; %下一个报文到达的时间if time > Tbreak;endN = N + 1;q = q + 1;while q > 0 & t < timeq = q - 1;ServeTime = exprnd(1/u);%按指数分布产生报文的随机服务时间if q == 0t = time + ServeTime;elset = t + ServeTime;endstay_time = stay_time + ServeTime * (q + 1);endif q == m + 1 %如果超过缓冲区长,则丢失报文数加1,队长减1 NI = NI + 1;q = q - 1;endenda = [a, NI/N];b = [b, stay_time/(N-NI)];end%计算结果mean_a = mean(a);mean_b = mean(b);%绘图x = 1:100;plot(x, a, x, mean_a); %绘制模拟运行时丢包率变化图以及均值线scatter(x, a, '.'); %绘制模拟运行时丢包率变化散点图scatter(x, b, '.'); %绘制模拟运行时平均停留时间变化散点图fprintf('平均丢包率%6.5f\n', mean_a); % 打印平均丢包率fprintf('平均停留时间%6.5f\n', mean_b); % 打印平均停留时间四、实验结果与分析图1 丢包率和平均停留时间图2模拟运行时丢包率变化图以及均值线M/M/1/∞/∞ 模型模型条件(1) 输入过程――顾客源是无限的, 单个到来, 到达过程服从泊松分布, 即顾客到达间隔时间服从负指数分布;(2) 排队规则――单队, 且队长没有限制, 先到先服务;(3) 服务机构――单服务台, 服务时间的长短是随机的,服从相同的负指数分布 。
单服务排队系统的仿真
仿真钟:仿真中是离散事件系统仿真中的基 本组成部分,是随仿真的进程而不断更新的 时间推进机构,用来表示仿真时间的变化。
连续系统的仿真和离散系统仿真的区别:
1.在连续系统仿真中,仿真时间的变化是基于仿真步长 确定的;在离散事件系统仿真中,引起状态变化的事件 发生时间是随机的,仿真钟的推进步长完全是随机的。 2.连续系统仿真的模型一般由表征系统变量之间的关 系的方程来描述,如微分方程、差分方程等。离散事 件系统中的变量是反映系统各部分之间相互作用的一 些事件,系统模型则是反映这些事件状态的集合。
单服务排队系统的仿真
永久实体:永久驻留在系统中,是系统处 于活动状态的必要条件,如理发师; 临时实体:仅在系统中存在一段时间,按 一定规律到达,如顾客; 临时实体按一定规律不断产生,在永久实 体作用下通过系统,最后离开系统,整个系 统呈现出动态过程。
属性:每一实体所具有的有效特征。
事件:引起系统状态发生变化的行为;离 散事件系统本质是由事件驱动的(例: 顾客到达事件使服务员状态由闲到忙, 或使队列长度加1 );
Ë ¿ ¹ Í µ ½ ´ ï
Å ¶ Ó ½ á ¹
Å ¶ Ó ¹ æ Ô ò
· þ Î ñ ¹ æ Ô ò
þ Î · ñ » ú ¹
ë È À ¥
¼ 1 Å ¶ Í Ó Ï µ Í ³ Ê ¾ Ò â Í ¼
理发馆排队系统仿真
• • • • • • • •
一.仿真问题 理发馆一天的工作情况如下: 理发馆有1名理发员,同一时刻只能为1位顾客理发。 当顾客进门时,只要理发员状态为闲,就可坐下理发,否则需排队 等候。 一旦顾客理发完离去,排在对头的顾客便可开始理发。 若理发馆每天营业T分钟,求: 一天内顾客在理发馆内平均逗留的时间; 顾客排队等候理发的队列长度平均值; 二.基本要求 1) 模拟理发馆一天的工作过程:必须采用事件驱动的离散模型; 2) 每个顾客到达和下个顾客到达的时间间隔是随机的; 3) 每个顾客进门时都将生成两个随机数: 1>durtime:进门顾客理发所需服务时间(简称理发时间) 2>intertime:下个顾客将到达的时间间隔(简称间隔时间)
实验单服务台单队列排队系统仿真
双击buffer按钮,先设置Attributes选项卡中的Capacity属性值,将其改为-1,表现无限量,单击Apply,然后选择times选项卡,将processing time改为0,单击OK。
Variable。全局变量,在C语言中,存在全局变量和局部变量,eM-Plant中与其相似,在method中界说的变量属于局部变量,但是,某些时候,某个变量需要在差别的mothod中使用,此时则用到全局变量。
table。表,用于储存数据。
chart,制作种种图表
3. Frame
Frame 是仿真系统的事情界面,在Frame中建模并运行仿真系统。银行系统中,主顾取号后排队等着叫号,凭据差别的排队号类别被分成了多个排队行列,取号后分成多个行列则有flowcontrol控制。在Frame中如图所示:
主顾到达(source)后取号(singleproc)凭据差别的主顾类型分类(flowcontrol),分为小我私家客户和企业客户,分别进入小我私家客户行列和企业客户行列进行排队。在系统中有3个小我私家客户办事台(singleproc),如果任何一个小我私家客户办事台为空,则查找小我私家客户行列如果不为空,则选择最早进入的客户进行办事。系统中有n个企业客户办事台,则使用一个多办事台资源(prallelproc)表现,任意一个办事台完成对主顾的办事后,主顾离开(drain),它们之间的干系用连接线表现(connection)。针对本实验的单办事台系统则可以简朴表现为:
13. 控制
编写完代码后需要把method放到相应的位置,来控制仿真的运行,双击source,选择controls选项卡,将Entrance属性值设为QueueSystem.QueueFrame.ArrivalIntervalTime。
排队系统的离散事件模拟-示例
2.4 M/M/1排队系统的模拟这个排队系统的服务员为一人。
顾客到达系统的间隔时间为平均值等于1分的指数分布随机变量。
单位顾客服务时间为平均值等于0.5分的指数分布随机变量。
单列排队,采取先进先出的规则,排队行列的最大容量为100。
模拟的终止条件为有1000个顾客服务结束离开系统。
2.4.1 系统的实体、属性和事件事件类型有顾客到达事件、服务开始事件以及服务结束事件。
但是,服务开始事件一般与顾客到达事件或服务结束事件相互重合,所以决定有两类事件:a. 第1类事件——顾客到达事件;b. 第2类事件——顾客在服务结束后离开系统。
2.4.2 系统模拟程序为了进行模拟,除了主程序外,还编制了一系列的子程序或函数,它们的功能如表1.2.3所示。
表1.2.3 排队服务系统模拟的子程序和函数表1.2.4列举模型的变量的名称和定义。
表1.2.4 本模型的变量图1.2.8是本模拟模型的主程序,它的主要功能如下:MAIN PROGRAMNEVNTS = 2 //事件类型READ 10, MARRVT, MSERVT //到达间隔时间为1,服务时间为0.510 FORMA T(2F10.0)READ 20, TOTCUS //结束服务顾客总数100020 FORMA T(I 10)CALL INIT30 CALL TIMINGGO TO (40, 50), NEXT //NEXT = 1, GO TO 40; NEXT = 2, GO TO 50 40 CALL ARRIVEGO TO 6050 CALL DEPART60 IF(NUMCUS .LT. TOTCUS) GO TO 30CALL REPORTSTOPEND图1.2.8 排队服务系统模拟的主程序SUBROUTINE INITTIME = 0.0STATUS = 0.0 //服务员状态NIQ = 0 //系统中的停留人数TLEVNT = 0.0 //上次事件时间NUMCUS = 0 //已结束服务的顾客数TOTDEL = 0.0 //顾客停留时间总和ANIQ = 0.0 //系统中人数的时间积分值TNE(1)= TIME + EXPON(MARRVT) // TNE(1)为事件1的发生时间,设置模拟的首次事件时间TNE(2)= 1.E + 30RETURNEND图1.2.9 INIT子程序SUBROUTINE TIMINGRMIN = 1.E + 29 //最近事件的时间NEXT = 0 //下一事件类型DO 10 I = 1, NEVNTS // NEVNTS在主程序中定义为2IF(TNE(I).GE.RMIN) GO TO 10 //第1次运行时,RMIN=TNE(1),I=1RMIN = TNE(I)NEXT = I10 CONTINUEIF(NEXT .GT. 0) GO TO 30PRINT 2020 FORMA T(1H1, 5X, ‘EVENT LIST EMPTY’)STOP30 TIME = TNE(NEXT) //当前模拟时钟推移到最近事件时间RETURNEND图1.2.10 定时子程序ARRIVE子程序是处理第1类事件即顾客到达事件的子程序。
Witness单服务台排队系统实验详细步骤电子教案
第8章 单服务台排队系统仿真排队系统是离散事件系统中的典型的问题。
制造系统、生产系统、服务系统、修理和维护设备、交通运输和物资材料管理系统都是典型的有形或无形的排队系统。
由于排队系统的应用已越来越广泛,排队特征、排队规则、服务机构也变得越来越复杂,用解析方法已无法求解,计算机模拟是求解排队系统和分析排队系统性能的非常有效的方法。
8.1 单服务台排队系统系统描述与仿真目的1)了解排队系统的设计。
2)熟悉系统元素Part 、Machine 、Buffer 、Variable 、Timeseries 的用法。
3)深入研究系统元素Part 的用法。
4)研究不同的顾客服务时间和顾客的到达特性对仿真结果的影响。
8.2 单服务台排队系统工作流程8.2.1 顾客到达特性在该系统中,顾客的到达规模(成批到达还是单个到达)是单个到达,顾客到达率Ai 服从均值为 的指数分布,即8.2.2 顾客服务时间顾客服务时间为Si ,服从指数分布,均值为 ,即 8.3 仿真模型的设计8.3.1 元素定义(Define )本系统的元素定义如表8-1所示。
m in 5=A βAs Ae Af ββ/)(-=)0(≥A min 4=s βSA Se Sf ββ/)(-=)0(≥SJifen Part 1 队列积分Paidui Buffer 1 排队队列Fuwuyuan Machine 1 服务员Jifen0 Variable(type:real) 1 积分结果显示Duichang Timeseries 1 队列长度8.3.2 元素可视化(Display)设置各个实体元素的显示特征定义设置如图8-1所示。
图8-1 各个实体元素的显示特征1.Part元素可视化设置在元素选择窗口选择Guke元素,鼠标右键点击Display,跳出Display对话框(图8-2),设置它的Text(图8-3)、Icon(图8-4)。
图8-2 Display对话框图8-3 Display Text对话框图8-4 Display Icon对话框2.Buffer元素可视化设置在元素选择窗口选择Paidui元素,鼠标右键点击Display,跳出Display对话框(图8-2),设置它的Text、Icon、Rectangle(图8-5)。
合肥工业大学-单服务员单队列系统仿真
计算机仿真单服务员单队列系统仿真实验班级:机设13-4班学号: 2013210360姓名:杨尚武授课教师:翟华日期: 2016年4月13日实验二单服务员单队列系统仿真实验一、实验目的通过实验了解离散事件系统仿真一般过程,了解离散事件系统中典型的单服务员单队列系统的仿真一般过程,了解不同分布随机数的计算机实现过程,了解事件扫描法在离散事件系统中的应用。
二、实验要求通过实验了解离散事件系统仿真一般过程,了解离散事件系统中典型的单服务员单队列系统的仿真一般过程,了解不同分布随机数的计算机实现过程,了解事件扫描法在离散事件系统中的应用。
同学能在参考源程序的基础上,独立编写C源程序,或其他高级语言程序,能正确计算仿真结果,并对结果进行分析。
三、参考C语言程序#include "stdio.h"#include "math.h"FILE * fp;float seed;int sstop,ip;float miat,msvt,svt;float tval,tlq,tmen;float sigma,time,lqt,lst,tle;float wkst[100];float b,mq,s,f,nd,ts,is,ta,ia,clock,fel[3];int imevt,numevs;void rptgen() //报告生成子程序{ float rho,w,pc,amts,amta,lq,l,wq;rho=b/clock;w=s/nd;pc=f/nd;amts=ts/is;amta=ta/ia;lq=tlq/clock;l=tmen/clock;wq=tlq/nd;if((fp=fopen("fz22","wb"))==NULL){printf("cannot open file\n");}printf("time=%f\n",time);fprintf(fp,"miat=%f,msvt=%f,sigma=%f,time=%f\n",miat,msvt,sigma,time) ;fprintf(fp,"rho=%f,mq=%f,pc=%f,clock=%f\n",rho,mq,pc,clock);fprintf(fp,"nd=%f,amts=%f,amta=%f\n",nd,amts,amta);fprintf(fp,"lq=%f,l=%f,wq=%f,w=%f\n",lq,l,wq,w);}float rand() //随机数生成子程序{float a,c,m;float rand1;a=25173.0;c=13849.0;m=65535.0;seed=(seed*a+c)-m*(int)((seed*a+c)/m);if(seed==0.0) seed=1.0;rand1=seed/m;return rand1;}float normal(float ex,float stdx) //正态分布随机数生成子程序//float ex,stdx;{float sum,x;int i;float r;sum=0.0;for(i=1;i<=12;i++){r=rand();sum=sum+r;}x=stdx*(sum-6.0)+ex;printf=(“normal=%\n”,x);return x;}float expent(float ex) //指数分布随机数生成子程序{float r,x;r=rand();x=-ex*log(r);return x;}void initlz() //系统初始化子程序{float aat;clock=0.0; //置仿真时钟为.0imevt=0; //假定系统在时间为空闲lqt=0.0; //置以下各统计量初值为lst=0.0;tle=0.0;b=0.0;mq=0.0;s=0.0;f=0.0;nd=0.0;ts=0.0;is=0.0;ta=0.0;ia=0.0;tlq=0.0;tmen=0.0;aat=expent(miat);fel[1]=clock+aat; //产生第一次到达,并安排在FEL()fel[2]=1.0e+30; //置FEL()为无穷大,表示系统空闲时,不会发生离开事件}void timadv() //时间推进子程序{ float fmin;int i;fmin=1.0e+29;imevt=0;for (i=1;i<=numevs;i++) //搜索FEL以找出下一事件{if(fel[i]>=fmin) continue;fmin=fel[i];imevt=i;}if(imevt>0) //判断有无将来事件{clock=fel[imevt]; //设定仿真时钟为下一事件时间,事件将在时间FEL (IMEVT)发生tval=clock-tle;tlq=tlq+lqt*tval;tmen=tmen+(lqt+lst)*tval;}else{rptgen(); //若将来事件为空,调用报告子程序sstop=1;}}void arrvl() //到达事件子程序{float aat,svt;if(lst==1.0) goto loop2; //检查服务员是否被占lst=1.0; //若服务员空闲,修改系统状态并记录新的顾客的到达时间wkst[ip]=clock;svt=normal(msvt,sigma); //为新到达顾客产生服务时间并安排离开事件fel[2]=clock+svt;ts=ts+svt;is=is+1.0; //修改累积统计量tle=clock;if(lqt>mq)mq=lqt;goto loop3;loop2: lqt=lqt+1.0; //若服务员被占,修改系统状态,记录新的顾客到达时间及系统中顾客数ip=lqt+lst;if(ip>100) goto loop4; //现设系统容量为人,若超过即给出报告wkst[ip]=clock;b=b+(clock-tle); //修改累积统计量tle=clock;if(lqt>mq) mq=lqt;loop3: aat=expent(miat); //产生一个到达时间间隔并安排下一到达事件ta=ta+aat;ia=ia+1.0;fel[1]=clock+aat;goto loop31;loop4: printf("overflow in array wkst");rptgen();sstop=1;loop31:return;}void dpart() //离开事件子程序{ int i,i1;float rt,svt;b=b+(clock-tle); //修改累积统计量tle=clock;rt=clock-wkst[ip];s=s+rt;nd=nd+1.0;if(rt>=4.0)f=f+1.0; //记录(累计)停留时间大于等于的顾客数if(lqt>1.0) //检查队列空否{for(i=1;i<=lqt;i++){i1=i+1; //此时至少有一个顾客在队列中,使每个顾客向前移动一个位置wkst[i]=wkst[i1];}lqt=lqt-1.0; //队列中的顾客数减svt=normal(msvt,sigma); //对将被服务的顾客产生一个新的服务,时间且安排下一个//离开事件fel[2]=clock+svt;}else{ //队列空,服务员空闲,下一离开事件置在无穷大时间lst=0.0;fel[2]=1.0e+30;}}void main() //主程序{ip=0;seed=2.0; //输入随机数种子miat=10.0; //msvt=3.0;sigma=1.0;time=500.0;numevs=2; //确定事件总数为initlz(); //调用初始化子程序sstop=0; //程序终止变量,sstop=0,程序循环,sstop=1,程序终止loop: timadv(); //调用时间推进子程序if(sstop==1) goto loopp; //判断sstop=1,程序终止if (imevt==1) //IMEVT=1为到达,IMEVT=2为离开{arrvl(); //调用到达事件子程序if(sstop==1) goto loopp; //判断sstop=1,程序终止goto loop; //程序循环执行}if (imevt==2) dpart(); //调用离开事件子程序if (clock<time) goto loop; //判断仿真是否结束,若未结束继续循环执行rptgen(); //当仿真结束时生成报告输出loopp:return;}四、实验报告1.给出RAND()子程序输出的10个数据,以及对应的符合正态分布和指数分布的随机数。
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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
单服务台排队系统离散事件系统仿真实验
单服务台排队系统离散事件系统仿真实验离散事件系统仿真实验通过单服务台排队系统的方针,理解和掌握对离散事件的仿真建模方法,以便对其他系统进行建模,并对其系统分析,应用到实际系统,对实际系统进行理论指导。
1.排队系统的通常理论一般的排队系统都有三个基本组成部分:(1)抵达模式:指动态实体(顾客)按怎样的规律抵达,描绘实体抵达的统计数据特性。
通常假设顾客总体就是无穷的。
(2)服务机构:指同一时刻有多少服务设备可以接纳动态实体,它们的服务需要多少时间。
它也具有一定的分布特性。
通常,假定系统的容量(包括正在服务的人数加上在等待线等待的人数)是无限的。
(3)排队规则:所指对下一个实体服务的挑选原则。
通用型的排队规则包含先进先出(fifo),后进先出(lifo),随机服务(siro)等。
2.对于离散系统有三种常用的仿真策略:事件调度法、活动扫描法、进程交互法。
(1)事件调度法(eventscheduling):基本思想:离散事件系统中最基本的概念是事件,事件发生引起系统状态的变化,用事件的观点去分析真实系统。
通过定义事件或每个事件出现系统状态的变化,按时间顺序确认并继续执行每个事件出现时有关逻辑关系。
(2)活动扫描法:基本思想:系统存有成分共同组成,而成分又涵盖活动。
活动的出现必须满足用户某些条件,且每一个主动成分均有一个相应的活动例程。
仿真过程中,活动的发生时间也作为条件之一,而且较之其他条件具有更高的优先权。
(3)进程可视化法:基本思想:将模型中的主动成分历经系统所发生的事件及活动,按时间发生的顺序进行女团,从而构成进程表中。
系统仿真钟的大力推进使用两张进程表中,一就是当前事件表中,二就是将来事件表中。
3.本实验采用的单服务台模型(1)抵达模式:顾客源就是无穷的,顾客单个抵达,相互单一制,一定时间的抵达数顺从指数(2)排队规则:单队,且对队列长度没有限制,先到先服务的fifo规则。
(3)服务机构:单服务台,各顾客的服务时间相互独立,服从相同的指数分布。
单服务排队系统仿真实验
模型3D图见下图所示:
六、结果分析
教材中仿真结果可知,其30次的仿真情况可知,该系统在 每天8h的工作时间内,平均队长不超过2,最大队长只有8, 每个顾客的平均被服务时间小于4min,而顾客的平均排队 纯等待时间大多数抽样都小于2min,只有个别抽样接近 5min。可见,该系统的服务状况良好,顾客基本得到及时 的服务。从业务员的工作量看,一个业务员每天大约要处 理100多(输出结果的抽样小于115)位顾客的银行业务, 其利用率,也就是其处理业务时间与总工作时间的比在 63.1%-82.5%之间。
根据表格调查的数据计算出该排队系统的M/M/ 1 模型(见上 个模块的解说),并用仿真软件Flexsim6.0版运行30次得统 计数据如下: 举例其中一次的仿真的统计数据的图形: (1)排队等待的相关统 计数据表图
2)服务处理的相关统计数据表图
LOGO
本报告研究对象为中国银行重庆大学处分行某一服务窗口, 数据取自银行内唯一非现金业务柜台。研究对象的选取虽然 不是最典型的,但是综合考虑了研究地域范围和小组成员作 业时间有限,另有其他方案由于各种原因无法进行,故选择 离学习型较近的有代表性的中国银行中的服务窗口作为最史最为悠久的银行之
本排队系统用: 顾客的数目 到达模式 服务模式 系统容量 排队规则
为探求此排队系统的规律, 首先需确定顾客流在一定 时间内到达的概率分布函数。抵达本银行服务窗口的顾客 流量大体上服从Poisson 分布, 顾客流抵达银行便按先后 顺序排队, 进入单服务窗口,即排队论中的M/M/1系统。 所谓M/M/1排队系统是指这样的一种排队模型: 顾客的到 达为Poisson 流, 银行对每位顾客的服务时间独立同负指 数分布,顾客按先到先服务( FCFS) 规则排队, 当顾客到 达时, 若服务台正在忙碌, 则顾客排成一个队列等待服务。 在实际工作中,客户存取款、转账汇款、缴费、理财、开 销户等业务是随机发生的,客户办理业务的种类不同,服 务时间必然有所差别。
4-离散事件系统仿真
否 仿真是否结束? 是
报告产生 程序
1、输出有关的统计值 2、输出报告
事件和系统状态
1. 2.
1. 2.
事件 顾客到达系统(属性:到达时间) 顾客离开系统(属性:离开时间) 系统状态 顾客排队的队长 服务员忙闲状态
顾客到达
到达事件
预定下一个 到达事件 否
服务员是否空闲
1.该顾客等待时间为0 2.完成服务的顾客数加1 3.置服务员为忙 4.预定本顾客的离开事件 返回
随机库存模型(1)
一个库存系统中最基本的两个概念是“需求” 和“订货”。 需求:这是库存系统的输出。由于需求,使存 储量不断减少。需求量有确定性的和随机性的 两种。 订货:这是库存系统的输入。由于订货,使存 储量得以补充,以满足要求。一般从订货到货 物进入仓库,往往需要一段时间,这段时间称 为滞后时间。由于存在滞后,所以对管理者来 说,需要提前一段时间订货,也就是提前时间。 提前时间也有确定和随机两种。
排队系统
排队系统的主要要素是顾客和服务员 主要因素 到达模式 服务模式 服务员数目 系统容量 排队规则(FIFO、LIFO、PR、SIRO)
1. 2. 3. 4平均顾客数
时刻t系统内的顾客总数为L(t) m
ˆ L=
∑R
i =1
i
T
式中,T为统计的总时间,Ri=时间区间[bi-1,bi]上排队的人 数乘以区间长度,m是在T内发生的事件总数
Simlib的全局变量(1)
sim_time: float型,表示仿真时间,由 timing函数更新 next_event_type:int型,下一事件的类型, 由timing函数更新 transfer:float数组(1…10),用于传递 数据到列表中或者从列表中取出数据。 maxatr:int型,每条纪录的最多属性数, 最少为4,最大为10
单服务台排队系统离散事件系统仿真实验
单服务台排队系统离散事件系统仿真实验在单服务台排队系统中,存在一个服务台和一些顾客。
顾客根据一定的到达规律到达系统,并进行排队等候服务。
每个顾客需要一定的时间来接受服务,然后离开系统。
在整个过程中,需要记录每个顾客的到达时间、完成时间、等候时间等信息,以评估系统的性能。
以下是进行单服务台排队系统离散事件系统仿真实验的步骤:1.制定实验目标和假设:明确实验的目标和假设,例如评估平均等候时间、系统的利用率等。
2.定义实验参数:设置模拟的时间段、顾客到达的规律、服务时间分布等。
可以根据实际情况选择不同的参数值。
3.创建顾客队列:使用队列数据结构来表示顾客队列,顾客到达时将其加入队列中。
4.初始化系统状态:初始化服务台为空闲状态,设置初始时钟为0。
5.模拟顾客到达:根据到达规律随机生成顾客到达的时间,并将其加入队列。
6.模拟服务过程:当服务台空闲时,从队列中取出下一个顾客进行服务。
根据服务时间分布生成一个随机的服务时间,将服务结束时间设置为当前时钟加上服务时间。
7.记录统计信息:记录每个顾客的到达时间、服务开始时间、完成时间、等候时间等信息。
同时记录系统的状态信息,如系统空闲时间、顾客总数等。
8.更新系统状态:更新服务台的状态,如果队列为空,则服务台为空闲状态,否则继续进行下一个顾客的服务。
9.终止条件判断:判断是否继续模拟,可以根据实验目标设定条件,如模拟时间达到一定阈值或顾客数量达到一定数量。
10.实验结果分析:根据记录的统计信息,计算实验结果,如平均等候时间、系统的利用率等。
通过对比不同参数设置下的实验结果,评估系统的性能情况,并对系统设计进行优化。
在实验过程中,需要注意选择合适的离散事件系统仿真工具,如MATLAB、Python等,进行系统的建模和实验的实施。
同时,应合理选择实验参数和统计指标,以保证实验结果的可靠性和可解释性。
通过进行单服务台排队系统离散事件系统仿真实验,可以评估系统的性能,并对系统设计进行优化,提高系统的效率和顾客的满意度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散事件系统仿真实验一、实验目标通过单服务台排队系统的方针,理解和掌握对离散事件的仿真建模方法,以便对其他系统进行建模,并对其系统分析,应用到实际系统,对实际系统进行理论指导。
二、实验原理1.排队系统的一般理论一般的排队系统都有三个基本组成部分:(1)到达模式:指动态实体(顾客)按怎样的规律到达,描写实体到达的统计特性。
通常假定顾客总体是无限的。
(2)服务机构:指同一时刻有多少服务设备可以接纳动态实体,它们的服务需要多少时间。
它也具有一定的分布特性。
通常,假定系统的容量(包括正在服务的人数加上在等待线等待的人数)是无限的。
(3)排队规则:指对下一个实体服务的选择原则。
通用的排队规则包括先进先出(FIFO),后进先出(LIFO),随机服务(SIRO)等。
2.对于离散系统有三种常用的仿真策略:事件调度法、活动扫描法、进程交互法。
(1)事件调度法(Event Scheduling):基本思想:离散事件系统中最基本的概念是事件,事件发生引起系统状态的变化,用事件的观点来分析真实系统。
通过定义事件或每个事件发生系统状态的变化,按时间顺序确定并执行每个事件发生时有关逻辑关系。
(2)活动扫描法:基本思想:系统有成分组成,而成分又包含活动。
活动的发生必须满足某些条件,且每一个主动成分均有一个相应的活动例程。
仿真过程中,活动的发生时间也作为条件之一,而且较之其他条件具有更高的优先权。
(3)进程交互法:基本思想:将模型中的主动成分历经系统所发生的事件及活动,按时间发生的顺序进行组合,从而形成进程表。
系统仿真钟的推进采用两张进程表,一是当前事件表,二是将来事件表。
3.本实验采用的单服务台模型(1)到达模式:顾客源是无限的,顾客单个到达,相互独立,一定时间的到达数服从指数分布。
(2)排队规则:单队,且对队列长度没有限制,先到先服务的FIFO 规则。
(3)服务机构:单服务台,各顾客的服务时间相互独立,服从相同的指数分布。
(4)到达时间间隔和服务时间是相互独立的。
4.事件调度法的仿真策略事件调度法的基本思想是:用事件的观点来分析真实系统,通过定义事件及每个事件发生对于系统状态的变化,按时间顺序确定并执行每个事件发生时有关的逻辑关系。
按这种策略建立模型时,所有事件均放在事件表中。
模型中设有一个时间控制成分,该成分从事件表中选择具有最早发生时间的事件,并将仿真钟修改到该事件发生的时间,再调用与该事件相应的事件处理模块,该事件处理完后返回时间控制成分。
这样,事件的选择与处理不断地进行,直到仿真终止的条件或程序事件产生为止。
5.离散事件结果分析 仿真运行方式可分为两大类:(1)终止型仿真:仿真的运行长度是事先确定的由于仿真运行时间长度有限,系统的性能与运行长度有关,系统的初始状态对系统性能的影响是不能忽略的。
为了消除由于初始状态对系统性能估计造成的影响,需要多次独立运行仿真模型。
(2)稳态型仿真:这类仿真研究仅运行一次,但运行长度却是足够长,仿真的目的是估计系统的稳态性能。
三、理论分析根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、顾客到达模式实体(临时实体)到达模式:顾客。
实体到达模式是顾客到达模式,设到达时间间隔A 1服从均值A β=5min 的指数分布A A Ae Af ββ/1)(-=(A ≥0)2、服务模式设服务员为每个顾客服务的时间为S i ,它也服从指数分布,均值为s β=4minS S se Sf ββ/1)(-=(S ≥0)3、服务规则由于是单服务台系统,考虑系统顾客按单队排列,并按FIFO方式服务4、理论分析结果在该系统中,设λρμ=,则稳态时的平均等待队长为1Qρλρ=-,顾客的平均等待时间为Tρμλ=-。
5、系统模型三、设计算法1、算法模型2、仿真设计算法(主要函数)利用指数分布间的关系,产生符合过程的顾客流,产生符合指数分布的随机变量作为每个顾客的服务时间: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); %系统平均等待队长3、仿真程序(MatLab语言)clear;clc;%M/M/1排队系统仿真SimTotal=input('请输入仿真顾客总数SimTotal='); %仿真顾客总数;Lambda=0.2;Mu=0.25;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)])四、仿真结果分析顾客的平均等待时间与顾客的平均等待队长如下:仿真顾客总数=100012345平均值平均等待时间18.941516.95516.555220.818215.624417.44527平均排队时间15.078613.162512.491816.688511.681713.49921平均顾客数 3.7583.4736 3.1985 4.153 2.8911 3.40464平均等待队长 2.99162.6966 2.4134 3.3292 2.1615 2.63549仿真顾客总数=1000678910理论值平均等待时间17.106417.700417.22416.282217.245420平均排队时间13.188713.667713.244912.450513.337216平均顾客数 3.267 3.4839 3.3342 3.1106 3.37654平均等待队长 2.5188 2.6901 2.5639 2.3785 2.6113 3.2仿真顾客总数=200012345平均值平均等待时间20.123120.988718.910517.313316.297218.66422平均排队时间15.921716.941115.115613.396612.311614.65662平均顾客数 4.0295 4.2218 3.7538 3.4491 3.2205 3.69717平均等待队长 3.1882 3.4077 3.0005 2.6689 2.4329 2.90384仿真顾客总数=2000678910理论值平均等待时间19.725521.868918.260517.214515.9420平均排队时间15.612717.813314.293513.14512.015116平均顾客数 3.8418 4.3209 3.7257 3.3467 3.06194平均等待队长 3.0408 3.5196 2.9163 2.5555 2.308 3.2仿真顾客总数=300012345平均值平均等待时间15.607520.569717.427520.003319.546919.15597平均排队时间11.736716.594913.403216.131615.433415.17725平均顾客数 3.1148 4.1752 3.4665 4.1134 3.889 3.82256平均等待队长2.34233.3684 2.666 3.3173 3.0706 3.02896仿真顾客总数=3000678910理论值平均等待时间23.318118.391218.738620.925717.031220平均排队时间19.253814.460314.758816.927413.072416平均顾客数 4.5707 3.62 3.7614 4.2123 3.30234平均等待队长 3.774 2.8462 2.9626 3.4075 2.5347 3.2仿真顾客总数=500012345平均值平均等待时间22.157318.371818.970720.051219.023819.61812平均排队时间18.184814.417814.992616.08915.013515.62898平均顾客数 4.5463 3.6647 3.8217 4.025 3.7909 3.94222平均等待队长3.7312 2.876 3.0203 3.2296 2.9918 3.14096仿真顾客总数=5000678910理论值平均等待时间20.13918.450519.512519.547419.95720平均排队时间16.16814.483615.549215.505215.886116平均顾客数 4.0671 3.6712 3.9518 3.8901 3.99344平均等待队长3.26512.88193.14923.08573.17883.2从上表对比中可以看出,通过这种模型和方法仿真的结果和理论值十分接近,当增加仿真顾客数时,可以得到更理想的结果。