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

用于流程的 Monte Carlo 仿真:它能做什么以及什么时候会误导

简而言之

Monte Carlo 模拟对同一流程进行数百次运行,运行时随机抽取持续时间和数量,并对结果分布进行评估。与单一的“6,4 天”通行时间相比,您会得到一个区间(例如 P10 4,1 到 P90 11,8 天),从而得到在实际运行中可靠的结论。当运行次数不足、对明显偏斜的持续时间误用对称分布、忽略输入之间的依赖关系或将预热阶段纳入统计时,结果会产生误导。

Inhaltsverzeichnis

“Monte-Carlo” 听起来比实际复杂,但这正好好,因为该方法异常简明。这就是有系统的掷骰子。

这个方法用四句话说明

您不是说明某一步持续 10 分钟,而是说明它在 5 到 20 分钟之间,大多数情况下为 8 分钟。计算机会让一个流程项通过该流程,并在每一步从该区间随机抽取一个时长。然后它用一整天的流程项重复这个过程,重复数百次。最后它得到的不是一个通过时间,而是数百个通过时间,并由此得到一个分布。

就是这些。不是宇宙的模型,也不是人工智能。只是拒绝假装世界是精确的。

为什么流程需要这种方法

显而易见的反对意见是:如果我知道均值,为什么不直接用均值来计算?

因为流程是非线性的。两个例子可以立刻说明:

排队。 一步 85% 的利用率会产生相当于其处理时间 5.7 倍的等待时间;当利用率为 95% 时,等待时间是 19 倍。如果您的一天内利用率在 70% 到 100% 之间波动,这些等待时间的平均值不是中间利用率时的等待时间。实际要显著更多。(具体计算方法见 Engpass berechnen。)

最长的路径获胜。 如果两个并行支路都必须完成,则总耗时为两者的最大值,而最大值的期望大于期望的最大值。用均值计算的项目计划因此系统性地过于乐观。

两者合起来就是詹森不等式,通俗称为“Flaw of Averages”。Monte Carlo 避开了这个问题,因为它根本不先求平均,而是先计算,然后再评估。

您需要输入什么

说明为什么需要如果缺失
到达率与分布产生负载排队要么永远不会发生,要么总是发生
每步持续时间作为区间驱动等待时间结果系统性偏优
每个角色或池的容量产生限制没有利用率、没有排队
分支比例分配数量后续步骤的数量错误
日历与班次使等待时间真实等待时间低估约 3 倍

最常见的缺口是最后一项。没有日历的话,周五 16:50 到达的流程项会等待十分钟;有日历的话,它会等到周一。

要跑多少次?

这个问题总会被问到,答案令人不满意:直到结果不再变化为止。

实务上的经验:

  • 100 次 足以看出哪个步骤是瓶颈。步骤的排序在数值稳定之前就已经稳定了。
  • 500 到 1000 次 需要得到可靠的分位数,尤其是 P90,因为它本质上依赖于罕见事件。
  • 超过 5000 次 在此类流程中几乎从不带来额外见解,只有更多计算时间。

您可以自己检验:用不同的起始种子运行同一模型两次。如果结果明显不同,则运行次数不足。

哪种分布?

大多数人在这里犯第二个错误。处理时间几乎从不对称:一个流程项不可能比“非常快”更快,但可以任意慢。因此分布通常在右侧有长尾。

  • 三角分布(最小值、最可能值、最大值)对大多数行政流程完全足够,且优点是这三个值可以在研讨会上询得。
  • 对数正态分布 更好地描述右侧长尾,当异常值决定流程表现时应选用它。
  • 正态分布 几乎总是错误的。它是对称的,并允许负时长。

经验法则:如果不确定,就用三角分布,并将结果以区间形式呈现。分布的选择会移动分位数,但几乎不会改变哪个步骤是瓶颈。

使结果毫无价值的四个错误

1. 运行次数太少。 可通过两次运行得到不同答案来识别。两分钟即可检验。

2. 对偏斜时长使用对称分布。 导致 P90 明显偏低,也就是您应该用于计划的值被低估。

3. 忽略相关性。 如果一个复杂案例在每一步都比普通情况花更长时间,则各步时长是相关的。将每个时长独立随机抽取的模型会消除该效应并低估波动。解决方法:分离流程项类型并分别建模,而不是对所有情况使用一个很宽的分布。

4. 将预热阶段计入评估。 在一次运行开始时系统是空的,没有排队且通过时间很短。将这一阶段计入会用一种在实际运行中从不出现的状态稀释结果。

如何阅读结果

Monte-Carlo 评估不只给出一个数,而至少给出三个:

  • P10: 有利情况。大约每十个周期中会出现一次这样的好结果。
  • P50: 中位数。半数情况低于它。
  • P90: 不利情况。用它来规划容量,而不是用均值。

把结果再缩减为单一数值的人就白做了。区间本身就是结果。如何解读以及 P50 如何误导,见 P10, P50, P90 richtig lesen

Monte-Carlo 做不到的事

它不能把糟糕的输入变好。如果您的数量是猜的,结果也是猜的,仅仅带了小数位。这正是该方法的真正危险:它会产生比数据基础所支持更多的信任。

因此每份评估的文档里应包含三项说明:哪些输入是测量得到的、哪些是估计的,计算了多少次运行,以及使用了哪个起始种子。 缺少这些说明,结果就不可复现。而不可复现的结果在有疑问时就毫无价值。

FlowVisual 就是这样计算并把种子与运行次数打印到手册里。不是出于拘泥,而是因为一个无法复现的数字不应出现在决策材料中。

常见问题

一个流程模型需要多少次 Monte Carlo 运行?

要判断哪个步骤是瓶颈,大约 100 次运行就足够。排序很早就会稳定。要得到可靠的分位数,特别是 P90,应为 500 到 1000 次。是否足够,您可以通过使用不同的起始种子再次运行同一模型来检查:如果结果明显不同,则次数不足。

哪种分布适用于处理时长?

在大多数行政流程中,最合适的是由最小值、最可能值和最大值构成的三角分布。这三个值可以在研讨会中询问得到。在离群值主导流程的情况下,对数正态分布更合适。正态分布几乎总是错误的,因为它是对称的并允许负持续时间。

Monte Carlo 是否等同于离散事件仿真?

不是,这两者互为补充。离散事件仿真会让单次运行发生:任务到达、等待、被处理。Monte Carlo 则是将该单次运行用新抽取的随机值重复多次,并分析结果分布。

为什么必须记录种子?

因为无法复现的结果在决策文档中没有位置。使用相同的起始种子和相同的运行次数,任何人都会得到相同的数字,并能检查差异是由假设变化还是仅由随机性造成。

FlowVisual

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

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

Guide: seven steps to the number