某连锁便利店每天早上开始配货时,面对一个反复出现的难题:今天应该补多少货?历史销量数据显示,日均销量30瓶,但实际销量在18到55瓶之间随机波动。按30瓶进货,销量高的那天就缺货;多备货,销量低时就积压占资金。前面介绍的库存模型(EOQ、ROP)处理的是平均状态,但现实的麻烦偏偏来自波动。
仿真(Simulation)的作用,正是让分析者在计算机上“演练”一遍真实的运营过程——不是简化掉随机性,而是把它如实保留在模型里,通过大量重复模拟,观察结果的分布规律,从而在不确定条件下做出有依据的决策。

前面学习的模型——EOQ、M/M/1排队模型、CPM关键路径法——都建立在若干简化假设的基础上。这些假设让问题可以用公式直接求解,但同时也把现实中的随机性部分过滤掉了。
以EOQ模型为例,它假设需求是均匀稳定的,订货到货时间固定。但现实中,超市的日销量随天气、节假日、促销活动大幅波动,供应商到货时间也可能因物流延误而变化。EOQ算出来的“最优订购量”,在这些波动条件下,到底还能省多少成本?EOQ本身无法回答这个问题。
三种典型的“需要仿真”的场景:
仿真给出的不是“最优解”,而是在某种方案下,结果的概率分布。要找到最优方案,需要对多个备选方案分别仿真,然后比较各方案的期望结果和风险水平。
蒙特卡洛仿真(Monte Carlo Simulation)这个名字来自摩纳哥的著名赌城,因为它的核心操作本质上是“用随机数反复抽签”。它的基本逻辑是:既然现实中的需求、服务时间等变量是随机的,就按照这些变量的概率分布,一次次随机抽取数值,模拟出一个个可能的情景,再统计这些情景下系统的整体表现。
蒙特卡洛仿真的标准流程分五个步骤:
一个入门案例:便利店饮料补货
某便利店连续记录了60天的饮料日销量,整理成频率分布如下:
从随机数表中依次取出随机数,映射为当天的模拟销量。假设连续10天的随机数为:73, 26, 04, 55, 88, 34, 62, 11, 91, 47,映射结果如下:
10天模拟总销量 = 310瓶,日均模拟销量 = 31瓶。如果将模拟延长到1000天,得到的平均销量会越来越接近理论期望值:
蒙特卡洛仿真的精度取决于模拟的次数。次数越多,统计结果越稳定,越接近真实分布。实际工程中通常至少模拟几百次,复杂系统需要上万次,现代计算机几秒钟就能完成。
蒙特卡洛仿真的核心操作,是把“均匀分布的随机数”转换成“符合实际分布的模拟值”。对离散型变量和连续型变量,映射方法略有不同。
离散变量的映射
离散变量的取值是有限个固定数值(如订货批次数、机器故障次数)。映射方法就是上一节演示的“区间法”:按照各取值的累积概率,将0~99的随机数段划分给各个取值。
以某仓库每周设备故障次数为例:
连续变量的映射
连续变量(如顾客到达间隔时间、订货提前期)服从某种连续型概率分布。常见的有均匀分布、指数分布、正态分布等,各自对应不同的映射公式。
以顾客到达间隔时间服从均匀分布为例,区间为 ([a, b]),随机数 (r)(取值0到1)对应的间隔时间为:
顾客到达间隔时间在5到15分钟之间均匀分布,随机数 (r = 0.63) 时:
对于指数分布(排队模型中最常用的到达间隔分布),均值为 (\mu),随机数 (r) 对应的仿真值为:
随机变量的分布类型需要通过历史数据拟合来确定,不能凭感觉直接假设为正态分布。分布类型选错了,仿真结果再精确也没有意义。
Excel 是构建小型蒙特卡洛仿真最直接的工具,不需要编程,只需要几个内置函数就能完成基本仿真。
关键函数说明
完整仿真示例:库存补货策略评估
某电子配件经销商评估两种补货策略,哪种的月均缺货量更少、总成本更低:
策略甲:库存降至20件时,订购50件(固定补货量,到货周期3天)
策略乙:库存降至20件时,订购80件(大批次、低频次)
日需求量服从正态分布,均值 (\mu = 15) 件,标准差 (\sigma = 4) 件,每件持有成本2元/天,每件缺货损失25元。
Excel 设置步骤:
第一步,在A列生成每日需求量:单元格A2输入公式 =NORM.INV(RAND(), 15, 4),下拉复制30行模拟一个月30天的需求。
第二步,在B列追踪每日期末库存(初始库存设为60件),逻辑为:期末库存 = max(前日库存 + 当日到货量 − 当日需求, 0)。
第三步,在C列记录每日缺货量:当日需求超过可用库存的差值部分,不足时记为0。
第四步,按 F9 键重新计算随机数,重复100次,每次记录当月总缺货量和总持有成本,保存到独立列中再统一汇总。
100次模拟结果对比(示例汇总数据):
策略甲总成本较低,但缺货风险明显更高;策略乙通过更大的安全库存将缺货压到可接受范围,代价是持有成本上升。若企业更看重客户服务水平(缺货会导致客户流失),策略乙更合适;若资金成本是主要压力,则策略甲更合适。这类权衡,正是仿真能量化呈现、而解析公式难以直接给出的。
用Excel做仿真,50次已能看出方向,200次以上结果趋于稳定。实际决策时,建议至少运行200次,将结果保存在独立列中(避免每次按F9覆盖),再统一计算均值、标准差和百分位数。
蒙特卡洛仿真每一轮模拟的是某个固定时间段内的整体结果(如一个月的总销量)。但有些系统更关心事件发生的具体时序——顾客什么时候到达、服务台什么时候空闲、下一个事件什么时候触发。这类情况,适合用离散事件仿真(Discrete Event Simulation,DES)处理。
DES 的核心思路:系统状态只在特定“事件”发生的时刻改变,事件之间系统状态保持不变。仿真引擎维护一张按时间排序的“事件表”,每次处理最近的事件,更新系统状态,并把新触发的事件插入事件队列继续排序等待。
以单服务台排队系统为例,DES 的推进过程如下:
DES 在工厂产线优化、机场值机系统设计、医院急诊流程分析中有大量实际应用。重点掌握蒙特卡洛仿真的操作逻辑,DES 了解基本原理即可。
仿真是在分析工具面对现实随机性力不从心时的有力补充。蒙特卡洛仿真将概率分布通过随机数转化为可重复模拟的运营场景,让“不确定性”从一个模糊的说法变成可以量化、可以比较的数字。
仿真方法通常适用于参数具有较大随机波动、系统结构复杂或需要对多种方案进行对比评估的场景。在进行蒙特卡洛仿真时,基本步骤包括:首先确定各关键变量的概率分布,其次为每个取值分配对应的随机数区间,然后生成随机数,并将其映射为相应的模拟值,最后重复上述过程并统计结果。对于离散型变量的映射,通常是根据累积概率,将随机数落入的区间对应到具体取值;对于连续型变量,常用的映射公式有:均匀分布下 (x = a + (b-a)r),指数分布下 (x = -\mu \ln(1-r)),其中 (r) 是[0,1)区间的随机数。
在Excel中构建蒙特卡洛仿真,可以利用 RAND() 函数产生随机数,用 NORM.INV() 或 VLOOKUP() 实现从概率分布到取值的转换,通过多次重复计算得到统计汇总结果。
离散事件仿真(DES)则是一种以事件为驱动、动态追踪系统状态随时间变化的方法,常用于分析排队系统和流程优化等问题。实际应用中,仿真技术可以用于库存备货策略的评估、服务台配置决策、以及修正项目完工概率等多方面决策支持。
接下来,分析视角将从“决策与优化”转向“过程监控与质量保障”——统计质量控制将用控制图等工具,持续检测生产或服务过程是否处于受控状态,为供应链质量管理提供定量依据。