BULLWHIP EFFECT · 供应链仿真实验台

牛鞭效应
实验台 · APS

多级供应链里,越往上,订单波动越被放大——这就是牛鞭效应。在这个浏览器实验台里,你可以亲手调整 供货延迟、信息共享、仓库容积等参数,看波动怎么被放大、库存怎么积压、订单满足率怎么变化, 用真实数据理解供应链的"蝴蝶效应"。

LadybugDB Wasm 引擎 Cypher 图查询 供应链结构:一条线 / 分叉树 / 多源头汇聚 补货策略:补货到顶 / 平滑 / 近视 / 恒定 产能水库 / 仓库容积 / 边切断 / 断供

Demo · Bullwhip Effect

顾客端的小抖动,到上游变成巨浪

五条波形是同一股需求信号:最下面的顾客需求几乎平稳,越往上游,订单波动越被放大——这就是牛鞭效应。

Animated · 悬停暂停
供应商订单制造商订单分销商订单零售商订单顾客需求BW 1.89BW 1.72BW 1.50BW 1.00基准时间(周)→波形示意合成 · 幅度按 BW 比例 · 数值同下方拓扑演示
Takeaway同一股需求,向上传递时波动逐级放大(BW 1.00 → 1.89)。想看真实计算?在下方实验台点「计算」出图。
011 · SCENARIOS

你想探索哪个场景?

不用从头调参数——挑一个贴近你的问题,系统会自动配好一套参数,进入实验台即可直接计算。

供应链经理

信息共享能帮我省多少钱?

我是饮料公司的供应链经理,上游动不动就缺货爆仓,想量化一下信息共享到底值不值。

后端实测:开启信息共享,波动从 1.89 倍 → 1.0 倍,订单满足率 93% → 100%
商学院学生

牛鞭效应是怎么产生的?

课本说"订单越传越抖",我想亲眼看清楚每一级供应链是怎么把波动一步步放大的。

后端实测:串行 4 级供应链,波动逐级放大到 1.89 倍(Supplier)
物流运营

供应链被冲断会怎样?

我是物流公司运营,想知道上游突然停供、仓库又放不下时,订单满足率会掉多少。

后端实测:Supplier 断供时波动飙到 3.86 倍,满足率跌至 82%
022 · HOW TO USE

三步玩转实验台

01

选一个场景

从上方三张卡片里挑一个贴近你的问题,参数已自动配好,也可以随时换成预设模板。

02

点"计算"看结果

LadybugDB Wasm 引擎在浏览器内跑完仿真,三张图 + 一句人话结论直接呈现。

03

调参再看变化

改"供货延迟""信息共享"等参数再点一次计算,看订单波动放大倍数怎么变。

033 · SUPPLY CHAIN STRUCTURE

供应链结构长什么样

一条线:供应商 → 制造商 → 经销商 → 零售商。越往上游,订单波动被放大得越厉害(节点色=BWR 状态,标签 BW 即波动放大倍数)。

样例链:Supplier → Manufacturer → Distributor → Retailer
边=物料流(LT=2 供货延迟);节点色=BWR 状态(绿<1.2 / 黄<2.5 / 红≥2.5)。
BWR<1.2BWR<2.5BWR≥2.5
LT=2LT=2LT=2SupplierBW=1.89 · FR=93%ManufacturerBW=1.72 · FR=90%DistributorBW=1.50 · FR=90%RetailerBW=1.00 · FR=92%
044 · APS DATA STRUCTURE

APS 数据结构(图 → 约束生成器)

APS 的核心数据全部是「图」:BOM 树、工艺路线、供应链网络、需求明细。图 = 约束生成器,CPLEX 在图上做 MIP 优化。

4.1 BOM 树(物料清单,Bill of Materials)

条件(输入)

成品→组件→子件的父子关系 + 每边用量系数 qty_per

结果(输出)

材料需求展开(BOM 爆炸):独立需求 × 沿路用量累乘 = 各层毛需求

图算法

树遍历、路径用量累乘、subgraph_isomorphism 找共享子件

BOM 树(成品 → 部件 → 子件,边=用量 qty_per)
×2×1×1×3×2成品 X部件 A部件 B子件 A1子件 A2子件 B1

4.2 工艺路线树(Routing / 工序)

条件(输入)

工序先后(precedence)+ 每工序 processing_time / 机器 / setup_time

结果(输出)

排程:工序最早开始/完工时间、关键路径、机器负载

图算法

topological_sort(工序排序)、critical path(最长 lead_time 路径)

工艺路线(工序先后 + 每序 processing_time)
备料pt=2车削pt=5热处理pt=3磨削pt=4装配pt=6质检pt=1

4.3 供应链网络树(Supply Chain Network)

条件(输入)

层级节点(lead_time / holding_cost / backorder_cost / capacity)+ 有向边(物料流)

结果(输出)

Bullwhip Effect BWR 逐层放大 / 库存放大 NSAmp / 缺货传播

图算法

链式 BWR、topological_sort、graph_signature、detect_drift_points

供应链网络树(节点=层级 BWR,边=物料流 lead_time)
LT=2LT=2LT=2RetailerBWR=1.00DistributorBWR=1.50ManufacturerBWR=1.72SupplierBWR=1.89

4.4 需求明细树(Demand Detail / MRP 展开)

条件(输入)

独立需求(MPS)+ BOM 结构

结果(输出)

相关需求(MRP):按 BOM 沿路展开到各层件,需求波动沿树放大

图算法

需求传播(自底向上汇总、自顶向下展开)

需求明细树(独立需求 → 相关需求,数量=用量累乘)
×2×1×1×3×2产品 X(独立需求 100)部件 A(×2 → 200)部件 B(×1 → 100)子件 A1(×1 → 200)子件 A2(×3 → 600)子件 B1(×2 → 200)
055 · CPLEX SOLVER

求解器:图 → 约束 → MIP 优化

图结构决策变量约束(由图生成)
BOM 树x_{ijt}:订单 i 在资源 j 时段 t 的生产量物料守恒:产量 × qty_per ≥ 下游组件消耗
工艺路线y_{ijt}:0/1 开工指示工序先后(precedence);每机器产能 Σ processing_time × x ≤ 可用
供应链网络I_{it}:库存;B_{it}:欠货库存平衡:I_t = I_{t-1} + 到货 - 需求 + B 调整
需求明细D_{it}:满足量需求满足 / 允许欠货上限 / 服务水平
目标:min 总成本 = 持有 + 缺货 + 换型 + 加班

流程:LadybugDB 存图 → 遍历图生成约束系数矩阵(MIP)→ CPLEX 分支定界+割平面求解 → 结果(计划/排程/库存)写回图。 图是约束生成器,CPLEX 是图上定义的 MIP 求解器。

066 · FAQ

常见问题

图①是各层级的订单波动放大倍数 / 库存积压 / 满足率;图②是每天的订单量时序——越往上游波动越大,就是牛鞭效应;图③是供应链结构,标出每一层的波动。

现在,亲手试一试

挑一个场景或直接进入实验台:调整供货延迟、信息共享、仓库容积等参数,用真实数据理解牛鞭效应

联系作者

研究结论(Phase2,静态摘要——互动版在「打开实验台」内)

阶段 2 门槛(稳态口径)

贡献 A:冷启动瞬态 vs 稳态机制效应

同一组数据:全时域口径 CUM_BWR=3.64(把冷启动瞬态误判为"信息共享残留"),warm-up ≥10 期后收敛到 ≈1.0。有限时域方差会把瞬态污染成机制效应——评估 Bullwhip Effect 必须用稳态口径。

贡献 B:Bullwhip Effect 的根源是"近视"而非"随机延迟"

参数扫描矩阵(lead_time × 安全系数 × 波动 × 拓扑 × 模式,315 格 × 50 runs)

预注册实验 A:严格对齐命题 4(φ~U(0,0.95) 每 run 重抽,T=1000/W=400/N=200)

判定 A:命题 4 成立,依赖 φ_i iid 同分布假设(双口径一致、单调递减、Welch 单侧 p<1e-6)。此前 315 格扫描的脆弱性是固定 φ + 短时域的测量伪影,非命题本身问题。