随机服务系统模拟—R实现(一)
作者:互联网
M/M/1随机服务系统的模拟
日常生活中存在大量有形和无形的排队或拥挤现象,如旅客购票排队,市内电话占线等现象。排队论的基本思想是 1909 年丹麦数学家、科学家,工程师 A. K. 埃尔朗在解决自动电话设计问题时开始形成的,当时称为话务理论。他在热力学统计平衡理论的启发下,成功地建立了电话统计平衡模型,并由此得到一组递推状态方程,从而导出著名的埃尔朗电话损失率公式。20 世纪 30 年代中期,当费勒(W. Feller)引进了生灭过程时,排队论才被数学界承认为一门重要的学科。在第二次世界大战期间和第二次世界大战以后,排队论在运筹学这个新领域中变成了一个重要的内容。
一、随机服务系统概述
排队论 (queuing theory),或称随机服务系统理论, 是通过对服务对象到来及服务时间的统计研究,得出这些数量指标(等待时间、排队长度、忙期长短等)的统计规律,然后根据这些规律来改进服务系统的结构或重新组织被服务对象,使得服务系统既能满足服务对象的需要,又能使机构的费用最经济或某些指标最优。它是数学运筹学的分支学科,也是研究服务系统中排队现象随机规律的学科。广泛应用于计算机网络、生产、运输、库存等各项资源共享的随机服务系统。 排队论研究的内容有 3 个方面:统计推断,根据资料建立模型;系统的性态,即和排队有关的数量指标的概率规律性;系统的优化问题。其目的是正确设计和有效运行各个服务系统,使之发挥最佳效益。
1. 随机服务系统的建模表示
20 世纪 50 年代初,肯德尔(D. G. Kendall)对排队论作了系统的研究,他用嵌入马尔可夫链方法研究排队论,使排队论得到了进一步的发展。是他首先(1951 年)用 3 个字母组成的符号 X/Y/Z 表示一个排队系统。其中 X 表示顾客到达时间分布,Y 表示服务时间的分布,Z 表示服务机构中的服务台的个数。一般是以相继顾客到达系统的间隔时间分布、服务时间的分布和服务台数目为分类标志。现代常用的分类方法是英国数学家D.G.肯德尔提出的分类方法,后面不断完善形成的。
X/Y/Z/A/B/C
X — 顾客相继到达的间隔时间的分布;
Y — 服务时间的分布(M — 指数分布、D — 确定时间、Ek — k 阶埃尔朗分布、G — 一般分布等);
Z — 服务台个数;
A — 系统容量限制(默认为 ∞);
B — 顾客源数目(默认为 ∞);
C — 服务规则 (默认为先到先服务 FCFS)。
其中M/M/1是最基础的单服务台单队列的随机服务系统模型;其中M/M/C是最基础的多服务台单队列的随机服务系统模型。
2. 随机服务系统的要素
服务系统由服务机构和服务对象(顾客)构成。服务对象到来的时刻和对他服务的时间(即占用服务系统的时间)都是随机的。排队系统包括三个组成部分:输入过程、排队规则和服务机构。
输入过程
输入过程考察的是顾客到达服务系统的规律。它可以用一定时间内顾客到达数或前后两个顾客相继到达的间隔时间来描述,一般分为确定型和随机型两种。例如,在生产线上加工的零件按规定的间隔时间依次到达加工地点,定期运行的班车、班机等都属于确定型输入。随机型的输入是指在时间 t 内顾客到达数 n(t) 服从一定的随机分布。如服从泊松分布,则在时间 t 内到达 n 个顾客的概率为或相继到达的顾客的间隔时间 T 服从负指数分布,即 P(T ≤ t) = 1 – e-λt,式中 λ 为单位时间顾客到达数的期望,称为平均到达率;1/λ 为平均间隔时间。在排队论中,讨论的输入过程主要是随机型的。
排队规则
排队规则分为等待制、损失制和混合制三种。当顾客到达时,所有服务机构都被占用,则顾客排队等候,即为等待制。在等待制中,为顾客进行服务的次序可以是先到先服务,或后到先服务,或是随机服务和有优先权服务(如医院接待急救病人)。如果顾客来到后看到服务机构没有空闲立即离去,则为损失制。有些系统因留给顾客排队等待的空间有限,因此超过所能容纳人数的顾客必须离开系统,这种排队规则就是混合制。
服务机构
可以是一个或多个服务台。多个服务台可以是平行排列的,也可以是串连排列的。服务时间一般也分成确定型和随机型两种。例如,自动冲洗汽车的装置对每辆汽车冲洗(服务)时间是相同的,因而是确定型的。而随机型服务时间 v 则服从一定的随机分布。如果服从负指数分布,则其分布函数是 P(v ≤ t) = 1 – e-μt,式中 μ 为平均服务率,1/μ 为平均服务时间。
3. 随机服务系统的绩效指标
研究排队系统问题的主要目的是研究其运行效率,考核服务质量,以便据此提出改进措施。通常评价排队系统优劣有6项数量指标。
①系统负荷水平ρ :它是衡量服务台在承担服务和满足需要方面能力的尺度;
②系统空闲概率P0:系统处于没有顾客来到要求服务的概率;
③队长:系统中排队等待服务和正在服务的顾客总数,其平均值记为LS;
④队列长:系统中排队等待服务的顾客数,其平均值记为Lg;
⑤逗留时间:一个顾客在系统中停留时间,包括等待时间和服务时间,其平均值记为WS;
⑥等待时间:一个顾客在系统中排队等待时间,其平均值记为Wg。
M/M/1排队系统是一种最简单的排队系统。系统的各项指标可由状态转移速度图推算出来。其他类型的排队系统的各种指标计算公式则复杂得多,可专门列出计算公式图表备查。现已开始应用计算机仿真来求解排队系统问题。
4. 随机服务系统的应用
排队论已广泛应用于交通系统、港口泊位设计、机器维修、库存控制和其他服务系统。
二、M/M/1随机服务系统的模拟
M/M/1服务系统:(1)队列长度没有限制;(2)顾客到达的时间间隔和服务时间均服从指数分布;(3)服务台数量分别为1和s。这种模型是一种出生-死亡过程,此随机过程中的每一个状态代表模型中人数的数目。因为模型的队列长度无限且参与人数亦无限,故此状态数目亦为无限。例如状态0表示模型闲置、状态1表示模型有一人在接受服务、状态2表示模型有二人(一人正接受服务、一人在等候),如此类推。 此模型中,出生率(即加入队列的速率)λ在各状态中均相同,死亡率(即完成服务离开队列的速率)μ亦在各状态中相同(除了状态0,因其不可能有人离开队列)。故此,在任何状态下,只有两种事情可能发生:有人加入队列。如果模型在状态k,它会以速率λ进入状态k + 1
有人离开队列。如果模型在状态k(k不等于0),它会以速率μ进入状态k − 1,由此可见,模型的隐定条件为λ < μ。如果死亡率小于出生率,则队列中的平均人数为无限大,此这种系统没有平衡点。
1. R模拟包Simmer简介
2.
library(dplyr)
library(simmer)
T0=10
T1=10000
lambda=1.0
mu=1.2
set.seed(1234)
## 建立模拟环境
bank <- simmer("bank")
## 用trajectory()建立顾客,并指定顾客的一系列活动
## seize()获取柜台服务资源,如果正在忙,就进入排队
## 服务时间用timeout指定,为了生成多个随机服务时间,
## timeout的参数是返回随机服务时间的而函数而不是时间值本身
customer <-
trajectory("顾客") %>%
seize("柜台") %>%
timeout( function() rexp(1, mu)) %>%
release("柜台")
## 用add_resource生成柜台资源
## 用add_generator()生成顾客到来列
bank %>%
add_resource("柜台") %>%
add_generator("顾客", customer, function() {rexp(1, lambda)} )
## 用run()执行模拟到指定结束时刻
bank %>%
run(until=T1)
3. R模拟结果
knitr::opts_chunk$set(echo = TRUE)
3. R模拟可视化
knitr::opts_chunk$set(echo = TRUE)
4. 与模型理想值比较
knitr::opts_chunk$set(echo = TRUE)
knitr::opts_chunk$set(echo = TRUE)
标签:服务,队列,排队,系统,随机,系统模拟,顾客 来源: https://www.cnblogs.com/haohai9309/p/16205292.html