泊松分布在容量管理中的应用

其实是泊松分布的经典应用:

已知某呼叫中心每小时会进ci个电话,每个电话平均时长为tp,则在任意给定时刻,并发电话的为x的概率服从泊松分布。此处假设不同的电话是完全独立事件。

并发电话为x的概率,等同于在tp时长内,进入x路电话的概率。在tp时长内,平均会进的电话数为tp*ci。因此,并发电话小于或等于x的概率为(excel公式):

POISSON(x,tp*ci,TRUE)

其中最后一个参数TRUE,表明这里计算的是并发电话小于或者等于x的概率;如果用FALSE,则只计算等于x的概率。

此公式可用于呼叫中心容量规划,比如:如果已知呼叫量和平均通话时长,则要确保容量在99%的情况下够用,则只需求x,使得POISSON(x,tp*ci,TRUE)>0.99。

在某呼叫中心,把历史数据应用了一下,符合度很高:

call_vol_verification

其中横轴是时间,黄色为实际并发量,蓝色为按照0.999计算出的并发量上限。

如果把横轴改成按照实际并发量排序,则得到:

call_vol_verification_2

可以看到实际并发量几乎总是在预计容量之下。几个实际并发量高于预计容量的情况,后来证实都是系统出了故障,导致客户竞相反复拨打,意味着不仅原来的参数不再适用,独立同分布的假设也不再适用。

 

我的师承

众所周知,讲师承是很羞耻的事情——尤其对中国人来说——王小波成名已久,才战战兢兢地说,“终于有勇气谈谈自己的师承”。我有勇气谈我的师承,不是我有什么成就,而是两个原因:1. 在计算机编程这个领域,师承没有那么严肃,我的所谓师承就更不严肃;我做得不好,是我的问题,不算给老师丢人;2. 我觉得我走过的路比较省力,可能帮助很多人避免浪费。

在编程方面,我的第一个老师,应该是Charles Petzold。我在MSDN的文档里面遇到他,然后知道了这本书。这个封面是第五版的封面,我在学校的时候应该是第四版或者第三版。从Charles Petzold这里我学到,所谓Win32 API,无非就是Windows的设计者跟程序员的约定,这些约定有设计者自己的权衡与取舍,但没有任何神秘和高贵的地方,程序员根据自己的需要和理解决定应该如何使用这个API,达到自己的目的。当时很多程序员沾沾自喜于之道某些未公开的API,仿佛能够使用这种API是一种了不得的能力。但Petzold说的很清楚,这些API未公开,不是因为有不能轻易示人的作用,通常是因为种种原因无法提供后续支持,或者行为不确定,盲目使用只会给自己的软件买下隐患。

Programming Windows®, Fifth Edition (Microsoft Programming Series) by Petzold… - Obrázek 1 z 1

然后应该是Jeffery Richter,就是Programming Application for Windows的作者。下面这个封面已经是后来的新版,之前的版本找不到了。

Programming applications for Microsoft Windows : Richter, Jeffrey : Free  Download, Borrow, and Streaming : Internet Archive

相比Programming Windows,Jeffrey Richter的书更偏向软件跟操作系统的交互,而不关心Windows的界面设计。

从Petzold和Richter身上,我第一次亲身体会来自真正专家的信息费效比有多高。我们在BBS上,论坛上网站上看到的信息,经常是这些一手信息的转述,可能还经过很多道转述,不见得准确,也不见得完善。仅仅依赖这些二手三手信息,学习过程可能会非常痛苦,而且效率低下。

也从这时候开始,我更注意看原版书,很快就注意到Richard Stevens,他的《TCP/IP详解》大家都知道了:

Amazon.com: TCP/IP详解卷1: 协议: 0749363698676: W.Richard Stevens: 圖書

Stevens是很多早期RFC的作者,内容非常权威,而且不仅讲设计,还讲为什么这样设计。他的Unix网络编程系列,也是如此。

其实我反复阅读的,也只有TCP详解的第一卷,也足够打下坚实的基础。

从这时候开始我可以独立查找资料,在安全和加密这个领域,遇上了Bruce Schneier和他的Applied Cryptography。

Applied Cryptography: Protocols, Algorithms, and Source Code in C: Schneier,  Bruce: 9780471117094: Amazon.com: Books

这时候我已经能够意识到,好的老师能够帮你快速建立知识体系和框架。Schneier对于协议、算法各自在安全中的作用,谈得特别透彻,给我在后来的工作中理解安全问题建立了良好的框架。

大约在同一时间段,我开始经常遇上malware,经常需要对系统进行修复,所以先接触到了Winternals的工具,知道了Mark Russinovich,以及他跟David Solomon合写的书Inside Windows 2000。

Inside Microsoft Windows 2000, Third Edition (Microsoft Programming  Series): Solomon, David A., Russinovich, Mark E.: 9780735610217:  Amazon.com: Books

Russinovich对我的启发类似于Richter,他们更关注操作系统底层,Russinovich更是从Linux得到启发,把一些功能特性移植到Windows上,我后来有很多项目,都受到这个思路的启发。

Inside Windows 2000经过多次更新再版,现在叫Windows Internals吧。我已经有几年不再做Windows原生程序开发了,但是我推荐这本书给所有关心操作系统运行机制的人。

此外,我当然也深受Donald Knuth和Bjarne Stroustrup的教益,尤其是Knuth的Concrete Mathematics,不仅影响了我对数学的认识,也影响了我对数学教学的看法。遗憾的是我接触到他们,都是大学之后的事情,相见恨晚,所以看到的时候,我已经浪费了很多不必要的功夫。

回想起来,从大学时候起到现在,我的技术主要是这些人和书籍教会的。把他们叫做我的师承,可能有攀附之嫌,因为我并没有形成有影响力的作品,但也是真诚的。