Research on Hybrid Algorithms for 3D Packing Problem Based on Heuristic Algorithm and Genetic Algorithm
In the three-dimensional packing problem, both heuristic algorithms and genetic algorithms can effectively solve the problem. Based on the heuristic algorithm for generating placeable points and the genetic algorithm, this paper integrated the two algorithms into a new hybrid algorithm for the three-dimensional packing problem. The new hybrid algorithm was tested by real data in the application, and its loading rate was stable and had increased compared to the original traditional algorithm. Especially for cases with multiple types of goods, the advantages of the hybrid algorithm were more obvious.
Placeable Points
三维装箱问题(3D Packing Problem),指的是在一个三维容器(如长方体)中,将多个不同形状、不同大小的物体(如立方体、长方体等)装载到其中,使得物体占用的体积最小,且不允许重叠或悬浮。该问题在物流和运输领域中是一个常见的优化问题,其目的是通过优化装箱策略,来提高装载效率、降低运输成本和提高物流效率。三维装箱问题是一个NP难度问题,意味着其时间复杂度会随着问题规模的增大而急剧增加,通常需要使用启发式算法
关于三维装箱,国内外学者们进行了许多探索研究。张钧和贺可太提出了一种新的混合算法,它将遗传算法、三空间分割启发式算法以及模拟退火算法糅合起来,可以较好地解决货物数量较多的多集装箱装载问题
本文在之前的学者们研究的基础上,结合生成可放置点的启发式算法和遗传算法优化装箱算法得到一种混合算法,该混合算法得到的装载率相对传统装载方法来说有一定的提升。
本文研究的三维装箱问题是:给定长宽高固定的集装箱和若干种货物,货物具有的属性是长、宽、高、重量、数量等。在进行货物装载的过程中,要求在一定的约束条件下将集装箱的体积进行最大化的利用。三维装箱问题的数学模型进行如下的建立:
1) 货物装载容器为集装箱,建立集装箱三维模型:长(L)、宽(W)、高(H)为1190 cm、235 cm、268 cm,容积大约为75立方米。取集装箱左后角为坐标轴中心0点,建立三维直角坐标系,x轴对应集装箱的长,y轴对应集装箱的宽,z轴对应集装箱的高,如
2) 根据货物的具体属性建立货物三维模型,货物具有长、宽、高、重量、数量等属性。
3) 目标函数。目标函数为集装箱的装载率最优:
(1)
其中, 为箱子的装载率,i为货物号, 为第i号货物的体积,V为集装箱的体积。
4) 容积约束。装入集装箱的所有货物的体积和不能大于集装箱的体积。
(2)
5) 位置约束。在货物装载过程中,三个维度的坐标都需要满足以下约束:
(3)
在对三维装箱问题的数学模型进行假设和建立后,进一步研究三维装箱问题的求解算法。
在装载过程中,使用四个点来表示一个货物的空间位置,如
在货物装载过程中,以集装箱的长L作为x轴,以集装箱的宽W作为y轴,以集装箱的高H作为z轴,建立三维坐标系,每当装载一个货物,生成三个可放置点,即点(top, right, front),在下一个货物进行装载时,可以进行方向的选择,然后完成装载。针对三个可放置点,可以设置三个列表,分别是x轴方向的可放置点列表:长度列表;y轴方向的可放置点列表:宽度列表;z轴方向的可放置点列表:高度列表。这三个可放置点列表用于下一个货物的装载。初始状态时,集装箱为空,此时只存在一个可放置点,即坐标原点(0, 0, 0),装载第一个货物,然后将该货物的front、right、top三个点存储在三个可放置点列表中。装载完第一个货物之后,剩余的货物装载按照先沿z轴方向装载,后沿着y轴方向装载,再沿着x轴方向装载的顺序进行货物的装载:
1) 先从第一个货物的上方(即沿z轴方向)开始装载,形成一个竖排,直到该竖排的上方无法再装入下一个货物为止,z轴方向装载如
2) 然后从第一个箱子的右方(即沿y轴方向)开始装载,并且每一竖排按照z轴方向的装载方式构造出第二竖排、第三竖排,以此类推,直到该竖排的右方无法再装入下一个货物为止,此时构造出了一个类似yOz平面的货品墙,y轴方向装载如
3) 在y轴方向的装载结束后,从
在货物装载过程中,要满足货物需要完全包含在集装箱中的约束、货物不能悬空的约束、货物之间不能重叠的约束等,所以需要对货物的合法性进行判断。
对于需要进行装载的货物,必须在集装箱内部,不能超出集装箱范围。假设该货物内部有一点(a, b, c),要满足上述约束,则需要添加以下判断的条件:
且 (4)
对于之后要装载的货物,它所对应的top、right、front点将有可能和其他箱子发生重叠的情况,所以在进行下一步装载时,需要判断货物的这三点是否合法。以top点为例来判断是否重叠,如
如
设计遗传算法编码(即基因序列)由三部分组成,分别是货物的装载顺序、货物的旋转状态、该条基因序列对应的装载率。
1) 货物的装载顺序
用数字对所有的货物进行1……n的编号,并生成初始的货物装载的顺序。
2) 货物的旋转状态
在录入货物信息时,会对货物的放置状态如
根据不同的放置方式,对应编码为0、1、2、3、4、5,如
3) 该条基因序列对应的装载率
用编码序列的第 个数表示当前基因序列(当前装载方案)下的装载率,便于后期进行统计和比较。本文中的编码表示如下所示:
(5)
放置方式 | 编码方式 | 编码 | X轴 | Y轴 | Z轴 |
正放(H为高) | 方式0 | RT_LWH = 0 | L | W | H |
方式1 | RT_WLH = 1 | W | L | H | |
侧放(W为高) | 方式2 | RT_LHW = 2 | L | H | W |
方式3 | RT_HLW = 3 | H | L | W | |
侧放(L为高) | 方式4 | RT_WHL = 4 | W | H | L |
方式5 | RT_HWL = 5 | H | W | L |
可以通过轮盘赌模型选择适应度较高的基因序列。
1) 选择算子
① 计算出群体中每条基因序列的适应度:
(6)
其中, 是每条基因序列的适应度,即该条基因序列对应的装载率,sizepop为种群数量。
② 计算每个个体(即每条基因序列)被遗传到下一代群体中的概率,用 表示:
(7)
③ 计算每个个体(即每条基因序列)的累积概率:
(8)
④ 在[0, 1]区间内产生伪随机数r。
⑤ 若 ,则选择个体1,否则选择个体k,使得 成立。
⑥ 重复④、⑤操作共sizepop次,其中sizepop为种群大小。
通过多次的轮盘赌算法,对种群进行选择,选出所需要的染色体基因序列。
2) 交叉算子
对编码后的基因序列进行交叉。在交叉操作中,采取均匀交叉算子和部分映射交叉相结合的方式,所谓均匀交叉就是以同样的交叉概率对两个配对个体的基因都进行交换,这样两个新个体同时产生。均匀交叉示意图如
部分映射交叉是两条亲代染色体在交叉位点之间的部分基因进行交换,交叉点是随机选取的。然后固定交换的部分不变,将染色体中未交换的部分进行一一分析,假如出现了与互换部分重叠的基因时,就把重叠的基因全部改为不互换的基因,这样进行下去,直至在各段染色体组型中,均不含有重叠的基因。部分交叉映射的例子如
3) 变异算子
为了防止求解过程中陷入局部最优解,需要对个体进行变异,其中变异概率为Pm。对于 之间的基因,采用顺序逆转变异的方式,即将该段基因的序列逆序赋值,对于 之间的序列,在旋转放置方式可允许的范围内进行变异操作。
基于生成可放置点的启发式算法和遗传算法的混合算法求解装载率最大的三维装箱问题的流程图如
经过启发式算法和遗传算法的混合算法进行迭代后,最终可以在有限时间内找到一个最优装载方案。
测试数据中货物种类分为三类:纯纸箱/纯木箱类、混装类和纯托类货物。这里以实际集装箱货物数据为基础对混合算法进行测试,测试数据的典型实例如
通过8组货物实例数据进行测试运行,得到的结果如
序号 | 品名 | 装箱位置 | 码放要求 | 包装类别 | 件数 | 单件毛重(KG) | 长(cm) | 宽(cm) | 高(cm) |
1 | 物品1 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 17 | 16.00 | 32.00 | 46.00 | 33.00 |
2 | 物品2 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 14 | 16.00 | 51.00 | 47.00 | 35.00 |
3 | 物品3 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 40 | 19.00 | 55.00 | 41.00 | 45.00 |
4 | 物品4 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 10 | 17.00 | 56.00 | 40.00 | 40.00 |
5 | 物品5 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 30 | 23.00 | 64.00 | 40.00 | 23.50 |
6 | 物品6 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 10 | 16.00 | 47.50 | 38.00 | 27.50 |
7 | 物品7 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 25 | 21.50 | 46.00 | 27.00 | 35.00 |
8 | 物品8 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 150 | 18.50 | 43.00 | 37.00 | 11.00 |
…… | …… | …… | …… | …… | …… | …… | …… | …… | …… |
49 | 物品1 | 2-无要求 | 正放&侧放&立放 | 1-纸箱 | 100.00 | 12.80 | 43.00 | 37.00 | 11.00 |
序号 | 品名 | 装箱位置 | 码放要求 | 包装类别 | 件数 | 单件毛重(KG) | 长(cm) | 宽(cm) | 高(cm) |
1 | 物品1 | 2-无要求 | 正放 | 木箱 | 1 | 808.33 | 170 | 120 | 147 |
2 | 物品2 | 2-无要求 | 正放 | 木箱 | 1 | 808.33 | 203 | 148 | 136 |
3 | 物品3 | 2-无要求 | 正放 | 托盘 | 1 | 460.00 | 100 | 85 | 114 |
4 | 物品4 | 2-无要求 | 正放&侧放&立放 | 纸箱 | 41 | 30.59 | 36 | 26 | 16 |
5 | 物品5 | 2-无要求 | 正放&侧放&立放 | 纸箱 | 20 | 30.59 | 85 | 50 | 20 |
6 | 物品6 | 2-无要求 | 正放 | 木箱 | 1 | 377.50 | 108 | 88 | 71 |
7 | 物品7 | 2-无要求 | 正放&侧放&立放 | 纸箱 | 736 | 16.03 | 49 | 32 | 23 |
8 | 物品8 | 2-无要求 | 正放&侧放&立放 | 纸箱 | 31 | 13.59 | 46 | 35 | 17 |
…… | …… | …… | …… | …… | …… | …… | …… | …… | …… |
21 | 物品21 | 2-无要求 | 正放&侧放&立放 | 纸箱 | 50 | 13.59 | 40 | 30 | 21 |
序号 | 品名 | 装箱位置 | 码放要求 | 包装类别 | 件数 | 单件毛重(KG) | 长(cm) | 宽(cm) | 高(cm) |
1 | 物品1 | 2-无要求 | 正放 | 托盘 | 16 | 32.00 | 52.00 | 29.00 | 28.00 |
2 | 物品2 | 2-无要求 | 正放 | 托盘 | 1 | 445.00 | 86.00 | 84.00 | 107.00 |
3 | 物品3 | 2-无要求 | 正放 | 托盘 | 1 | 445.00 | 255.00 | 104.00 | 184.00 |
4 | 物品4 | 2-无要求 | 正放 | 托盘 | 1 | 126.00 | 133.00 | 69.00 | 164.00 |
5 | 物品5 | 2-无要求 | 正放 | 托盘 | 98 | 13.00 | 40.00 | 28.00 | 42.00 |
6 | 物品6 | 2-无要求 | 正放 | 托盘 | 61 | 13.00 | 53.00 | 33.00 | 48.00 |
7 | 物品7 | 2-无要求 | 正放 | 托盘 | 20 | 13.00 | 53.00 | 37.00 | 48.00 |
8 | 物品8 | 2-无要求 | 正放 | 托盘 | 213 | 13.00 | 49.00 | 39.00 | 50.00 |
…… | …… | …… | ……. | …… | …… | …… | …… | …… | …… |
15 | 物品15 | 2-无要求 | 正放 | 托盘 | 1 | 705.00 | 188.00 | 103.00 | 122.00 |
实例数据 | 货物数量 | 物品种类 | 所属类别 | 目标装载率 | 传统启发式算法装载率 | 混合算法装载率 |
货物实例1 | 1648 | 1 | 1-纯纸箱、木箱类 | 90% | 91% | 91% |
货物实例2 | 1502 | 49 | 1-纯纸箱、木箱类 | 90% | 85% | 92% |
货物实例3 | 3588 | 1 | 1-纯纸箱、木箱类 | 90% | 91% | 93% |
货物实例4 | 1175 | 21 | 2-托散混装类 | 88% | 83% | 89% |
货物实例5 | 650 | 26 | 2-托散混装类 | 88% | 85% | 90% |
货物实例6 | 658 | 32 | 2-托散混装类 | 88% | 78% | 89% |
货物实例7 | 133 | 28 | 3-纯托类 | 73% | 57% | 78% |
货物实例8 | 756 | 15 | 3-纯托类 | 73% | 84% | 82% |
通过上述结果分析可以看到,大多数情况下混合算法在装载率上是优于其他方法的,尤其是在货物规格种类较多的真实装箱情况下,混合算法的优势会更加明显。
本文中研究的混合装箱算法中,用基于生成可放置点的启发式算法来减少装载过程中集装箱的空间浪费,同时,在启发式算法的基础上用遗传算法来寻找最优值,二者相互补充,让装载方案的整个过程更加简洁、算法运行效率更高,使得装载率能够得到更进一步的提升。
国家自然基金(62076028)支持;促进高校分类发展——“青年骨干教师”支持计划支持。