装柜不是一道数学题,而是多目标优化 + 物理约束的综合题。装一个 12 米长的集装箱,要把 6 种 SKU 共 54 个托盘摆进去,必须同时满足:
装柜方案助手采用 保守的完整支撑货物栈模型,不生成悬空或跨箱搭接。这一点很关键——很多装柜软件为了"装得多"会做悬空,但实际运输会侧倾。
核心思路:逐层放货物,每放一件,搜索下一个候选位置。
def generate_candidates(container, placed_items, cargo_type):
"""生成下一个货物的候选位置"""
candidates = []
for x in grid_x_positions(container, cargo_type):
for y in grid_y_positions(container, cargo_type):
for z in [next_layer_z(placed_items, x, y)]:
for rotation in cargo_type.allowed_rotations:
pos = Placement(x, y, z, rotation)
if validate_physics(container, placed_items, pos):
candidates.append(pos)
return candidates
所有候选位置都要过校验:
def validate_physics(container, placed, new):
return all([
inside_container(container, new), # 边界
no_collision(placed, new), # 碰撞
full_support(placed, new), # 完整支撑(关键)
top_load_safe(placed, new), # 顶部承重
allowed_orientation(new), # 朝向约束
])
一个求解产出 3 个方案,每个方案目标函数不同:
| 方案 | 目标函数 | 实测数据(6 SKU 54 托) |
|---|---|---|
| 高装载率 | 最大化体积利用率 | 左右偏差 9.56%,上层空白 2.24 m² |
| 重心稳妥 | 最小化左右 + 前后偏差 | 左右偏差 1.78%,上层空白 4.71 m² |
| 易操作 | 最小化 SKU 切换数 | 左右偏差 6.32%,步骤数优先压缩 |
布局生成后,输出三视图供人工核对:
算法给的方案不一定 100% 满足现场约束(包装强度、固定方式、叉车可达性),所以必须有"人工调整"能力:
6 SKU 54 托实测求解时长 7.88 秒(含三方案),30 SKU 1295 件 1.5 秒,5000 件 5.6 秒。看似很快,但每一次搜索都在 O(n!) 量级的组合空间里找可行解。
业界常用的算法:
同一个订单,三套方案核心指标对比(来源:装柜方案助手 2026-09-19 离线评测):
| 指标 | 高装载率 | 重心稳妥 | 易操作 |
|---|---|---|---|
| 装入件数 | 54 | 54 | 54 |
| 最小支撑率 | 100% | 100% | 100% |
| 左右偏差 | 9.56% | 1.78% | 6.32% |
| 上层最大空白 | 2.24 m² | 4.71 m² | 2.37 m² |
| 装载步骤 | 13 | 13 | 13 |
上面这些不是 PPT,是装柜方案助手的真实运行结果。任何人都能用它免费复现: