从负指数分布/泊松分布到排队论(经理能扣篮,但不经常也不绝对)
从经理穿着皮鞋能不能扣篮,引起了一段思考。
周六上午在家带娃,我已经快崩溃,所以作文时间放在了午后。
假如你相信上帝真的是在掷骰子,那么我们的世界就是上帝的一系列实验生成的。
假如你相信世界是二元元素的组合,那么使用二进制便可以完整描述整个世界。
一切从二项分布开始裂变。
二项分布
让我们看一道非常简单的概率统计习题:
如果做一次实验,一个独立的事件EEE发生的概率是ppp,那么请问,连续做nnn次实验,让事件EEE发生kkk次的概率是多少?
非常简单的习题,只要知道独立事件同时发生的概率相乘性质即可解题。
- 单次事件发生的概率就是ppp,单次事件不发生的概率是1−p1-p1−p
- 事件发生kkk次的概率就是pkp^kpk
- 实验进行了nnn次,kkk次发生了事件,意味着n−kn-kn−k次没有发生事件
- n−kn-kn−k次没有发生事件的概率是(1−p)n−k(1-p)^{n-k}(1−p)n−k
- 事件的发生与实验顺序无关,故发生kkk次的可能性有CnkC_n^kCnk种
综上1~4,连续做nnn次实验,事件EEE发生kkk次的概率为:
P(X=k)=Cnk×pk×(1−p)n−kP(X=k)=C_n^k\times p^k\times (1-p)^{n-k}P(X=k)=Cnk×pk×(1−p)n−k
是的,这就是 二项分布 。
根据以上的二项分布,我们可以计算出在P(X=k)P(X=k)P(X=k)的概率下,重复实验kkk次,事件发生的 平均次数 为:
λ=n×p\lambda=n\times pλ=n×p
现在让我们来看所谓的 事件 以及 平均次数 的具体意义和性质。
对于在推导二项分布时的我们理解的事件,都是 单次等概率的事件。 即做一次实验,事件发生的概率是相同的,也就是定值ppp,比如抛硬币。利用这类事件,我们已经非常容易地推导出二项分布的式子。
但是还有一种事件,固定的时间内它们发生的 次数 与单次实验事件发生的概率是无关的,而是与连续的时间段或者连续的空间大小有关,即 单位时间/空间内时间发生的次数平均值为定值。 典型的例子就是生产线产品的良品率,无论你用多少条相同的生产线做实验,良品率总是相等的。本文接下来要讨论的所有事件,均是此类事件。
此类事件具有 累加性质 。即 事件在一个连续的时间段或者空间中持续以某种概率发生。
这种事件很难对应到 二项分布 的所谓独立实验重复多次的场景,我们不妨先借用一下λ=n×p\lambda=n\times pλ=n×p这个式子,从事情的本初开始。
负指数分布
再看一遍 一段时间内事件发生平均次数 的式子:
λ=n×p\lambda=n\times pλ=n×p
如果λ\lambdaλ为定值,即在确定的区间内,无论做多少次实验,都不会改变实验成功的次数,我们换一种写法:
p=λ×1np=\lambda\times \dfrac{1}{n}p=λ×n1
即 事件发生的概率与1n\dfrac{1}{n}n1成正比! 至于1n\dfrac{1}{n}n1如何被解释,我们接着往下看。
如果我们把所谓的 单位时间 规约为1,那么1n\dfrac{1}{n}n1就是一个小的时间片,整个单位时间被分成了等大小的nnn份,nnn越大,时间片就越小,我们在单位1的约束下,不妨将1n\dfrac{1}{n}n1看作是Δt\Delta tΔt,那么ppp就是Δt\Delta tΔt内事件发生kkk次的概率:
Pk(Δt)=λΔtP_k(\Delta t)=\lambda \Delta tPk(Δt)=λΔt
即 事件发生的概率与时间片的长短成正比!
但是发生几次呢?至少发生1次!也可能发生2次,3次,5次,100次。可是,如果发生次数大于1次,在后面的推导中,便无法拟合二项分布的含义,如何将发生的次数限制在至多1次呢?
答案是 将Δt\Delta tΔt想象成非常小,即发生1次事件的概率都超级小,更何况多次。
所以,在Δt\Delta tΔt非常小的保证下,我们认为PkP_kPk可以表达成下面的式子:
Pk(Δt)=P1(Δt)+o(Δt)=λΔtP_k(\Delta t)=P_1(\Delta t)+o(\Delta t)=\lambda \Delta tPk(Δt)=P1(Δt)+o(Δt)=λΔt
我们将发生事件大于1次的概率看作是一个关于Δt\Delta tΔt高阶无穷小。反正后面我们采用微积分推导时必然保证Δt\Delta tΔt趋向于000,因此高阶无穷小是可以忽略的。
我们忽略高阶无穷小后,有:
P1(Δt)=λΔtP_1(\Delta t)=\lambda \Delta tP1(Δt)=λΔt
接下来,按照概率的定义,在Δt\Delta tΔt内事件不发生的概率就是:
P0(Δt)=1−λΔtP_0(\Delta t)=1-\lambda \Delta tP0(Δt)=1−λΔt
我们将其形式化:
P0(t)=1−λtP_0(t)=1-\lambda tP0(t)=1−λt 【式子1】
注意,虽然我们为了形式化将Δt\Delta tΔt换成了ttt,但是这只是为了数学上推导方便,我们必须记住,自变量ttt是时间片的长短,而不是一个绝对时间!那么按照P0(t)P_0(t)P0(t)的解释,P0(t+Δt)P_0(t+\Delta t)P0(t+Δt)的意思就是 时间片长度为t+Δtt+\Delta tt+Δt时事件不发生的概率!
请注意,长度为t+Δtt+\Delta tt+Δt的时间片可以分割为连续的两个小时间片ttt和Δt\Delta tΔt, 时间片t+Δtt+\Delta tt+Δt中不发生事件的概率要求时间片ttt和时间片Δt\Delta tΔt中均不发生事件! 按照概率相乘的原理:
P0(t+Δt)=P0(t)P0(Δt)P_0(t+\Delta t)=P_0(t)P_0(\Delta t)P0(t+Δt)=P0(t)P0(Δt) 【式子2】
代入式子1,我们整理式子2:
P0(t+Δt)=P0(t)(1−λΔt)=P0(t)−λΔtP0(t)P_0(t+\Delta t)=P_0(t)(1-\lambda \Delta t)=P_0(t)-\lambda \Delta tP_0(t)P0(t+Δt)=P0(t)(1−λΔt)=P0(t)−λΔtP0(t)
稍微变换一下:
P0(t+Δt)−P0(t)Δt=−λP0(t)\dfrac{P_0(t+\Delta t)-P_0(t)}{\Delta t}=-\lambda P_0(t)ΔtP0(t+Δt)−P0(t)=−λP0(t) 【式子3】
式子3是什么?取极限不就是个求导吗:
limΔt→0P0(t+Δt)−P0(t)Δt=P0′(t)=−λP0(t)\lim_{\Delta t \to 0}\dfrac{P_0(t+\Delta t)-P_0(t)}{\Delta t}=P_0\prime(t)=-\lambda P_0(t)limΔt→0ΔtP0(t+Δt)−P0(t)=P0′(t)=−λP0(t)
写成微分方式:
d(P0(t))P0(t)dt=−λ\dfrac{d(P_0(t))}{P_0(t)dt}=-\lambdaP0(t)dtd(P0(t))=−λ
两边同时积分,按照第一类换元积分:
∫d(P0(t))P0(t)dtdt=∫1P0(t)d(P0(t))=logeP0(t)=−λt+C\displaystyle\int\dfrac{d(P_0(t))}{P_0(t)dt}dt=\displaystyle\int\dfrac{1}{P_0(t)}d(P_0(t))=log_eP_0(t)=-\lambda t+C∫P0(t)dtd(P0(t))dt=∫P0(t)1d(P0(t))=logeP0(t)=−λt+C
取eee的指数得到:
P0(t)=eC×e−λtP_0(t)=e^C\times e^{-\lambda t}P0(t)=eC×e−λt
ttt是一个时间片,t=0t=0t=0就是无,当然不会有任何事件发生,即P0(0)=1P_0(0)=1P0(0)=1,即:
P0(t)=e−λtP_0(t)=e^{-\lambda t}P0(t)=e−λt
在时间片长度为ttt的时间内不发生事件的概率是e−λte^{-\lambda t}e−λt,那么至少发生1个事件的概率就是:
P1(t)=1−e−λtP_1(t)=1-e^{-\lambda t}P1(t)=1−e−λt
这就是概率积累函数,这不就是 负指数分布 吗?即 单位时间内时间发生平均次数为固定值λ\lambdaλ的事件的时间间隔的概率为负指数分布!
泊松分布
再看一遍 一段时间内事件发生平均次数 的式子:
λ=n×p\lambda=n\times pλ=n×p
这里,我们依然假定λ\lambdaλ为定值。这个是本文通篇的假定。
在推导负指数分布的时候,我们已经将单位时间分割成了要多小有多小的Δt\Delta tΔt,并且我们还知道,这些小的时间片Δt\Delta tΔt内发生1次以上事件的概率为Δt\Delta tΔt的高阶无穷小,在参与取极限,微积分等数学运算的时候是被忽略的,于是我们得到了非常清爽的式子:
P1(Δt)=λΔtP_1(\Delta t)=\lambda \Delta tP1(Δt)=λΔt
我们将其形式化:
P1(t)=λtP_1(t)=\lambda tP1(t)=λt
注意,自变量ttt是一个时间段,而不是绝对时间,这里再次强调。
好了,开始我们的推导。
现在我把这个已经非常小的时间片ttt(也就是Δt\Delta tΔt,只是写成ttt好看一些)画出来:
我们终于可以套用 二项分布中的实验模型 了。
- 在ttt时间片内,发生了一次事件。
我们知道ttt已经非常小,小到可观测范围只能发生1次事件,发生1次以上事件的概率微乎其微(高阶无穷小o(t)o(t)o(t)),然而,由于时间片是连续的,即便再小它依旧是 继续可分的 ,像分形一样,我们把ttt放大,将其再等分成mmm份:
之所以将ttt再继续等分mmm份是因为,我们知道ttt时间片内事件发生的概率是λt\lambda tλt,那么在ttt时间片内,如果事件发生了,那么事件具体在哪一个更精细的时间片内发生,又是一个概率问题:
- 是在第1个tm\dfrac{t}{m}mt时间片里发生吗?
- 是在第2个tm\dfrac{t}{m}mt时间片里发生吗?
- 是在第3个tm\dfrac{t}{m}mt时间片里发生吗?
- …是在第mmm个tm\dfrac{t}{m}mt时间片里发生吗?
到底再哪个小时间片里发生呢?很简单,都有可能发生。都是等概率的,每个小时间片发生事件的概率均为1m\dfrac{1}{m}m1,按照概率相乘的规则:
- 事件在ttt事件片发生的概率为λt\lambda tλt
- 事件如果真的在ttt时间片发生,那么它在某一个tm\dfrac{t}{m}mt小时间片发生的概率就是λt×1m\lambda t\times \dfrac{1}{m}λt×m1
是的,概率就是
P=λt×1mP=\lambda t\times \dfrac{1}{m}P=λt×m1
哈哈,为了得到概率分布,我们可以做实验了:
- 连续做kkk次实验,k<mk<mk<m,每次实验事件发生的概率是λt×1m\lambda t\times \dfrac{1}{m}λt×m1
这就是一个典型的二项分布:
P(X=k)=Cmk×(λtm)k×(1−λtm)m−kP(X=k)=C_m^k\times (\dfrac{\lambda t}{m})^k\times (1-\dfrac{\lambda t}{m})^{m-k}P(X=k)=Cmk×(mλt)k×(1−mλt)m−k
现在事情可以开始了。
由于时间是连续流逝的(空间也一样),那么时间片就是无限可分割的,我们求一个连续变量下事件发生的概率,需要就是将时间片(或者空间) 无限分割 。
以上这个式子里,其实ttt已经是无限分割的结果了,但是我们不要在乎ttt,只需知道在ttt时间片里至多发生1次事件就好了,重要的是, 我们将ttt分割mmm份,让mmm趋向于无穷大会怎样?
求极限:
limm→∞Cmk×(λtm)k×(1−λtm)m−k\lim_{m \to \infty}C_m^k\times (\dfrac{\lambda t}{m})^k\times (1-\dfrac{\lambda t}{m})^{m-k}limm→∞Cmk×(mλt)k×(1−mλt)m−k
直接求解即可,其中只需要应用一个重要极限公式,一切迎刃而解:
limm→∞(1−λtm)m=limm→∞(1−1mλt)mλtλt=eλt\lim_{m \to \infty}(1-\dfrac{\lambda t}{m})^m=\lim_{m \to \infty}(1-\dfrac{1}{\frac{m}{\lambda t}})^{\frac{m}{\lambda t}\lambda t}=e^{\lambda t}limm→∞(1−mλt)m=limm→∞(1−λtm1)λtmλt=eλt
直接写答案吧:
P(X=k)=e−λt(λt)kk!P(X=k)=\dfrac{e^{-\lambda t} (\lambda t)^k}{k!}P(X=k)=k!e−λt(λt)k
这是什么?这就是 泊松分布。
即 单位时间内时间发生平均次数为固定值λ\lambdaλ的事件在单位时间内发生的次数符合泊松分布!
所以说,负指数分布和泊松分布是一回事。它们两个均可以从 单位时间内时间发生平均次数为固定值λ\lambdaλ 这个大前提推导出来。
生灭过程和排队
有来必有往,有去必有回。
我们为所谓的事件赋予其意义。
把单位时间发生的事件的看作 请求的到达 ,那么, 请求被处理 自然也可以被看作是同类的事件。
请求不断地到达,又不断地被处理,这是一个马尔可夫过程,最终这个过程就形成了一个马尔可夫链,每一个状态,我们可以看作是 未被处理请求为iii的概率 :
由于请求的到来和被处理均是统计分布,那么统计意义的突发必然会造成排队,即上述的马尔可夫过程必然向后延展,然而如果系统是稳定的,积压的请求将会在突发空闲期被持续处理,从而使得马尔可夫过程向前收缩,最终对于每一个状态而言,都将达成一个平衡:
Pi−1λ+Pi+1μ=Piλ+PiμP_{i-1}\lambda+P_{i+1}\mu=P_i\lambda+P_i\muPi−1λ+Pi+1μ=Piλ+Piμ
此外,系统中所有的状态的概率之和恒等于111:
Σi=0nPi=1\displaystyle \Sigma_{i=0}^{n}P_i=1Σi=0nPi=1
此外,对于状态000,它没有前置状态,所以必然有:
P0λ=P1μP_0\lambda = P_1\muP0λ=P1μ
我们用此而递推:
P0λ+P2μ=P1(λ+μ)P_{0}\lambda+P_{2}\mu=P_1(\lambda+\mu)P0λ+P2μ=P1(λ+μ)
P1λ+P3μ=P2(λ+μ)P_{1}\lambda+P_{3}\mu=P_2(\lambda+\mu)P1λ+P3μ=P2(λ+μ)
P2λ+P4μ=P3(λ+μ)P_{2}\lambda+P_{4}\mu=P_3(\lambda+\mu)P2λ+P4μ=P3(λ+μ)
.........
Piλ+Pi+2μ=Pi+1(λ+μ)P_{i}\lambda+P_{i+2}\mu=P_{i+1}(\lambda+\mu)Piλ+Pi+2μ=Pi+1(λ+μ)
上面所有式子整理,得到:
Pi=(λμ)iP0P_i=(\dfrac{\lambda}{\mu})^iP_0Pi=(μλ)iP0
进一步:
Σi=0nPi=P0Σi=0n(λμ)i=1\displaystyle \Sigma_{i=0}^{n}P_i=P_0\Sigma_{i=0}^{n}(\dfrac{\lambda}{\mu})^i=1Σi=0nPi=P0Σi=0n(μλ)i=1
数列求和而已:
P0μμ−λ=1P_0\dfrac{\mu}{\mu-\lambda}=1P0μ−λμ=1
嗯,这样就求出了P0P_0P0:
P0=1−λμP_0=1-\dfrac{\lambda}{\mu}P0=1−μλ
那么PiP_iPi自然也求出来了:
Pi=(1−λμ)(λμ)iP_i=(1-\dfrac{\lambda}{\mu})(\dfrac{\lambda}{\mu})^iPi=(1−μλ)(μλ)i
接下来,排队论基础中的典型结论基本就都能出来了:
- 平均排队实体数量
Navg=ΣnnPn=λμ−λN_{avg}=\Sigma_{n}nP_n=\dfrac{\lambda}{\mu-\lambda}Navg=ΣnnPn=μ−λλ - 平均等待时延
Tavg=Nλ=1μ−λT_{avg}=\dfrac{N}{\lambda}=\dfrac{1}{\mu-\lambda}Tavg=λN=μ−λ1. - …
现在公式都可以非常简单明确地根据泊松分布,负指数分布推导出来了,但是问题是, 你真的相信世界上的一些事情符合泊松分布吗?或者说,即便你相信它们符合,它们真的符合泊松分布吗?
如果是,那么上面的公式就可以描述一切,如果不是,怎么办?
泊松分布/排队论的适用性
基于泊松分布/负指数分布的排队论不适用任何现实场景!!
因为现实中根本就没有什么事件规律符合泊松分布。
我们以为路面某个监测点的车辆的到达符合泊松分布,但是非也!几乎可以肯定,人是喜欢跟风的,这意味着车辆到达某个点并非独立事件,这也是交通拥堵的根本原因。
我们以为互联网交换节点数据包的到达符合泊松分布,但是非也!数据包确实具有突发性达到的特征,但是前后两个数据包之间关联着巨大的粘性,它们并非独立到达的。这也是我在2014年设计状态防火墙cache的依据,利用局部性嘛。
之所以泊松分布的结论被如此普遍地被利用,完全在于 其在数学上非常容易处理,容易预测后事。 然后我们利用现实的参数,给予矫正,即可得到相当不错的结论。
其实仔细想想,世界本应该就是泊松分布主宰的,所谓的跟风和粘性,那可能是人性使然。路面上车里的司机,你不认识我,我也不认识你,大家却往同一条路上走,如果不是 我相信别人有更好的选择 ,那么就是别无选择了…对了,上下班高峰,节假日,天气,也会让泊松分布失效。但这些说来说去还是因为人为原因导致,比如人都是白天才出门,晚上则闭户。所以说,你要把事件尺度拉大,在以年为单位时间的范围,或者更长的单位1,泊松分布将会越离越拟合现实。
单队列和多队列的问题
存在多个服务台的情况下,到底是单队列效率高还是多队列效率高?
这个我们来算一下。
M/M/1情况下,单队列,排队实体的平均等待延时为:
Tsingle=11×μ−λT_{single}=\dfrac{1}{1\times\mu-\lambda}Tsingle=1×μ−λ1.
如果队列被分成了NNN个,那么单位111作用于每一个队列则为1N\dfrac{1}{N}N1,而平均到达率对于每一个队列,均将是λN\dfrac{\lambda}{N}Nλ,平均等待时间,代入上式:
Tmulti=1(1N)×μ−λN=N×TsingleT_{multi}=\dfrac{1}{(\dfrac{1}{N})\times \mu-\dfrac{\lambda}{N}}=N\times T_{single}Tmulti=(N1)×μ−Nλ1=N×Tsingle
很遗憾,有点有悖于常识,如果采用多队列,平均等待时间将会延长!这就是为什么对于以太网这种统计复用的突发流量网络而言,并没有采用任何XDM(X可为时间,频率…)的策略,而只是采用了时间域上单队列退避的CSMA/CD策略的原因!
然而,比如以Linux内核而论,进程调度, 却是多队列的,每CPU核心一个队列,这是Why?这是因为,相比于进程的到达和被调度,锁以及cache miss的开销更大,这纯粹是一个实现上的工程优化,不伤排队论的大雅,和算法无关。
经理能不能扣篮
经理穿着皮鞋能扣篮吗?我觉得能。
经理能扣篮,但不经常,也不绝对。
这就跟总有那么一个非零的概率,一个立方的空气分子全部朝着一个方向运动是一样的道理。
经理能扣篮,这只是一个概率性的结论,经理能扣篮并不意味着经理扣篮就一定能成功。
浙江温州皮鞋湿,下雨进水不会胖。
从负指数分布/泊松分布到排队论(经理能扣篮,但不经常也不绝对)相关推荐
- C#产生正态分布、泊松分布、指数分布、负指数分布随机数(原创)
http://blog.sina.com.cn/s/blog_76c31b8e0100qskf.html 在编程过程中,由于数据仿真模拟的需要,我们经常需要产生一些随机数,在C#中,产生一般随机数用R ...
- python学习笔记:泊松分布和负指数分布随机数的python实现
不能算是纯原创吧,算半个转载好了,但保证一定能用! 首先导入模块 import math import random 泊松分布 def poisson(L):"""poi ...
- 概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布
概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布 使用Java中的SecureRandom.nextDouble()生成一个0~1之间的随机浮点数,然后使用 ...
- 排队论---单服务台负指数分布排队系统的分析
2019独角兽企业重金招聘Python工程师标准>>> 标准的 M / M / 1 模型 系统的容量有限制的情况 顾客源为有限的情形 转载于:https://my.oschina.n ...
- 排队论---多服务台负指数分布排队系统的分析
2019独角兽企业重金招聘Python工程师标准>>> 标准的 M / M / c模型 M / M / c型系统和 c 个 M / M / 1 型系统的比较 系统的容量有限制的情形 ...
- 【优化模型】单服务台负指数分布排队系统分析 — M/M/1模型
目录 1.M/M/1模型 2.标准型:M/M/1(M/M/1//) 3.关于的说明 4.系统运行指标
- MATLAB生成负指数分布
实现代码如下: x=0:0.001:10; y=5*exp(-x); plot(x,y);
- 运筹优化(十六)--排队论基础及其最优化求解
排队过程的一般表示 下图1就是排队过程的一般模型.各个顾客由顾客源(总体)出发,到达服务机构 (服务台.服务员)前排队等候接受服务, 服务完成后就离开.排队结构指队列的数目和排列方式 , 排队规则和服 ...
- c语言大作业 模拟泊松分布,怎样用C语言模拟泊松分布
每个事件的时间间隔按照指数分布,就可以满足事件在单位时间内发生的次数是按照泊松分布的 先顺便说一句,关于二项分布这个名称可以这样认为:发生k个事件的概率是二项展开式中的第k项.概率与二项展开式紧密联系 ...
- 排队论在食堂排队中的运用
一.问题描述 排队在日常生活中是非常常见的现象.在学校中,每次到了饭点的时间,食堂都会水泄不通,对于同学们来说,减少排队等待时间是同学们的需求,但是对于食堂来说,增加窗口的同时,也会相应增加运营成本, ...
最新文章
- 谷歌OKR指导手册 (译)
- Java基础学习巩固3--重载和重写分析及区别
- Android Camera的进化史
- 26-Ubuntu-文件和目录命令-其他命令-管道
- PHP全栈开发(八):CSS Ⅹ 导航栏制作
- osg专业名词:LOD、数据分页、动态调度
- eclipse中JS文件乱码
- [导入]用事件和异常返回多种结果
- 详解SQL2005中的AWE
- Affinity 1.10 版本更新,性能提升
- 学习指南:零基础java入门教程(入门篇)
- 日历 C语言算法,【求助】万年历算法
- 【Proteus】超声波测距
- 关于html的实训日志,满足你的甜蜜幻想, 《我与她的实习日志》登陆NS
- 为什么实对称矩阵要求其正交矩阵,而不是可逆矩阵使其对角化?
- 虚拟偶像主播的大致现状,数字人技术现状
- 心心念念想打游戏,游戏 套路有哪些?怎么做留存?
- warning:4005 DXGI_STATUS_OCCLUDED,宏重定义
- 超级计算机多层网络,超级计算机的多层架构抽象及描述
- 并发编程 Java 三把锁(Synchronized、ReentrantLock、ReadWriteLock)