所有文章
方法2026年9月9日 · 1 分钟阅读时间

用于业务流程的离散事件仿真

简而言之

事件驱动离散仿真(DES)将一个过程表示为一系列事件:到达,开始处理,结束处理,班次交替。时钟总是跳到下一个计划事件,而不是以固定时间步前进。因此,一天的模型计算时间在毫秒级。实体是各项工作,资源是处理能力,当两者不匹配时会形成等待队列。对于业务流程,三项决策很重要:以指数分布的到达间隔作为标准假设,处理时长采用右偏分布,以及进行足够次数的重复以使结果区间保持稳定。

Inhaltsverzeichnis

为什么称为“离散”,为什么称为“事件驱动”

在模拟中处理时间有两种方式。

步长驱动: 时钟以固定步长运行(每分钟、每秒),在每一步检查发生了什么。编程简单,但运行低效:在审批流程的两个事件之间可能相隔数小时,期间没有任何事情发生却仍然被计算。

事件驱动: 时钟跳到下一个计划事件的时刻。在事件之间状态不变,因此不需要计算。

事件列表(按时间排序):
  09:14  到达 流程 #418
  09:22  步骤 “Prüfung” 的处理结束 #402
  09:40  审批班次切换
  ...
时钟跳到 09:14,处理,安排后续事件,然后继续跳跃。

“离散”意味着:状态在离散的时间点上发生跳变,而不是连续变化。这非常符合业务流程。一个申请要么被处理,要么没有,不存在半处理状态。

四个构件

构件在您的流程中它的作用
实体发票、申请、工单、应聘者在模型中流动,携带属性
资源办理人员、审批权限人、审核单位有容量,处于空闲或占用状态
等待队列收件箱、工单列表、待办当资源被占用时自动形成
事件到达、开始、结束、班次切换改变状态,安排后续事件

最重要的特性: 等待队列不是被建模出来的,而是产生的。如果把三天的滞留时间作为固定步长输入,就相当于预先假定了结果,而不是计算出结果。之后无法展示当容量或离散程度改变时该时间如何变化。

导致模型失败的三项决策

1. 选择哪种分布?

对于到达间隔:指数分布。 当各个流程独立到达时,比如来自不同供应商的发票或不同用户的工单,这是标准假设。它产生了收件箱中观察到的行为:长时间平静,然后同时到来三件。

如果到达不是指数分布,而是有节拍的:比如月末的汇总运行、每天 8 点的交接,那您需要日历而不是分布。

对于处理时长:右偏分布。 对数正态或伽玛分布。如果只有估计值,则用最小值、最可能值和最大值的三角分布。原因是:处理时间有一个硬下限并且存在长尾。正态分布会产生负时长并低估那些导致排队的极端值。

实践经验法则: 如果您只知道“5 到 15 分钟”,就用众数为 8 的三角分布。选择对数正态还是伽玛对结果的影响通常比是否考虑离散性小得多。

2. 预热期

模拟从空等待队列开始。这是您的流程永远不会有的状态。头几天的模型输出因此系统性偏好。

处理方法: 要么在分析时排除最初几天(Warm-up),要么以现实的初始库存开始。对于利用率明显低于 85% 的流程,几天通常足够;接近临界值时,收敛时间可能是数周。

如何察觉: 如果第一周的平均值明显低于第二周,说明预热期太短。

3. 需要多少次运行?

一次运行只是对一次样本的观察。它关于流程的含义相当于单个工作日。用新的随机数重复运行,直到结果区间稳定。

实用标准: 将运行次数加倍。如果 P50 和 P90 的变化不到几个百分点,运行次数就足够。对业务流程而言,通常需要数百次。

比精确次数更重要的是: 必须重复运行,并且输出应为一个区间。只输出单一数值的模拟就违背了该方法的目的。

两种视角的比较

面向流程的视角事件驱动视角
您描述的内容实体的生命周期每种事件类型发生时的行为
示例“发票到达,等待,被审核,等待,被批准”“到达时:排队。资源空闲时:取下一个”
常见于SimPy、Simul8、大多数商业工具早期库、定制实现

对于业务流程,面向流程的视角更自然:您把发生在某个流程项上的事情写下来,这正好对应业务部门描述其操作的方式。

验证:三项检查

1. Little's Law。 在模型与现实中,库存 ÷ 吞吐量 应该大致等于流转时间。该检查对分布没有假设,因此是最有力的验证方法。

2. 利用率与手算对比。 每个步骤的 ρ = 需求 ÷ 容量 可以用计算器核算。如果模型偏离很大,可能是分支或日历出错。

3. 极值测试。 将某一步的容量设为两倍。如果结果没有变化,说明该步骤从未成为瓶颈。如果这不是您的预期,说明模型与您的认知不符。正是在这种情况下,才会展开有意义的讨论。

在哪些情况下 DES 并不合适

  • 参与者做出改变流程的自主决策(客户放弃、办理人员挑选案件)→ agentenbasierte Simulation。
  • 关注多年库存与反馈(人员扩张、市场动态)→ 系统动力学。
  • 没有队列,因为容量充分→ 加法运算即可。
  • 问题是要还原实际发生的情况→ Process Mining。DES 是在计算一种假设,而不是重建日志。

常见问题

离散事件仿真与基于主体的仿真有何不同?

DES 描述通过固定工位运行并在占用资源前排队的事项。逻辑位于流程中。基于主体的仿真则用具有自身规则并相互作用的参与者来建模。逻辑位于主体中。对于审批流程,DES 是合适的;一旦参与者自行决定是否以及如何继续,ABS 就变得有吸引力。

我应当为处理时间选用哪种分布?

应选用右偏分布:如果有数据,用对数正态或伽马分布;如果需估计,用由最小值、最可能值和最大值确定的三角分布。不要用正态分布。正态会产生负的持续时间,并且低估那些推动队列增长的长时情况。比在这些右偏候选之间作选择更重要的是,必须引入离散度。

热启动期需要多长?

直到在制品数量和等待时间不再系统性增长为止。在明显低于 85% 利用率时,这只需要几个模型日;接近容量极限时可能是数周,因为队列在那里会非常缓慢地达到平衡。一个简单的测试是:如果第一周的平均值明显低于第二周的平均值,说明热启动期太短。

为什么时钟跳跃,而不是均匀运行?

因为在两个事件之间没有需要计算的状态变化。在一个审批流程中,抵达与开始处理之间往往有数小时没有状态改变。事件跳跃使得一模型年在几秒内可算出。这也是数百次重复变得可行的原因。

我需要为DES掌握一门编程语言吗?

不需要。像 SimPy 这样的库需要编写代码,商业工具和精简决策工具则不需要。区别在于责任:使用库时,您需自行决定分布、热启动期和复现实验的次数;带界面的工具会部分替您做这些决定,但计算会更粗略。

FlowVisual

在您自己的流程上进行计算验证

FlowVisual 会把本文中的数字变成一个可运行的模型,使用您的数量、您的产能、您的利润率。

Guide: seven steps to the number