用循环队列模拟银行窗口排队_OM | 浅谈排队论

42f79042384cc7c876cd519cd0466486.png

作者:Iwannabanana

作者:Iwannabanana,多伦多大学工业工程与运筹学硕士,主要从事运筹学,随机过程,优化算法相关研究,现任某500强工程师。

编者按

队列是生活中很常见的现象: 超市出口处排队结算,银行等待窗口办理业务,生产流水线上由于节拍不均衡而产生流水线滞留等待。排队的出现往往并不有益: 医院急诊室由于医生繁忙导致患者无法及时得到诊疗,银行窗口等待时间过长导致顾客流失,机场未合理调度起飞跑道,导致航班误点…...

排队论是一套数学理论与模型。通过不同的模型衍生,该理论力图模拟各种常见的队列等待模型。该理论常见的有趣结论:平均等待时间,平均队列顾客数量,银行/医院开设新服务窗口的经济有效性等等。此外如何有效运用基于大数据的科学管理办法运作企业,俨然已成为工业4.0与物联网的先决条件。

目录:

1. 排队论背景与发展介绍

2.排队机制与基本模型办法

3.常见模型 M/M/1 及 M/M/S

4. 案例分析

01 排队论背景与发展介绍

排队论最早起源于对电话通讯排队接线的研究,早在1909年,丹麦数学家A. K. Erlang 发表了The Theory of Probabilities and Telephone Conversations 初步产开了对由于随机需求的出现而产生非稳态队列的现象的研究。在他后期的工作中,他发现了几个重要结论: 自动电话通讯系统可以以两种基本概率模型模拟: 1. 泊松输入,指数分布服务时间,多服务流 2. 泊松输入, 稳定常态服务时间,单服务流。Erlang亦提出队列稳态平衡的概念与排队系统的初步优化办法。Erlang 之后,多名学者将其工作做进一步的衍生拓展:Thornton Fry: Probabilities and Its Engineering Uses, Felix Pollaczek 进一步整理了泊松输入,广义输出的单/多服务流模型,同时俄罗斯数学家Kolmogorov, Khintchine也涉足该领域。排队论本源自对实际现象的研究,而后接近半个世纪,排队论主要为理论模型发展,(生灭理论,嵌入马尔可夫模型) 。直到二战以后,学者开始为该理论赋予应用价值,大量研究开始导向如何精确求解先前学者留下的复杂数学模型,并直接应用于现实的管理决策中。主要如复杂排队模型,排队网络的近似解与数值模拟办法等。近现代排队论主要为管理决策软件的开发提供理论与模拟支持。

02 排队机制与基本模型办法

2.1 基本排队机制

在绝大多数情况下,以下6个基础属性可以较完善地描述一个排队等待现象。(1)顾客的抵达分布情况 (2) 服务台的服务情况 (3) 排队原则 (4) 系统容纳量 (5) 服务台数量 (6) 服务流程数量。这里笔者想对以上一些名词做一些注释,以便理解。顾客的抵达分布情况: 这里的顾客可以指实体的顾客,如银行排队等待的客人,亦可代指等待安排维修的机器,抵达分布情况是指如何用概率模型模拟相邻顾客抵达服务台的时间间隔 。服务台的服务情况:银行窗口服务不同业务的时间分布,生产线中每道工序所用时间的时间分布等。至于排队原则,系统容纳量,服务台/服务流程数量都很好理解….

2.1.1 顾客的抵达分布情况

在大部分队列中,顾客的抵达都是随机现象(非随机现象如完美平衡的生产流水线)。因此需要用一个概率模型模拟各个相邻顾客的抵达时间间隔。常见模型如指数分布。关于为何指数分布与泊松过程能较好地模拟随机现象,参见本节2.3。同时一些特殊的客户表现亦需要参考,比如:如果一个客户遇到较长队列,他可能会拒绝加入(balked);现有队列的客户由于排队时间过长而离开(impatience, reneged). 当出现多条服务流时,顾客会在不同队列之间流动,导致从理论上讲的绝对完美等长多服务流(jockey)。最后,如果顾客抵达时间的概率分布不随时间而变化,称之为稳态抵达分布(stationary), 反之非稳态(non-stationary)。

2.1.2服务台的服务情况

亦称之为服务机构。不同服务台的服务时间亦需要用一个概率模型来表示。比如医院急诊室每个医生诊疗时间的时间分布,维修车间对每台等待维修的机器的处理时间分布等。以下几个特殊现象亦需特殊考虑: 服务时间的长短与队列的长短有关,这个很好理解,当一个柜员看到顾客较多时,自然会加快业务处理速度 (state-dependent). 同样,服务时间亦可随时间变化而变化(维修工逐渐积累经验),出现stationary 和 non-stationary。

2.1.3 排队原则

最常见的为先到先服务, first come first service ( FCFS). 也会有后到先服务原则(LCFS). 比如从仓库里取货,后到的货物由于堆在最外围,往往先被取走。随机服务原则,比如车牌号摇号,不随从任何先来后到的原则….. 优先排队原则: 如果军人抵达的话,可以直接排到队列首位(priority discipline)。

2.1.4 系统容纳量,服务台数量,服务流程数量

这三兄弟相对好理解, 系统容纳量: 火车站排队大厅最多容纳一千人队列,服务台数量: 某银行总行有12个窗口,而郊区支行只有4个,服务流程数(会形成复杂排队网络): 体检项目顺序依次一个有10项,某产线共有24道工序,为消除排队需要平衡产线。

8d5d40291c710e48fcac0947b9fcf5d9.png
图1. 某多服务台,多服务流程队列网络

2.2 常见术语与Notation

对于常见的大部分模型,我们均假设顾客抵达时间的分布,服务台服务时间的分布为独立同分布(independent and identically distributed), 通用队列模型表达式如下:

8e74681dba9106c434370c31bf978a7d.png

对于常见的大部分模型,我们均假设顾客抵达时间的分布,服务台服务时间的分布为独立同分布(independent and identically distributed), 通用队列模型表达式如下:

fe5eb841eec0504a5951c9d11f230cc0.png
表1:通用队列模型表达式符号汇总

值得注意的是,我们会常常省去后两个位置,默认为系统无容纳上限,先到先服务原则。如非常经典又基础的 M/M/1 及 M/M/S 模型 (顾客抵达与服务时间均为指数分布,一个或多个服务台).

3146ce381d6215763ea0da75ae69c373.png

b30ccf0738c22c1de9e922dbcb3789e3.png

Utilization Factor(暂译为占用率),是一个排队系统顾客抵达速率与总共多个平行服务速率的比值。很好理解,这个值如果大于1的话,队列会无限变长,而这个值小于1的话,队列系统会从一开始的过渡状态 (transient condition) 逐渐趋于稳态 (steady-state condition) 关于这个状态的过渡与转换的讨论,不在本文章讨论之中,笔者在此呈现的各种有趣结论,均以稳态队列为对象:

98f1bebd179095ca61abcd50997221a6.png

cc384cbc8a61435f5d863fe9339ffd47.png

2.3 关于泊松输入源的一些讨论

本节我们讨论一个问题: 为什么泊松过程/指数分布能成为基础的模拟顾客的随机到达与服务的完成时间分布?

2.3.1 指数分布

5313704630550284860a0d1d724be8bb.png

并且:

7c1de252d73ee1b6ae59cdcfe1247315.png

下面我们讨论指数分布的性质与其在基础排队模型中的作用。

2.3.2

d51cc0703eda833e24743a5509dd4a53.png

2.3.3 无记忆性

41207ceff4d48975bcee8eced68d9f92.png

2.3.4 几个独立的指数分布变量的最小者亦为指数分布

f91e426285a065e49f46229e451ef631.png

9add3c3624acb05a1815d44682be9099.png

2.3.5泊松过程与指数分布

20e5fdb6176e9d19f1236f7f8c21266c.png

2.3.6 不受聚合/离散的影响

d6c8448ae7b0e5364810299f460a401f.png

03 常见模型 M/M/1 及 M/M/S

3.1 为什么选择这两个模型

很简单,这两个模型假设顾客抵达与服务时间为指数分布,时间流程为泊松过程,任何复杂队列模型都是由他们衍生出来的…….由于篇幅受限,本文往后都会集中在这两个基础模型上。关于更多衍生参考模型,请参阅文末reference list.

3.2 生灭过程

The Birth-and-Death Process. 为了得出M/M/1 及 M/M/S的一般公式,笔者认为有必要简单推导下….. 该模型为连续时间马尔可夫过程(continuous time Markov chain),要介绍全很困难,这里就给一个简易推导。

6c3ad16bd631f58e6bf604ad944698ea.png

取决于两个时间的长短。

另,上述过程可有下图来表示.

da78c29d3fcaa4e521b1afaf72c69583.png

在稳态队列的情况下: 任何系统状态的进出速率应该相当。举一个例子,系统在状态0的情况下: 从状态0转移到状态1(没有顾客到一个顾客)时,离开与进入相等:

517e9825cbf7e21e43809151c9b0e2c8.png

通过迭代法计算(步骤省去,直接给结论):

7889fb87f1a93d6cba28ee63ed0e09b0.png

1faea0a36fa5916ed5e155118693ccdc.png

73a55a824b915e1e5b3f8b4e5aa4ad4c.png

以上为生灭原理下队列模型的通用结论。

3.3 M/M/1 模型与 M/M/S 模型

e4633dc8d212b15c6aa051594064ac11.png

f7baf49d45396e3c098c204b3b96d635.png

aa1d19f27e42ae0584c5fb4c24427b1f.png

70fea45c62af8eaf4c3fd9ce7c3928eb.png

3.3.2 M/M/S 模型

066971f5ade708ae180e9e6ba8553e97.png

3b058c5aff512c36b393d8754d8b829f.png

aa0844b126481f4fa75988953cd9ee06.png

26261f64eadfd7f3c1400b5b7ff89264.png

04 案例分析

这里我们给出一个小case study:

已知某生产线在执行某项特殊高危高精度工艺时,有10台机器共同运作。由于人员配置紧张,该产线只安排的8名工人同时操作8台机器,另外两台设备随时standby为替补更改工装/加工设备,工厂这样安排的目的是为了保持满负荷运作。目前该工厂只安排了1名工人更改工装与加工设备。

已知该工艺流设备平均每20天需要下线更改工装,而更改工装工人平均需2天的时间完成设备的重新设置。由于队列等待现象,产线经常出现不满8台生产的情况。目前管理层正在考率是否要再雇佣一名工人执行机器下线操作。已知每个线下工人公司给的酬薪大约是每天280RMB,而每天由于产线未满负荷运作而产生的利润损失为每台额外下线机器400RMB。你作为工业工程师被指派study这个问题,请问你会对管理层作出怎样的决策推荐以求公司利润最大化?

首先我们用数学语言翻译下上述条件:

a0857003248bd661b76cf7d713aceb8e.png

0afd8f851ff95bd929381c0090e93295.png

6097a0dcbc4cc67f404d334b2ae7ad50.png

fee16de140dcd2824139e911c382bc7b.png

所以我们可以计算出下表:

c2be44ddafefeae6854fd3d9c6318d23.png

ec2148036886e23f060aea4cbdd19961.png

所以,通过排队论模型分析,尽管公司添加工人的话产线能够保持最大化利用,但是此时的运营成本大于只雇佣一名工人的情况,我们向管理层推荐的决策为不要雇佣第二个工人。

05 插一句话

1d2bfbbf473336b3ca2c8fac19e8dee7.png

5.1 文章总结

本文初步介绍了排队论的理论发展历史背景。并简单回顾了泊松过程与指数分布在广义一般化排队模型中的应用必要性。又详细地基于连续时间状态马尔可夫过程归纳出了M/M/1与M/M/S模型几个基本结论并配以一个工业界地实际应用案例分析。读者应该可以大致初步掌握排队论的应用范围与方法。其他衍生模型,如非指数分布,混线,排队网络,队列数量限制等,篇幅受限,不再赘述,感兴趣地读者可以翻阅文末的参考资料。

参考文献:

1.J.D.C. Little, “A Proof for the Queueing Formula: L=W”, Operations Research, 9(3):383-387, 1961.

2.“Introduction to Operation Research”, 7th edition, Hillier & Lieberman, McGraw-Hill.

3.“Elements of Queueing Theory, Palm Martingale Calculus and Stochastic Recurrences”, 2nd edition, Francois Baccelli, Pierre Bremaud, Springer.

4.“Fundamentals of Queueing Theory”, 4th edition, Donald Gross, John F. Shortle, James M. Thompson, Carl M. Harris, Wiley.

5.“Introduction to Probability Models”, 11th edition, Sheldon M. Ross.

6.“Stochastic Modelling and Optimization”, University of Toronto, Viliam Makis.

7.“Probability and Statistics for Engineers and Scientists”, 9th edition, Ronald E. Walpole, Raymond H. Myers, Sharon L. Myers, Keying Ye.

假设某银行有n个窗口对外接待客户,从早晨银行9点开门起到5点关门,不断有客户进入银行,由于每个窗口在某个时刻只能接待一个客户。因此在客户人数众多时需要在每个窗口前顺次排队,对于刚进银行的客户。如果某个窗口的业务员正空闲,则可上前输业务。反之,若个窗口均有客户所占,他便会排在为数最少的队伍后面。编制一个程序模拟银行的这种业务活动并计算一天客户在银行的平均逗留时间。 首先从题目分析:N个窗口排队,首先就要建立N个队列来存储排队的用户信息 ,然后算出那个队列最短就用户就到那个队伍排队,同时通过随机生成他办理业务的时间和到来的时间,通过计算用户的到来时间和离开时间就可以计算出某个用户在银行的逗留时间 ;话不多说直接上代码。 下面是主函数,由用户输入银行上下班时间,计算营业多长时间Total_time,如何当前时间小于关门的时间,就一直进入customer_into();函数,用户不断的进来 #define FALSE 0 #define TRUE 1 #define QUEUE_SUM 4 //窗口的数量 int rand_business_time=0, rand_wait_time=0;//定义办理时间,等待时间变量 int Total_time=0,now_tim=0;//总时间,当前时间 int go_time[4] = {0,0,0,0};//定义数组存储每个窗口最后一位办理完业务的时间 int sum_nan[4] = {0,0,0,0};//定义数组存储每个窗口排队的人数 int Sign=TRUE; //是否关门标志位 float Sum_Wait_Time=0.0; //等待的总时间 float Sun_Nan=0.0; //总人数 int open_time;//开门时间 int off_time; //关门时间 int main() { Prompted(); printf("输入银行的24小时制营业时间:如营业时间为9:00--17:00,则应输入:9,17\n"); scanf("%d,%d", &open;_time,&off;_time); Total_time = (off_time - open_time) * 60;//计算银行总营业多少分钟 for (int i = 0; i now_time) { customer_into(); //客户进入函数 } printf("银行关门时间到不再接收客人\n\n"); for (int i = 0; i < QUEUE_SUM; i++) { DisposeQueue(&queue;[i],i);//输入在银行关门前还没有办理完业务的客户信息 } printf("平均时间为%.2f分钟",Sum_Wait_Time/Sun_Nan); /*通过各个客户的总等待时间总和/总人数算出逗留平均时间*/ _getch(); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值