浅聊 | 离散事件仿真(DES)是什么?
一般性,我们都直入主题。
Part1 什么是仿真?
先说仿真,仿真就是模拟,是应用模型对现实事物的再认识。仿真的目的是为了认清事物。仿真分两种:
1、一种是认识事物的外在表现,比如售楼处的微缩沙盘,汽车设计时电脑中的3D模型,展示微观世界的短片等等。这些仿真手法解决了观察事物外观的种种困难,带我们看清了“庐山真面目”。
2、另外一种仿真是为了认识事物的内在规律,这一类仿真的范围其实更加宽泛。比如细胞实验模拟了细胞中的环境,能够帮助认识药物代谢的规律。飞机模拟驾驶,让操作人员在安全的虚拟环境中认识系统操作的方法。宏观经济学模型,研究国民生产总值、利率、失业率等市场指标的相互作用。这些仿真手法,让我们能够预见事物的发展方向,得以“一叶而知秋”。
Part2 什么是离散事件仿真?
那离散事件仿真(Discrete Event Simulation,缩写为DES)是什么呢?我们把这些字拆开来看下:
“Discrete”是离散,在一个离散的系统中,我们总是能够找到一个时间点来标注系统的变化,比如研究对象进入系统和离开系统的时间点,进入队列和离开队列的时间点,开始加工和完成加工的时间点等等。这些时间点在时间轴上是离散而非连续的,而系统状态仅在离散的时间点上发生变化。
“Event”是抽象的事件,就是我们在时间轴上标记的一系列事件。这些事件所发生的时间或是我们提前制定好的,或是受到其他事件的影响而发生,或是在某些条件到达的时刻发生。总之,一定能根据规律找到事件发生的那个时时间点,而这些时间点,就是我们预测系统变化的依据。
“Simulation”就是属于前文提到的第二种仿真,就是实现预测的方法。
离散事件仿真就是根据事件在离散的时间点上变化的规律,来预测系统变化的方法。
Part3 手工仿真
认识了离散事件仿真的概念,再来看一类典型的问题:队列。在系统存在一定随机性的情况下,队列的状态是会随着时间而不断变化的,为了寻找它的规律,我们就可以应用离散事件仿真的方法。比如,得知了每一个研究对象到达队列的时间和它的排队方式,我们就可以记录它们进入队列和离开队列的时间,然后就可以总结出队列的平均等待时间,队列的平均长度等信息,以便我们做出决策。
队列的问题非常实际,比如在在银行排队多久才能轮到我?生产线上会有多少等待加工的零件?红绿灯路口队列会有多长?想想看,你会怎么解决这些问题。
先抛开离散事件仿真的方法,我们先试试看用研究“动态随机过程”的方法解决,这个方法就是将现实的问题归纳成为典型的数学问题,如M/M/1问题,再套用相应的公式。
最典型的M/M/1模型就是:研究对象的到达是泊松过程/工序的操作时长服从指数分布/工序的资源个数是1。这时,研究对象在队列中的平均等待时间就可以套用公式:
(
: 工序操作的平均时长,
:研究对象的平均到达时间间隔)
这种典型问题用套路解决,省时省力。但是如果我想要问更具体的问题,队列中等待时间超过5分钟的人有多少?那些很幸运,不用排队就直接接受服务的人有多少?这对数学功底的要求就比较高了。
所以我们回到离散事件仿真:我们会记录系统的每一次变化在时间点上的位置,这样忠实的记录将会给我们一份有力的依据,任何统计上的问题都可以迎刃而解。实现它的最原始方法,是手工编制一份事件发生表,在每一次系统变动的时间点,记录系统状态的各项指标,最后统计这些指标,找出问题的答案。
现在就假设我们建立了这样一个简单的M/M/1模型:
我们根据泊松分布随机生成了研究对象的到达时间:0.00, 1.73, 3.80, 3.79, 4.41, 18.69, 19.39
同时根据指数分布随机生成了这一道工序的操作时长:2.90, 1.76, 3.39, 4.52, 4.46, 4.36, 2.07
并且设定资源的个数只有1个。
下面大家感受一下手工模拟的过程,图表抬头的如下:
刚完成事件
变量
属性
统计累加器
研究对象编号
事件发生时间
事件类型
队列长度
忙碌资源个数
排在队列中的对象
正在进行加工的对象
完成加工的对象
排完队的对象
累计队列时间
最大队列时间
累计系统时间(含排队时间)
最大系统时间
时间-队列曲线下的面积
最大队列长度
时间-忙碌资源个数曲线下的面积
未来事件表
大家可以感觉得出来,仅仅是针对M/M/1这样简单的规则,手工记录离散事件的工作就已经如此繁琐,那么手工研究一个复杂系统,几乎是不可能的。
Part4 计算机仿真
感谢科技的发展,计算机的登场改变了整个格局,记录每一次系统的动态信息,不再是一项繁琐的工作,而且永远不怕出错:离散事件仿真软件可以根据流程建模,进行仿真实验并记录数据,最终统计出结果。
现在的仿真软件已经可以做到在同一个系统内同时运行多达几千万个对象,且时间长度无限。这是在没有计算机的情况下很难想象的一件事情。
一部分离散事件仿真软件还发展出了动画效果,在研究系统内在规律的同时还能帮助我们认识事物的外在表现。通过2D或3D动画,软件可以模拟出现场场景,让我们更直观地感受到系统的变化。由于仿真动画是建立在逻辑模型基础之上的,所以动态变化会更加真实。
最后,祝离散事件仿真在中国有一个光明的前途。
作者介绍
杨楠,毕业于美国里海大学(LEHIGH UNIVERSITY)工业工程系,研究方向为决策与风险分析。现任Rockwell Arena中国区代理建模技术支持。曾参与国内外多项建模仿真项目,帮助企业客户大幅降低成本、控制决策时的风险。
我们的仿真课程将要上线了!有兴趣的朋友可以开始加六号的微信啦(826182845),备注“仿真”。