引言
出库管理是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%
优化方案:
- 引入波次拣货(按时间)
- ABC分类:A类商品播种式,B/C类商品摘果式
- 路径优化:Z型路径 + TSP算法
优化后:
- 拣货效率:150单/小时/人(提升87.5%)
- 拣货准确率:99.8%(提升1.3%)
- 人力成本:节省30%
7. 总结
波次拣货核心要点:
- 波次策略:按时间/目的地/优先级
- 拣货模式:摘果式 vs 播种式 vs 边拣边分
- 路径优化:S型 → Z型 → TSP最优路径
- 复核验证:扫描+称重双重验证
下一篇预告:库存管理:精准控制与实时同步
版权声明:本文为原创文章,转载请注明出处。