三维装箱问题在电商业务中有重要应用, 例如订单打包和商品装车. 下面我们列举一些电商业务中可能用到的三维装箱问题.
基本概念
首先我们把问题分为两类:
- 判定问题(Decision Problem). 这类问题的答案只有两种: 是 或 否.
- 优化问题(Optimiation Problem). 这类问题一般有一个优化目标, 问题的最优解使得目标达到最优.
为了方便描述, 我们先介绍一些术语和假设.
物品
物品有两种类型:
- 普通物品(Item). 它是长方体且无弹性. 用长宽高来描述普通物品的尺寸.
- 柔性物品(Soft Item). 它有
种尺寸, 即
. 要求所有尺寸对应的体积相同, 即
,
. 普通物品可以看成是只有一种尺寸的柔性物品.
箱子
箱子有两种类型:
- 盒子(Box). 它是长方体的表面, 且无弹性. 用长宽高来描述盒子的尺寸.
- 袋子(Bag). 它是高度为零的长方体表面. 用长和宽描述袋子的尺寸. 此外, 袋子是柔软的. 换句话说它可以变形成盒子, 要求其表面积等于袋子的表面积, 且水平和垂直方向的周长不超过袋子在水平和垂直方向上的周长. 设袋子的长和宽分别为
和
, 它变形成的盒子的长宽高分别是
. 因此我们要求:
装箱
我们说物品集合能被装入盒子当且仅当:
中所有物品都在盒子的内部;
中任意两个物品不相交.
装袋
我们说物品集合能被装入袋子当且仅当存在一个由袋子形变的盒子能装入
中所有物品.
判定问题
3D装盒-单盒 (Three-dimensional box packing with single box)
输入. 长宽高为
的盒子和
个物品. 物品的长宽高分别是
,
且允许90度旋转.
问题. 物品是否可以被全部装入盒中?
3D装盒-单盒-柔性物品 (Three-dimensional box packing with single box and soft items)
输入. 长宽高为
的盒子和
个柔性物品, 其中每个柔性物品
有
种尺寸, 即
,
. 允许物品90度旋转.
问题. 柔性物品是否可以被全部装入盒中?
3D装袋-单袋 (Three-dimensional bag packing with single bag)
输入. 长宽为
的袋子;
个物品, 其长宽高是
,
. 物品允许90度旋转.
问题. 物品是否可以被全部装入袋中?
3D装袋-单袋-柔性物品 (Three-dimensional bag packing with single bag and soft items)
输入. 长宽为
的袋子;
个物品, 其中每个物品
有
种尺寸, 即
,
. 物品允许90度旋转.
问题. 柔性物品是否可以被全部装入袋中?
优化问题
3D装盒-单盒 (Three-dimensional box packing with single box)
输入.
个盒子, 其长宽高为
, 成本为
,
;
个物品, 长宽高为
,
. 物品允许90度旋转.
问题. 找一个成本最低的盒子使得它能装下所有商品, 否则返回不存在.
3D装盒-单盒-柔性物品 (Three-dimensional box packing with single box and soft items)
输入.
个盒子, 长宽高为
, 成本为
,
;
个物品, 其中每个物品
有
种尺寸, 即
,
. 物品允许90度旋转.
问题. 找一个成本最低的盒子使得它能装下所有柔性物品, 否则返回不存在.
3D装盒-多盒 (Three-dimensional box packing with mutiple boxes)
输入.
个盒子, 长宽高为
, 成本为
,
;
个物品, 长宽高为
,
; 总成本
. 物品允许90度旋转.
问题 找一些盒子使得它们能装下所有物品且总成本不超过, 否则返回不存在.
3D装盒-多盒-柔性物品 (Three-dimensional box packing with multiple boxes and soft items)
输入.
个盒子, 长宽高为
, 成本为
,
;
个柔性物品, 其中每个柔性物品
有
种尺寸, 即
,
; 总成本
. 物品允许90度旋转.
问题. 找一些盒子使得它们能装下所有柔性物品且总成本不超过, 否则返回不存在.
3D装袋-单袋 (Three-dimensional bag packing with single bag)
输入.
个袋子, 长宽为
, 成本为
,
;
个物品, 长宽高为
,
. 物品允许90度旋转.
问题. 找一个成本最低的袋子使得它能装下所有物品, 否则返回不存在.
3D装袋-单袋-柔性物品 (Three-dimensional bag packing with single bag and soft items)
输入.
个袋子, 长宽为
, 成本为
,
;
个柔性物品, 其中每个物品
有
种尺寸, 即
,
. 物品允许90度旋转.
问题. 找一个成本最低的袋子使得它能装下所有物品, 否则返回不存在.
3D装袋-多袋 (Three-dimensional bag packing with multiple bags)
输入.
个袋子, 长宽为
, 成本为
,
;
个物品, 长宽高为
,
; 总成本
. 物品允许90度旋转.
问题. 找一些袋子使得它们能装下所有物品且总成本不超过, 否则返回不存在.
3D装袋-多袋-柔性物品 (hree-dimensional bag packing with multiple bags and soft items)
输入.
个袋子, 长宽为
, 成本为
,
;
个柔性物品, 其中每个物品
有
种尺寸, 即
,
; 总成本
. 物品允许90度旋转.
问题. 找一些袋子使得它们能装下所有柔性物品且总成本不超过, 否则返回不存在.