排队论——数学模型和绩效指标精解

news/2024/11/15 17:52:41/文章来源:https://www.cnblogs.com/haohai9309/p/18416440

排队论最早由丹麦工程师Agner Krarup Erlang于1910年提出,旨在解决自动电话系统的问题,成为话务理论的奠基石。Erlang通过研究电话呼叫的随机到达和服务时间,推导出著名的埃尔朗电话损失率公式,用于计算电话系统的呼叫阻塞率,揭示了排队现象的本质。Erlang之后,排队论得到进一步发展。瑞典数学家Felix Balm引入了有限后效流概念,帮助分析复杂的输入过程;美国数学家William Feller提出了生灭过程理论,用以描述顾客到达和离开的动态变化。David George Kendall则通过嵌入马尔科夫链理论对排队系统进行分类,并提出了著名的Kendall符号表示法:A/B/C/d/e/f,简化了排队系统的描述。匈牙利数学家Lajos Takács引入组合方法,提升了求解复杂排队系统的效率。Takács的工作使得排队论在工程、计算机科学等领域得到广泛应用,成为研究排队现象的重要工具。

排队场景1 排队场景2

一、Kendall排队系统分类模型

排队论,又称随机服务系统,是研究顾客随机到达、排队并接受服务的数学理论。

1.1 排队系统的构成要素

排队现象的复杂性在于其具有随机性和动态性。顾客的到来时刻与数量通常是未知的,因此排队系统是一种典型的随机聚散现象。为了更好地理解和分析排队系统,研究者通常将其划分为三个主要要素:输入过程、排队规则和服务机构。

输入过程:输入过程指的是顾客的到达方式。根据顾客到达的特点,输入过程可以进一步分为不同类型。例如,顾客源可以是有限的或无限的。当顾客源有限时,系统的顾客数量是有上限的,而无限顾客源意味着顾客可以源源不断地到达。顾客的到来方式也可以是单独到来或成批到来。单独到来意味着每次只有一个顾客到达系统,而成批到来则表示多个顾客在同一时间到达系统。此外,顾客的到达时间间隔可以是随机的或确定的,随机的到达间隔通常遵循某种概率分布,例如泊松分布(Poisson distribution)。输入过程还可以分为平稳和非平稳两种情况。在平稳输入过程中,顾客到达的平均速率在整个时间段内保持不变;而在非平稳输入过程中,顾客到达的速率会随时间变化,例如高峰期和非高峰期的顾客到达速率可能会有所不同。
排队规则:排队规则决定了顾客在系统中等待和接受服务的方式。常见的排队规则包括即时制(也称为损失制)和等待制。在即时制排队系统中,如果所有服务台都被占用,顾客会立即离开系统,不会排队等待。而在等待制排队系统中,顾客可以在服务台满员时排队等待,直到有服务台空出。服务顺序也是排队规则的一个重要组成部分。最常见的服务顺序是先到先服务(First-Come, First-Served, FCFS),即顾客按到达的顺序接受服务。另一种较少见的服务顺序是后到先服务(Last-Come, First-Served, LCFS),即最新到达的顾客优先接受服务。此外,还可以采用随机服务顺序,即顾客按随机顺序接受服务,或者采用优先权服务规则,即某些顾客比其他顾客享有更高的服务优先级。
服务机构:服务机构是指为顾客提供服务的设施。服务机构可以包含一个或多个服务台(servers)。当系统中有多个服务台时,它们可以以串行或并行的方式运作。串行服务意味着顾客需要依次通过每个服务台,而并行服务则表示顾客可以选择任意一个空闲的服务台。
服务时间的分布也可以分为确定型、纯随机型和中间型三类。确定型服务时间意味着每个顾客的服务时间是固定的;纯随机型服务时间则意味着每个顾客的服务时间是完全随机的,通常遵循某种概率分布,例如指数分布(Exponential distribution);而中间型服务时间则介于两者之间,即服务时间具有某种随机性,但存在一定的规律性。

1.2 Kendall符号表示法

为了方便描述排队系统的特性,Kendall提出了一种符号表示法,其一般形式为:A/B/C/d/e/f。具体而言:

A代表顾客到达过程的分布类型,常见的分布包括泊松分布(M,Markovian)、一般分布(G,General)、确定型分布(D,Deterministic)等;
B代表服务时间的分布类型,常见的分布类型与A类似;
C表示系统中的服务台数量;
d表示系统的容量,即排队系统中最多可以容纳多少顾客;
e表示顾客的总数目,通常可以是无限的;
f表示排队规则,如先到先服务、后到先服务等。

通过这种符号表示法,我们可以简洁地描述各种不同的排队系统,亦即不同的排队模型。例如:

M/M/S/∞表示一个输入过程为泊松流,服务时间服从指数分布,系统有S个并行服务台,且系统容量为无限的排队系统。
M/G/1/∞表示输入过程为泊松流,服务时间服从一般概率分布,系统中只有一个服务台,容量为无限的排队系统。
GI/M/1/∞表示顾客到达的时间间隔服从一般概率分布,服务时间服从指数分布,系统中有一个服务台,且容量为无限的排队系统。
EK/G/1/K表示顾客的到达时间间隔服从K阶Erlang分布,服务时间服从一般概率分布,系统中有一个服务台,且容量为K的排队系统。
D/M/S/K表示顾客的到达时间间隔是确定的,服务时间服从指数分布,系统中有S个并行服务台,容量为K的排队系统。

1.3 常见的排队分布

分布类型 描述 概率密度函数 (PDF) 期望 (E) 方差 (Var)
泊松分布 (Poisson) 单位时间内事件到达的数量 \(f(k;λ) =\frac{ λ^k*e^{-λ}}{k!}\) E(X) = λ Var(X) = λ
指数分布 (Exponential) 两个事件到达之间的时间间隔 \(f(x;λ) = λe^{-λx}, x ≥ 0\) E(X) = 1/λ Var(X) = 1/λ²
正态分布 (Normal) 服务时间或其他连续变量 \(f(x; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}\) E(X) = μ Var(X) = σ²
伽玛分布 (Gamma) 累积服务时间 \(f(x; k, \theta) = \frac{x^{k-1} e^{-x/\theta}}{\theta^k \Gamma(k)}, \quad x > 0\) E(X) = kθ Var(X) = kθ²
Erlang分布 (Erlang) 多阶段服务系统 \(f(x; k, \lambda) = \frac{\lambda^k x^{k-1}e^{-\lambda x}}{(k-1)!} \quad \text{for } x > 0\) E(X) = k/λ Var(X) = k/λ²
一般分布 (General, G) 非特定分布类型 - E(X) = μ Var(X) = σ²
泊松分布 (Poisson) 指数分布 (Exponential) 伽玛分布 (Gamma)

1.4 排队分布的参数估计

根据统计学参数估计知识,可以跟踪在服务系统的到达时刻和接受服务的时间长度,估计出排队论常用的两个参数\(\lambda,\mu\)

  • 顾客到达间隔时间(根据\(\lambda = 0.5\)模拟,样本量为20):

\[0.94, 6.02, 2.63, 1.83, 0.34, 0.34, 0.12, 4.02, 1.84, 2.46, 0.04, 7.01, 3.57, 0.48, 0.40, 0.41, 0.73, 1.49, 1.13, 0.69 \]

  • 顾客服务时间(根据\(\mu = 0.7\)模拟,样本量为20):

\[1.35, 0.21, 0.49, 0.65, 0.87, 2.20, 0.32, 1.03, 1.28, 0.07, 1.34, 0.27, 0.10, 4.25, 4.82, 2.36, 0.52, 0.15, 1.65, 0.83 \]

  • 到达率\(\lambda\)的估计。根据顾客到达间隔时间的均值\(\bar{X}\)\(\lambda\)的估计值为:

\[\hat{\lambda} = \frac{1}{\bar{X}} = \frac{1}{\text{mean}(\text{arrival\_times})} = 0.548 \]

  • 服务率\(\mu\)的估计。根据顾客服务时间的均值\(\bar{Y}\)\(\mu\)的估计值为:

\[\hat{\mu} = \frac{1}{\bar{Y}} = \frac{1}{\text{mean}(\text{service\_times})} = 0.808 \]

  • 结果。估计到达率\(\lambda\)为:0.548;估计服务率\(\mu\)为:0.808,这些估计值基于我们模拟的指数分布数据,接近真实的\(\lambda = 0.5\)\(\mu = 0.7\)

二、排队系统绩效指标

系统空闲概率 \(P_0\)

  • 定义:系统中没有顾客的概率,即所有服务台都空闲。
  • 计算:对于 M/M/1 和 M/M/c 系统,\(P_0\) 是基础指标,表明系统在无负载状态下的可能性。

系统中有 \(n\) 个顾客的概率 \(P_n\)

  • 定义:系统中恰好有 \(n\) 个顾客的概率,反映系统在不同状态下的可能性。它是分析系统排队长度分布的重要指标。

平均队列长度 \(L_q\)

  • 定义:排队系统中平均排队的顾客数,不包括正在接受服务的顾客。
  • 计算:对于 M/M/1 和 M/M/c 系统,队列长度取决于顾客到达率、服务率及服务台数量。

顾客在系统逗留时间 \(L_s\)

  • 定义:系统中包括排队和正在接受服务的顾客的平均数量。
  • 公式
    • 对于 M/M/1 系统,\(L_s = \frac{\lambda}{\mu - \lambda}\)
    • 对于 M/M/c 系统,公式更加复杂,但反映顾客到达和服务之间的平衡。

顾客的平均等待时间 \(W_q\)

  • 定义:顾客在系统中排队的平均等待时间,不包括服务时间。
  • 计算:对于 M/M/1 系统,\(W_q = \frac{L_q}{\lambda}\);对于 M/M/c 系统,考虑了多个服务台及系统负载情况。

顾客的平均系统时间 \(W_s\)

  • 定义:顾客在系统中的总时间,包括等待时间和服务时间。
  • 计算:对于 M/M/1 系统,\(W_s = \frac{1}{\mu - \lambda}\);对于 M/M/c 系统,\(W = W_q + \frac{1}{\mu}\)。该指标反映顾客从到达系统到离开的总时间。
    通过这些指标,可以有效评估排队系统的服务效率、顾客的等待情况以及系统的稳定性。
排队系统指标 M/M/1 M/M/c
到达过程 顾客到达服从泊松分布,平均到达率为 \(\lambda\) 顾客到达服从泊松分布,平均到达率为 \(\lambda\)
服务过程 服务时间服从指数分布,服务率为 \(\mu\) 服务时间服从指数分布,服务率为 \(\mu\)
服务台数量 1个服务台 \(c\) 个服务台
系统空闲概率 \(P_0 = 1 - \rho\),其中 \(\rho = \frac{\lambda}{\mu}\) \(P_0 = \left[ \sum_{n=0}^{c-1} \frac{(\lambda/\mu)^n}{n!} + \frac{(\lambda/\mu)^c}{c! (1 - \rho)} \right]^{-1}\),其中 \(\rho = \frac{\lambda}{c\mu}\)
系统中有 \(n\) 个顾客的概率 \(P_n = (1 - \rho) \rho^n\) 对于 \(n < c\),有 \(P_n = \frac{(\lambda/\mu)^n}{n!} P_0\);对于 \(n \geq c\),有 \(P_n = \frac{(\lambda/\mu)^n}{c^c (c!) (1-\rho)} P_0\)
平均队列长度 \(L_q = \frac{\rho^2}{1 - \rho}\) \(L_q = P_0 \frac{(\lambda/\mu)^c \rho}{c! (1 - \rho)^2}\)
系统中的平均顾客数 \(L_s = \frac{\rho}{1 - \rho}\) \(L = L_q + \frac{\lambda}{\mu}\)
顾客的平均等待时间 \(W_q = \frac{\rho}{\mu (1 - \rho)}\) \(W_q = \frac{L_q}{\lambda}\)
顾客在系统逗留时间 \(W_s = \frac{1}{\mu - \lambda}\) \(W = W_q + \frac{1}{\mu}\)

三、排队系统性能指标的Python计算

import numpy as np# 参数设置
lambda_rate = 5  # 平均到达率
mu_rate = 7      # 服务率
c = 3            # 服务台数量# M/M/1 系统计算
rho = lambda_rate / mu_rate
P0_mm1 = 1 - rho
Pn_mm1 = [(1 - rho) * (rho ** i) for i in range(10)]  # 计算前10个概率
Lq_mm1 = (rho ** 2) / (1 - rho)
Ls_mm1 = rho / (1 - rho)
Wq_mm1 = (rho / (mu_rate * (1 - rho)))
Ws_mm1 = 1 / (mu_rate - lambda_rate)# M/M/c 系统计算
factorial = np.math.factorial
P0_mmc = 1 / (1 + sum((lambda_rate / mu_rate) ** i / factorial(i) for i in range(c)) + (lambda_rate / mu_rate) ** c / (factorial(c) * (1 - rho)))
Pn_mmc = [P0_mmc * (lambda_rate / mu_rate) ** i / factorial(i) if i < c else P0_mmc * (lambda_rate / mu_rate) ** i / (c ** c * factorial(c) * (1 - rho)) for i in range(10)]
Lq_mmc = P0_mmc * ((lambda_rate / mu_rate) ** c * rho) / (factorial(c) * (1 - rho) ** 2)
L_mmc = Lq_mmc + lambda_rate / mu_rate
Wq_mmc = Lq_mmc / lambda_rate
W_mmc = Wq_mmc + 1 / mu_rate# 输出表格
print("排队系统指标 | M/M/1 | M/M/c")
print("| --- | --- | --- |")
print("到达过程 | 顾客到达服从泊松分布,平均到达率为 {:.2f} | 顾客到达服从泊松分布,平均到达率为 {:.2f} |".format(lambda_rate, lambda_rate))
print("服务过程 | 服务时间服从指数分布,服务率为 {:.2f} | 服务时间服从指数分布,服务率为 {:.2f} |".format(mu_rate, mu_rate))
print("服务台数量 | 1个服务台 | {} 个服务台 |".format(c))
print("系统空闲概率 | {:.2f} = 1 - {:.2f} | {:.2f} |".format(P0_mm1, rho, P0_mmc))
print("系统中有 n 个顾客的概率 | {} | {} 到 {} |".format(Pn_mm1[:3], Pn_mmc[:3], Pn_mmc[-3:]))  # 展示部分概率
print("平均队列长度 | {:.2f} | {:.2f} |".format(Lq_mm1, Lq_mmc))
print("系统中的平均顾客数 | {:.2f} | {:.2f} |".format(Ls_mm1, L_mmc))
print("顾客的平均等待时间 | {:.2f} | {:.2f} |".format(Wq_mm1, Wq_mmc))
print("顾客在系统逗留时间 | {:.2f} | {:.2f} |".format(Ws_mm1, W_mmc))
排队系统指标 M/M/1 M/M/c
到达过程 顾客到达服从泊松分布,平均到达率为 5.00 顾客到达服从泊松分布,平均到达率为 5.00
服务过程 服务时间服从指数分布,服务率为 7.00 服务时间服从指数分布,服务率为 7.00
服务台数量 1个服务台 3 个服务台
系统空闲概率 0.29 = 1 - 0.71 0.31
系统中有 n 个顾客的概率 [0.29, 0.20, 0.15] [0.31, 0.22, 0.08] 到 [0.00064, 0.00046, 0.00033]
平均队列长度 1.79 0.17
系统中的平均顾客数 2.50 0.88
顾客的平均等待时间 0.36 0.03
顾客在系统逗留时间 0.50 0.18

总结

参考资料

  1. 算法设计分析(Kruskal构造最小生成树)
  2. 最小生成树(最小支撑树)算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798160.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地文件包含漏洞详解与CTF实战

1. 本地文件包含简介 1.1 本地文件包含定义 本地文件包含是一种Web应用程序漏洞,攻击者通过操控文件路径参数,使得服务器端包含了非预期的文件,从而可能导致敏感信息泄露。 常见的攻击方式包括:包含配置文件、日志文件等敏感信息文件,导致信息泄露。 包含某些可执行文件或…

代码随想录算法 - 二叉树6

题目1235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖…

6、函数的声明

程序是一行行执行,我们可以在前面进行函数声明,然后将函数的定义放在程序末尾。 声明可以写多次,但是定义只能写一次。

如何基于Java解析国密数字证书

一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,一、说明 随着信息安全的重要性日益凸显,数字证书在各种安全通信场景中扮演着至关重要的角色。国密算法,作为我国自主研发的加密算法标准,其应用也愈发广泛。然而,在…

Windows应急响应-个人整理

个人总览-仍待完善Windows应急响应整理(一)参考 1.NOPTeam的手册链接 2.fox-yu的博客(思路很清晰,对我这个小白来说很友好)1.整体思路 1.1常见事件类型(不完整、待补充)网络协议攻击:拒绝服务攻击:DDos、CC攻击、泛洪攻击等。链接 DNS劫持 ARP欺骗web入侵:webshell 网页挂马…

视野修炼-技术周刊第101期 | 垂直居中

① align-content - 垂直居中普通元素 ② up mode - 一键隐藏 Chrome 插件 ③ Chrome 性能面板新功能 ④ k-colors.js - 图片主色提取 ⑤ 英:优化JS性能的一些技巧 ⑥ 英:Web 的剪贴板,如何存储不同类型的数据 ⑦ 英:不简单的 js 入门教程 ⑧ Peter Cat - GitHub 仓库智能答…

06: 抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类1. 案例 在Access和SQL server分别插入User表和Department表 2. 抽象工厂模式结构 - 抽象产品(AbstractProduct):所有产品的基类,提供产品类的公共方法struct User {std::string m_sName = "";…

南沙C++信奥老师解一本通题 1371:看病

​【题目描述】有个朋友在医院工作,想请BSNY帮忙做个登记系统。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情…

堪称最优秀的 Docker 可视化管理工具 ——Portainer

Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理 Docker 环境,包括单机环境和集群环境。随着 Docker 内实例越来越多,就得涉及到监控以及统计的需求:有多少个容器?运行的有几个?有哪些容器 CPU 使用率低?... Portainer 是一款轻量级的应用,它提供了图…

分布式数据库中间件:MyCat 和 ShardingSphere

分布式数据库中间件 用于实现 分库、分表、分片、分布式事务、读写分离 等。 本文 是 调查 MyCat 和 ShardingSphere 两款 中间件 的一些信息汇总。本文时间:2024年9月。MyCat Mycat数据库分库分表中间件。ben发布于博客园 http://www.mycat.org.cn github-Mycat1 https://gi…

Python 遭遇 ProxyError 问题记录

本内容复制知乎的一个贴子,在此只做下记录及参考和学习,原链接地址: 最近遇到的一个问题,在搞清楚之后才发现这么多年的 HTTPS_PROXY 都配置错了! 起因 想用 Python 在网上下载一些图片素材,结果 requests 报 requests.exceptions.ProxyError,具体的错误信息见下面。当然…

白云龙期货投资-第二讲

K线图基本用途就是为了寻找“买卖点”,所有的进场点有K线配合能大大的提高进场的成功率。关键点位出现K线及组合配合。大胆进场(波浪理论第五浪。回调黄金分割率点,趋势线,颈线,整数关口等)。K线技术-一切技术之根本 K线图基本用途就是为了寻找“买卖点”,所有的进场点有K…