3. EOQ 基本公式:年总成本函数、最优订货量 Q* 与订货周期 T

经济订货批量(EOQ)模型的核心在于平衡订货成本与持有成本。本章将系统推导年总成本函数,并基于该函数求解最优订货量 Q* 与最优订货周期 T,为后续库存参数配置奠定数学基础。

3.1 年总成本函数(TC)的构成

在 EOQ 基本假设下(需求连续、恒定;提前期为零;不允许缺货),年总成本由三个部分构成:

  • 年采购成本:\( D \times P \),其中 \( D \) 为年需求量,\( P \) 为单价。该部分为固定成本,与订货批量无关。
  • 年订货成本:\( \frac{D}{Q} \times S \),其中 \( Q \) 为订货批量,\( S \) 为单次订货成本。订货次数随 \( Q \) 增大而减少。
  • 年持有成本:\( \frac{Q}{2} \times H \),其中 \( H \) 为单位商品年持有成本。平均库存为 \( Q/2 \),持有成本随 \( Q \) 增大而增加。

因此,年总成本函数为:

年总成本 TC(Q) = D × P + (D/Q) × S + (Q/2) × H

其中:D = 年需求量(件/年);P = 单位采购成本(元/件);S = 单次订货成本(元/次);H = 单位年持有成本(元/件·年);Q = 订货批量(件)。

由于 \( D \times P \) 为常数,不影响最优解,实际优化时通常只关注可变成本部分:

可变成本 VC(Q) = (D/Q) × S + (Q/2) × H

3.2 最优订货量 Q* 的推导

对可变成本函数求导并令导数为零,可求得使总成本最小的订货批量:

  1. 对 VC(Q) 求导:\( \frac{d(VC)}{dQ} = -\frac{D \times S}{Q^2} + \frac{H}{2} \)
  2. 令导数为零:\( -\frac{D \times S}{Q^2} + \frac{H}{2} = 0 \)
  3. 整理得:\( \frac{D \times S}{Q^2} = \frac{H}{2} \)
  4. 解得:\( Q^* = \sqrt{\frac{2 \times D \times S}{H}} \)

关键洞察:最优订货量 Q* 出现在年订货成本等于年持有成本的点上。此时,\( (D/Q^*) \times S = (Q^*/2) \times H \)。这一平衡点是 EOQ 模型的核心特征。

代入 Q* 可得到最小年总成本(不含采购成本):

TC_min = D × P + √(2 × D × S × H)

3.3 订货周期 T 的确定

订货周期 T 表示两次订货之间的时间间隔。在需求率恒定的条件下,T 由最优订货量 Q* 与年需求量 D 共同决定:

T = Q* / D(年)

若转换为天数(按年工作日 365 天计):

T(天)= (Q* / D) × 365

订货周期 T 与 Q* 成正比,与年需求量 D 成反比。需求越大的商品,订货周期越短,补货频率越高。

3.4 参数关系与敏感性分析

参数变化 对 Q* 的影响 对 T 的影响 对 TC_min 的影响
年需求量 D ↑ Q* 增大(平方根关系) T 缩短 TC_min 增大
订货成本 S ↑ Q* 增大 T 延长 TC_min 增大
持有成本 H ↑ Q* 减小 T 缩短 TC_min 增大
采购成本 P ↑ 无影响 无影响 TC_min 线性增大

工程注意:EOQ 模型对参数误差的敏感性不对称。当实际订货量在 Q* 附近 ±20% 波动时,总成本增加通常不超过 2%。但当参数估计偏差超过 50% 时,成本上升将显著加速。因此,参数校准比精确计算更重要。

3.5 EOQ 成本曲线与最优解可视化

下图展示了年总成本函数中各项成本随订货批量 Q 的变化趋势,以及最优订货量 Q* 的位置:

EOQ 成本曲线与最优订货量 Q* 订货批量 Q(件) 年成本(元) 0 Q* 2Q* 持有成本 订货成本 总成本 Q* 订货成本 = 持有成本 注:Q* 处订货成本与持有成本相等,总成本达到最小值。偏离 Q* 越远,总成本上升越快。

3.6 计算示例与代码实现

案例数据:某 SKU 年需求量 D = 12,000 件,单次订货成本 S = 300 元,单位年持有成本 H = 10 元/件·年,单价 P = 50 元。

手工计算:

  • Q* = √(2 × 12,000 × 300 / 10) = √720,000 ≈ 848.53 件(取整为 849 件)
  • T = 849 / 12,000 ≈ 0.07075 年 ≈ 25.8 天
  • TC_min = 12,000 × 50 + √(2 × 12,000 × 300 × 10) = 600,000 + 8,485.28 = 608,485.28 元

Python 计算函数:

import math

def eoq_calc(D, S, H, P):
    """
    计算 EOQ 模型核心参数
    :param D: 年需求量(件)
    :param S: 单次订货成本(元)
    :param H: 单位年持有成本(元/件·年)
    :param P: 单位采购成本(元/件)
    :return: 字典包含 Q_star, T_year, T_days, TC_min
    """
    Q_star = math.sqrt(2 * D * S / H)
    T_year = Q_star / D
    T_days = T_year * 365
    TC_min = D * P + math.sqrt(2 * D * S * H)
    return {
        "Q_star": round(Q_star, 2),
        "T_year": round(T_year, 4),
        "T_days": round(T_days, 1),
        "TC_min": round(TC_min, 2)
    }

# 示例调用
result = eoq_calc(D=12000, S=300, H=10, P=50)
print(result)
# 输出: {'Q_star': 848.53, 'T_year': 0.0707, 'T_days': 25.8, 'TC_min': 608485.28}

3.7 订货周期与补货节奏

订货周期 T 决定了库存补货的节奏。在实际工程中,T 通常需要与企业的采购日历对齐:

  • 周补货:T ≈ 7 天,适用于高周转、低持有成本的快消品。
  • 双周补货:T ≈ 14 天,适用于中等周转的常规物料。
  • 月补货:T ≈ 30 天,适用于低周转、高持有成本或供应商有最小起订量的物料。
  • 季补货:T ≈ 90 天,适用于长提前期、高订货成本的战略物料。

当理论 T 与采购周期不匹配时,建议优先调整持有成本 H 或订货成本 S 的估算值,使 Q* 落在可执行的补货周期附近,而非强行取整。

工程经验:在库存优化项目中,建议将理论 Q* 作为初始值,然后根据实际补货周期(周/双周/月)进行微调。调整幅度在 ±20% 以内时,总成本损失通常可忽略不计。

下图展示了不同订货周期对应的补货节奏与库存水平变化:

不同订货周期下的补货节奏对比 周补货(T=7天) 订货量:Q* ≈ 230 件 年订货次数:52 次 平均库存:115 件 适用:高周转快消品 双周补货(T=14天) 订货量:Q* ≈ 460 件 年订货次数:26 次 平均库存:230 件 适用:中等周转物料 月补货(T=30天) 订货量:Q* ≈ 986 件 年订货次数:12 次 平均库存:493 件 适用:低周转/高订货成本 补货周期选择原则 1. 理论 T 与采购日历对齐:优先选择周/双周/月等标准周期 2. 调整幅度控制:实际 Q 与理论 Q* 偏差 ≤ 20% 时成本损失可忽略 3. 多 SKU 合并:同供应商、同周期的 SKU 可合并下单,降低总订货成本 4. 动态调整:当需求或成本参数发生显著变化时,需重新计算 Q* 和 T 5. 系统集成:将 Q* 和 T 作为 ERP/库存系统的默认参数,定期校准

3.8 本章小结