引言

出库管理是WMS的核心业务,直接影响订单时效和客户满意度。本文重点讲解波次拣货这一关键技术,以及如何通过路径优化提升拣货效率。


1. 出库业务全景

1.1 出库流程

OMS下发订单 → 库存校验 → 库存锁定 → 波次生成
→ 任务分配 → 拣货执行 → 复核验证 → 打包发货

2. 波次拣货:效率提升的关键

2.1 为什么需要波次拣货?

传统模式:单订单拣货(Pick by Order)

订单1: SKU-A × 1 → 拣货员走到A区 → 拣1件 → 回到打包区
订单2: SKU-A × 1 → 拣货员走到A区 → 拣1件 → 回到打包区
订单3: SKU-B × 1 → 拣货员走到B区 → 拣1件 → 回到打包区

问题:拣货员重复跑动,效率低下

波次模式:批量拣货(Pick by Wave)

波次1: 合并10个订单
  SKU-A: 5件(订单1, 2, 5, 7, 9)
  SKU-B: 3件(订单3, 4, 8)
  SKU-C: 2件(订单6, 10)

拣货员: 一次走完A→B→C区 → 拣齐所有商品 → 回到打包区

优势:减少80%的行走距离,效率提升3-5倍


2.2 波次生成策略

1. 按时间波次

  • 策略:每小时/每2小时生成一个波次
  • 适用:订单量稳定的仓库
  • 示例:
    • 10:00-11:00订单 → 波次1
    • 11:00-12:00订单 → 波次2

2. 按目的地波次

  • 策略:同一城市的订单合并
  • 适用:跨城市配送
  • 优势:降低物流成本

3. 按优先级波次

  • 策略:VIP订单优先打波次
  • 适用:有优先级区分的业务
  • 示例:
    • VIP订单 → 优先波次
    • 普通订单 → 常规波次

4. 按SKU重合度波次

  • 策略:SKU重叠多的订单合并
  • 适用:电商仓库
  • 算法:计算订单相似度,聚类分组

2.3 波次生成算法

简化版算法(按时间+数量)

def generate_wave(orders, max_wave_size=100):
    """
    生成波次
    :param orders: 订单列表
    :param max_wave_size: 每个波次最大订单数
    :return: 波次列表
    """
    # 按创建时间排序
    orders.sort(key=lambda o: o.created_at)

    waves = []
    current_wave = []

    for order in orders:
        current_wave.append(order)

        # 达到波次上限,生成新波次
        if len(current_wave) >= max_wave_size:
            waves.append(current_wave)
            current_wave = []

    # 最后一个波次
    if current_wave:
        waves.append(current_wave)

    return waves

3. 拣货模式

3.1 摘果式拣货(Pick to Order)

定义:拣货员按订单拣货,每次处理一个订单

流程

订单1: SKU-A × 1, SKU-B × 2, SKU-C × 1
拣货员: A区拣1件 → B区拣2件 → C区拣1件 → 打包

适用场景

  • 订单量少(<100单/小时)
  • SKU种类多(>1000种)
  • 订单SKU数少(1-3件/单)

优缺点

  • ✅ 操作简单,不易出错
  • ✅ 不需要二次分拣
  • ❌ 效率低,重复行走

3.2 播种式拣货(Pick to Light / Put to Light)

定义:先批量拣货,再分配到各订单

流程

步骤1: 批量拣货
  SKU-A: 10件(用于10个订单)
  SKU-B: 15件(用于15个订单)

步骤2: 播种分拣
  订单1: SKU-A × 1, SKU-B × 2
  订单2: SKU-A × 1, SKU-B × 1
  ...

适用场景

  • 订单量大(>500单/小时)
  • SKU种类少(<500种)
  • 订单SKU重叠度高

优缺点

  • ✅ 效率高,减少行走
  • ✅ 适合大促场景(双11)
  • ❌ 需要二次分拣,操作复杂
  • ❌ 需要播种墙设备

3.3 边拣边分(Pick and Sort)

定义:拣货和分拣同步进行

流程

拣货员拿着10个订单的容器
每拣一件商品,立即扫描放入对应订单容器

适用场景

  • 中等订单量(100-500单/小时)
  • 订单SKU数适中(3-10件/单)

4. 拣货路径优化

4.1 S型路径

入口 ─→ 排1 ─→ 排2 ─→ 排3 ─→ 出口
       ↓      ↓      ↓
      拣货   拣货   拣货

特点

  • 按货架顺序拣货
  • 简单易执行
  • 不是最短路径

4.2 Z型路径

入口 ─→ 排1(有货) ─→ 拣货 ─→ 排3(有货) ─→ 出口
       跳过排2(无货)

特点

  • 跳过无货货架
  • 比S型路径更优
  • 适合稀疏拣货

4.3 最短路径算法(TSP问题)

问题定义:拣货员需要拣20个库位的商品,如何规划最短路径?

算法

from scipy.spatial.distance import cdist
from python_tsp.exact import solve_tsp_dynamic_programming

def optimize_pick_path(locations):
    """
    优化拣货路径(旅行商问题TSP)
    :param locations: 库位坐标列表 [(x1,y1), (x2,y2), ...]
    :return: 最优路径
    """
    # 计算距离矩阵
    distance_matrix = cdist(locations, locations, metric='euclidean')

    # 求解TSP
    path, distance = solve_tsp_dynamic_programming(distance_matrix)

    return path, distance

实际案例

  • 原始路径距离:500米
  • 优化后距离:320米
  • 效率提升:36%

5. 复核与打包

5.1 复核流程

1. 扫描复核

RF终端:
  扫描订单号 → 显示应拣SKU列表
  扫描商品条码 → 系统校验SKU
  全部扫描完成 → 复核通过

2. 称重复核

系统计算标准重量:
  SKU-A: 200g × 1 = 200g
  SKU-B: 150g × 2 = 300g
  包装: 50g
  总重: 550g

实际称重: 548g
误差: 2g < 5g(允许误差)✓

5.2 打包规则

1. 单品打包

  • 1个订单 = 1个包裹

2. 合并打包

  • 同一客户多个订单合并

3. 拆分打包

  • 超大订单拆分多个包裹

6. 实战案例:京东仓库的拣货优化

优化前

  • 拣货模式:摘果式
  • 拣货效率:80单/小时/人
  • 拣货准确率:98.5%

优化方案

  1. 引入波次拣货(按时间)
  2. ABC分类:A类商品播种式,B/C类商品摘果式
  3. 路径优化:Z型路径 + TSP算法

优化后

  • 拣货效率:150单/小时/人(提升87.5%)
  • 拣货准确率:99.8%(提升1.3%)
  • 人力成本:节省30%

7. 总结

波次拣货核心要点

  1. 波次策略:按时间/目的地/优先级
  2. 拣货模式:摘果式 vs 播种式 vs 边拣边分
  3. 路径优化:S型 → Z型 → TSP最优路径
  4. 复核验证:扫描+称重双重验证

下一篇预告:库存管理:精准控制与实时同步


版权声明:本文为原创文章,转载请注明出处。