运筹说 第116期 | 算法介绍之排队论

在这个快节奏的时代,无论是线上购物、线下服务,还是工业生产,我们都不可避免地与“排队”打交道。今天小编将带你一起探索利用PythonMATLAB这两种编程工具,来求解排队论中的常见模型和排队优化问题。我们将从排队论的基础模型开始,深入了解等待制排队模型混合制模型以及有限源排队模型,接着对排队问题的优化问题进行探讨,最后用算法模拟现实生活中的车辆排队现象。由于篇幅有限,小编接下来只展示部分代码,小伙伴们可以关注“运筹说”公众号→后台回复“算法介绍之排队论”获取完整代码。话不多说,我们一起来看看吧!

本次算法介绍将聚焦于四种常见的排队模型:M/M/s等待制排队模型,它包括单服务台和多服务台两种情形;M/M/s混合制排队模型,进一步考虑了有限系统空间和顾客流失,包括单服务台的M/M/1/K和多服务台的M/M/S/K模型;以及有限源排队模型,它适用于顾客数量有限且可能重复服务的情况。

01 M/M/s等待制排队模型

⭐ 单服务台模型

(1)问题描述

单服务台等待模型M/M/1/是指:顾客的相继到达时间服从参数为λ的负指数分布。服务台的个数为1,服务时间V服从参数为μ的负指数分布,系统空间无限,允许无限排队,这是一类简单的排队系统。

(2)例题介绍

例1 某修理店只有一个修理工,要求提供服务的顾客到达过程为泊松流,平均4人/小时;修理时间服从负指数分布,平均需要6分钟。试求:修理店空闲的概率;店内恰有3个顾客的概率;店内至少有1个顾客的概率;在店内的平均顾客数;每位顾客在店内的平均逗留时间;等待服务的平均顾客数;每位顾客平均等待服务时间;顾客在店内等待时间超过10分钟的概率。
(3)平台实现

我们以上述例题为例,借助MATLAB和Python介绍实现求解例1的相关代码。

①MATLAB代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。代码思路与排队理论中的M/M/1模型数学计算公式相同。

代码运行及最终结果展示如下。经过代码运行得出修理店空闲的概率为0.6;恰有3个顾客的概率为0.0384;店内至少有1个顾客的概率为0.4;平均顾客数为0.667;平均逗留时间为10分钟;等待服务的平均顾客数为0.267;平均等待服务时间为4分钟;逗留时间超过10分钟的概率为0.368。

②Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

求解思路与求解结果同上。

⭐ 多服务台模型

(1)问题描述

设顾客单个到达,相继到达时间间隔服从参数为λ的负指数分布,系统中共有s个服务台,每个服务台的服务时间相互独立,且服从参数为μ的负指数分布。当顾客到达时,若有空闲的服务台则可以马上接受服务,否则便排成一个队列等待,等待空间为无限。这就是多服务台模型M/M/S/

(2)例题介绍

例2 某售票处有3个窗口,顾客的到达为泊松流,平均到达率为λ=0.9人/分钟;服务(售票)时间服从负指数分布,平均服务率μ=0.4人/分钟。现设顾客到达后排成一个队列,依次向空闲的窗口购票,试求整个售票处空闲的概率P0;平均队长Ls、平均排队长Lq、平均逗留时间Ws、平均等待时间Wq;顾客到达时必须排队等待的概率。

(3)平台实现

我们以上述例题为例,借助MATLAB和Python介绍实现求解例2的相关代码。

①MATLAB代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

代码运行及最终结果展示如下,经过代码运行得出空闲的概率为0.075均排队长为1.703;平均队长为3.953;平均等待时间为1.893;平均逗留时间为4.393;排队等待的概率为0.568。

②Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

求解思路与求解结果同上。

02 M/M/s混合制排队模型

⭐ 单服务台M/M/1/K混合制模型

(1)问题描述

单服务台混合制模型M/M/1/K是指:顾客的相继到达时间服从参数为λ的负指数分布(即顾客的到达过程为Poisson流),服务台个数为1,服务时间V服从参数为μ的负指数分布,系统的空间为K

(2)例题介绍

例3 某修理站只有一个修理工,且站内最多只能停放4台待修的机器。设待修机器按Poisson流到达修理站,平均每分钟到达1台;修理时间服从负指数分布,平均每1.25分钟可修理1台,该题是一个典型的但服务台混合制模型,试求该系统的有关指标。

(3)平台实现

我们以上述例题为例,借助MATLAB和Python介绍实现求解例3的相关代码。

①MATLAB代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

代码运行及最终结果展示如下,经过代码运行得出空闲的概率为0.122;顾客损失率为0.297;有效到达率为0.703;平均队长为2.437;平均排队长为1.558;平均逗留时间为3.4689;平均等待时间为2.219。

②Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

求解思路与求解结果同上。

⭐ 多服务台M/M/S/K混合制模型

(1)问题描述

多服务台混合制模型M/M/S/K是指:顾客的相继到达时间服从参数为λ的负指数分布,服务台个数为s(当s=1时为单服务台混合制模型),服务时间V服从参数为μ的负指数分布,系统的空间为K
(2)例题介绍

例4 某汽车加油站设有两个加油机,汽车按泊松流到达,平均每分钟到达2辆;汽车加油时间服从负指数分布,平均加油时间为2分钟。又知加油站最多只能停放3辆等待的汽车,汽车到达时,若已满员,则必须开到别的加油站取,该题是一个典型的多服务台混合制模型,试对该系统进行分析。

(3)平台实现

我们以上述例题为例,借助MATLAB和Python介绍实现求解例4的相关代码。

①MATLAB代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

代码运行及最终结果展示如下,经过代码运行得出空闲的概率为0.008;顾客损失率为0.529;平均排队长为2.248;平均队长为4.132;平均逗留时间为4.386;平均等待时间为2.386;占用加油机的平均数为1.884。

②Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

求解思路与求解结果同上。

03 有限源排队模型

(1)问题描述

有限源排队模型的主要特征是顾客总数是有限的,如果有m个顾客。每个顾客来到系统中接受服务后易回到原来的总体,还有可能再来。关于顾客的平均到达率,在有限源的情形下,按每一顾客来考虑。设每个顾客的到达率都是相同的,均为λ (这里 的含义是指单位时间内该顾客来到系统请求服务的次数),且每一顾客在系统外的时间均服从参数为μ的负指数分布。

(2)例题介绍

例5 设有一工人看管5台机器,每台机器正常运转的时间服从负指数分布,平均为15分钟。当发生故障后,每次修理时间服从负指数分布,平均为12分钟,试求该系统的有关运行指标。

(3)平台实现

我们以上述例题为例,借助MATLAB和Python介绍实现求解例5的相关代码。

①MATLAB代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

该题目需要计算一个具有5个相同机器和一个修理工的系统的可靠性参数。首先定义参数包括故障率、修理率、机器总数和修理工人数。通过计算系统的空闲概率、故障机器平均数、等待修理机器平均数、故障的平均停工时间、每台机器的平均待修时间以及系统绝对通过能力等关键指标,来评估系统的性能和效率。

代码运行及最终结果展示如下,经过代码运行得出空闲的概率为0.0073;5台机器都出故障的概率为0.2870;出故障机器平均数为3.7591;等待修理机器平均数为2.7664;一次故障的平均停工时间为45.4412;每台机器平均待修时间为33.4412;系统绝对通过能力为0.08273。

②Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码。

求解思路与求解结果同上。

二、排队系统模型的优化

排队系统的优化问题分为两类:系统的最优设计和最优控制,前者称为静态最优问题,目的在于使系统达到最大效益,或者说在一定指标下使系统最为经济;后者称为动态最优问题,是指对一给定的系统,如何运营可使给定的目标函数达到最优。由于对后一类问题的阐述需要较多的数学知识,所以小编带领大家着重了解静态最优问题中的确定最优服务率μ*确定最佳服务台数量s*的问题。

01 最优服务率μ

(1)例题介绍

例6 对某M/M/1/3系统的服务台进行实测,得到如下数据:

系统中得顾客数( ): 0 1 2 3

记录到的次数( ):161 97 53 34

平均服务时间为10 min,服务一个顾客的收益为2元,服务机构运行单位时间成本为1元,问服务率为多少时可使单位时间平均总收益最大?

(2)平台实现

我们以上述例题为例,借助MATLAB和Python介绍实现求解例6的相关代码。

①MATLAB代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。基于系统中得顾客数( )和记录到的次数( ),首先需要估计系统的利用率和平均到达率,然后建立优化模型来求解最大化单位时间平均总收益的最优服务率。通过求解该模型,得到最优服务率,并计算使用此服务率时系统的总收益。

代码运行及最终结果展示如下,系统利用率为0.60,平均到达率为3.6 (人/h),最优服务率3 (人/h),当服务率为6人/h时,单位时间平均总收益为0.459元,当服务率为3人/h时,单位时间平均总收益为1.87元,单位时间内平均收益可增加1.414元。

结果显示,与初始假设的服务率相比,使用最优服务率可以显著提高单位时间内的平均总收益。

②Python代码展示
我们以上述例题为例,借助Python介绍实现求解的相关代码。

求解思路与求解结果同上。

02 最优的服务台数s

(1)例题介绍

例7 某检验中心为各个工厂服务,要求作检验的工厂(顾客)的到来为泊松流,平均到达率为λ=48次/天,每次检验时,因停工损失6元,服务时间服从负指数分布,平均服务率为μ=25次/天。每设置一个检验员的服务成本4元/天,其他条件与M/M/s/排队系统相同。问:应设多少检验员,使得检验总费用的平均值最少?

(2)平台实现

我们以上述例题为例,借助MATLAB和Python介绍实现求解例7的相关代码。

①MATLAB代码展示

我们以上述例题为例,借助MATLAB介绍实现求解的相关代码。

为了最小化检验的总费用,我们需要确定检验员的最优数量,总费用包括检验员的服务成本和因停工导致的损失成本。通过定义一个函数来计算在给定检验员数量s时,系统的空闲概率、系统中平均顾客数和总成本,接着遍历可能的检验员数量找到使总成本最小的检验员数量,最终得到最优的检验员数量和对应的总成本。

代码运行及最终结果展示如下,经过代码运行得出当检验员数量为3时,检验总费用的平均值最少,为27.8673元。

②Python代码展示

我们以上述例题为例,借助Python介绍实现求解的相关代码

求解思路与求解结果同上。

三、排队论现实应用场景

排队论在现实生活中的应用非常广泛,它通过数学模型来分析和优化服务流程,提高效率。例如,在银行和金融机构中,排队系统帮助管理顾客等待时间,减少拥堵;在医疗系统中,它用于优化病人的就诊流程,确保紧急情况得到快速响应;交通系统中,排队论用于设计更合理的交通信号灯控制策略,减少车辆排队和拥堵;在电信领域,它帮助设计电话网络,确保通话质量并减少掉线率。

车辆通过路口的情况可以类比为M/M/1 排队模型。下面的示例模拟了车辆通过路口的情境,即基于负指数分布到达和负指数分布服务时间的排队系统。通过模拟,我们可以了解在不同车辆到达速率(由λ表示)和服务速率(由μ表示)下,系统的表现如何,包括队列中车辆的平均等待时间和队列长度的变化,代码如下。

λ <= μ时,则ρ <= 1,队伍的长度L会逐渐增长并收敛至L = λ / (μ - λ),平均等待时间会收敛至Wq = 1 / (μ -λ)。反之若λ > μρ > 1,此时系统过载,LWq会随着到达的顾客数的增加而增加,不会收敛。

接着画图展示出排队的过程,代码如下。

上图显示了车辆在队列中等待的平均时间(以秒为单位)如何随着到达路口的车辆总数变化。随着车辆数目的增加,车辆在队列中等待时间的变化趋势。

上图展示了队列中车辆数(以当量交通量PCU为单位)如何随着到达路口的车辆总数变化。反映了在不同时间点,队列中车辆的累积数量,进而反映了交通流量对排队长度的影响,以及系统处理交通流量的能力。

当到达率(λ)和服务率(μ)已知时,可以根据理论公式计算系统的稳态队列长度L = 105.5250,和平均等待时间Wq = 15.7500。模拟结果如下所示,与理论计算相符。

作者 | 王连聚 齐涵

责编 | 王一静

审核 | 徐小峰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值