三维装箱问题在电商业务中有重要应用, 例如订单打包和商品装车. 下面我们列举一些电商业务中可能用到的三维装箱问题.

基本概念

首先我们把问题分为两类:

  • 判定问题(Decision Problem). 这类问题的答案只有两种: .
  • 优化问题(Optimiation Problem). 这类问题一般有一个优化目标, 问题的最优解使得目标达到最优.

为了方便描述, 我们先介绍一些术语和假设.

物品

物品有两种类型:

  • 普通物品(Item). 它是长方体且无弹性. 用长宽高来描述普通物品的尺寸.
  • 柔性物品(Soft Item). 它有java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem种尺寸, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_02. 要求所有尺寸对应的体积相同, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_03, java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_04. 普通物品可以看成是只有一种尺寸的柔性物品.

箱子

箱子有两种类型:

  • 盒子(Box). 它是长方体的表面, 且无弹性. 用长宽高来描述盒子的尺寸.
  • 袋子(Bag). 它是高度为零的长方体表面. 用长和宽描述袋子的尺寸. 此外, 袋子是柔软的. 换句话说它可以变形成盒子, 要求其表面积等于袋子的表面积, 且水平和垂直方向的周长不超过袋子在水平和垂直方向上的周长. 设袋子的长和宽分别为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_05java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_06, 它变形成的盒子的长宽高分别是java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_07. 因此我们要求:
    java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_08

装箱

我们说物品集合java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_09能被装入盒子当且仅当:

  1. java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_10中所有物品都在盒子的内部;
  2. java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_10中任意两个物品不相交.

装袋

我们说物品集合java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_09能被装入袋子当且仅当存在一个由袋子形变的盒子能装入java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_09中所有物品.

判定问题

3D装盒-单盒 (Three-dimensional box packing with single box)

输入. 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_14的盒子和java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品. 物品的长宽高分别是java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_16, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17且允许90度旋转.
问题. 物品是否可以被全部装入盒中?

3D装盒-单盒-柔性物品 (Three-dimensional box packing with single box and soft items)

输入. 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_14的盒子和java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个柔性物品, 其中每个柔性物品java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_20java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_21种尺寸, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_22, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17. 允许物品90度旋转.
问题. 柔性物品是否可以被全部装入盒中?

3D装袋-单袋 (Three-dimensional bag packing with single bag)

输入. 长宽为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_24的袋子; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品, 其长宽高是java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_16, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17. 物品允许90度旋转.
问题. 物品是否可以被全部装入袋中?

3D装袋-单袋-柔性物品 (Three-dimensional bag packing with single bag and soft items)

输入. 长宽为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_24的袋子; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品, 其中每个物品java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_20java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_21种尺寸, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_22, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17. 物品允许90度旋转.
问题. 柔性物品是否可以被全部装入袋中?

优化问题

3D装盒-单盒 (Three-dimensional box packing with single box)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个盒子, 其长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_35, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品, 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_16, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17. 物品允许90度旋转.
问题. 找一个成本最低的盒子使得它能装下所有商品, 否则返回不存在.

3D装盒-单盒-柔性物品 (Three-dimensional box packing with single box and soft items)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个盒子, 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_35, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品, 其中每个物品java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_20java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_21种尺寸, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_22, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17. 物品允许90度旋转.
问题. 找一个成本最低的盒子使得它能装下所有柔性物品, 否则返回不存在.

3D装盒-多盒 (Three-dimensional box packing with mutiple boxes)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个盒子, 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_35, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品, 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_16, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17; 总成本java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57. 物品允许90度旋转.
问题 找一些盒子使得它们能装下所有物品且总成本不超过java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57, 否则返回不存在.

3D装盒-多盒-柔性物品 (Three-dimensional box packing with multiple boxes and soft items)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个盒子, 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_35, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个柔性物品, 其中每个柔性物品java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_20java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_21种尺寸, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_22, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17; 总成本java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57. 物品允许90度旋转.
问题. 找一些盒子使得它们能装下所有柔性物品且总成本不超过java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57, 否则返回不存在.

3D装袋-单袋 (Three-dimensional bag packing with single bag)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个袋子, 长宽为java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_71, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品, 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_16, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17. 物品允许90度旋转.
问题. 找一个成本最低的袋子使得它能装下所有物品, 否则返回不存在.

3D装袋-单袋-柔性物品 (Three-dimensional bag packing with single bag and soft items)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个袋子, 长宽为java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_71, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个柔性物品, 其中每个物品java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_20java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_21种尺寸, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_22, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17. 物品允许90度旋转.
问题. 找一个成本最低的袋子使得它能装下所有物品, 否则返回不存在.

3D装袋-多袋 (Three-dimensional bag packing with multiple bags)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个袋子, 长宽为java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_71, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个物品, 长宽高为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_16, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17; 总成本java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57. 物品允许90度旋转.
问题. 找一些袋子使得它们能装下所有物品且总成本不超过java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57, 否则返回不存在.

3D装袋-多袋-柔性物品 (hree-dimensional bag packing with multiple bags and soft items)

输入. java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_34个袋子, 长宽为java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_71, 成本为java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_36, java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_37; java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_15个柔性物品, 其中每个物品java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_20java算法 实现 三维装箱 贪婪算法 三维装箱问题_宽高_21种尺寸, 即java算法 实现 三维装箱 贪婪算法 三维装箱问题_3D_22, java算法 实现 三维装箱 贪婪算法 三维装箱问题_java算法 实现 三维装箱 贪婪算法_17; 总成本java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57. 物品允许90度旋转.
问题. 找一些袋子使得它们能装下所有柔性物品且总成本不超过java算法 实现 三维装箱 贪婪算法 三维装箱问题_Problem_57, 否则返回不存在.