导读
:三维装箱问题是一类经典的组合优化问题,具有巨大的学习研究和实际应用价值。传统的三维装箱问题都是给定了箱子的尺寸并以最小化箱子的使用数量为优化目标,但是在某些实际业务场景中并没有固定尺寸的箱子。
基于此类场景,本文提出了一类新型的三维装箱问题。在本问题中,需要将若干个长方体物体逐个放入一个箱子中(物品的摆放位置不能倾斜),优化目标为最小化能够容纳所有物品的箱子的表面积,因为箱子的表面积与其成本直接正相关。本文证明了此类新问题为NP-hard问题。对于装箱问题,箱子的表面积取决于物品的放入顺序、摆放的空间位置和摆放朝向。在这些因素中,物品的放入顺序有着非常重要的影响。所以本文基于近些年被提出的、能够有效解决某些组合优化问题的深度强化学习方法—Pointer Network方法来优化物品的放入顺序。
本文基于大量实际业务数据对网络模型进行了训练和检验。结果表明,相对于已有的启发式算法,深度强化学习方法能够获得大约5%的效果提升。
论文地址:https://arxiv.org/abs/1708.05930
1. 引言
装箱问题是一类非常经典且重要的优化问题,常被应用于物流系统和生产系统中。装箱问题有很多变型问题,其中最重要且最难求解的是三维装箱问题,在此问题中,需要将若干个不同大小的长方体物品放入箱子中,物品之间不能重叠且不能倾斜,箱子的尺寸和成本已知,优化目标为最小化箱子的使用数量,即最小化总成本。装箱问题一直是学术界非常流行的研究方向之一。除此之外,装箱问题在实际中也有很多应用。有效的装箱算法往往意味着计算时间、装箱成本的大量节省和资源使用效率的大幅提升。
在某些实际业务场景中,我们发现装箱时并不是使用固定尺寸的箱子(例如在跨境电商业务中,大部分是使用柔性的塑料材料,而不是箱子来包装货物),而且由于装箱的成本大部分都由装箱材料成本构成,而装箱材料成本又主要取决于材料的表面积。所以在本研究中,我们提出了一类新型的装箱问题。与传统三维装箱问题不同的是,本问题的优化目标为确定一个能够容纳所有物品的箱子,并最小化此箱子的表面积。
由于寻找装箱问题的最优解非常难,所以相关研究者们提出了不同的近似算法和启发式算法来求解此类问题。但是启发式算法往往有着较强的问题依赖性,一类启发式算法可能只适用于求解某种或某些业务场景中的装箱问题。近些年来,人工智能技术,尤其是深度强化学习(Deep reinforcement learning, DRL)技术有着非常快速的发展,并且在某些问题上取得了令人瞩目的成果。而且深度强化学习技术已经被发现在求解组合优化问题方面具有较大的潜力,所以本研究使用了一种基于深度强化学习的方法来求解新型三维装箱问题。本文基于大量实际业务数据训练了深度强化学习模型,并验证了模型的效果。
2. 相关研究介绍
2.1 三维装箱问题相关研究
装箱问题是一类非常经典和流行的优化问题。自从其在20世纪70年代被提出以来,大量研究者对此类问题进行了研究并获得了许多有价值的成果。[Coffman
et al
., 1980]证明了二维装箱问题是NP-hard问题,所以作为二维装箱问题的一般化问题,三维装箱问题也是NP-hard问题。由于此原因,很多之前的研究都集中于近似算法和启发式算法。[Scheithauer, 1991]首先提出了针对三维装箱问题的近似算法并分析了其近似比。
此外,研究者们还提出了很多不同类型的启发式算法,例如禁忌搜索([Lodi
et al
.,2002], [Crainic
et al
., 2009]), 引导式局部搜索 ([Faroe
et al
., 2003]), 基于极点的启发式算法 ([Crainic
et al
., 2008]),混合遗传算法([Kang
et al
.,2012])等。在精确解算法方面,[Chen
et al
., 1995]考虑了一种有多种尺寸箱子的三维装箱问题,并建立一个混合整数规划模型来求解最优解。[Martello
et al
.,2000]提出了一种分支定界算法来求解三维装箱问题,并通过数值实验表明90个物品以内的问题都可以在合理的时间内获得最优解。
另外,还有一些从实际业务中提出的装箱问题的变型问题,例如[Kang and Park, 2003]提出了一种可变尺寸的装箱问题,[Khanafer
et al
.,2010], [Gendreau
et al
., 2004]研究了一种考虑物品冲突的装箱问题,[Clautiaux
et al
.,2014]对一种考虑易碎物品的装箱问题进行了研究。
另一类装箱问题—条带装箱问题(Strippacking problem)与本文提出的新问题比较接近。在一般的条带装箱问题中,若干个长方体物品需要被逐个放入一个给定的条带中,条带的长度和宽度是已知且固定的,长度为无穷大(在二维条带装箱问题中,条带的宽度固定,但是长度为无穷大),优化目标为最小化使用的条带的高度。此类问题在钢铁工业和纺织工业中有很多应用,研究者们也提出了不同类型的求解算法,例如精确解算法([Martello
et al
., 2003],[Kenmochi
et al
., 2009]),近似解算法([Steinberg, 1997]),启发式算法([Bortfeldt and Mack, 2007], [Bortfeldt, 2006], [Hopper andTurton, 2001])等。
2.2 DRL方法在组合优化问题中的应用研究
虽然机器学习和组合优化问题已经分别被研究了数十年,但是关于机器学习方法在求解组合优化问题方面的研究却比较少。其中的一个研究方向是使用强化学习的思想来设计超启发式算法。[Burke
et al
., 2013]在一篇关于超启发式算法的综述论文中对于一些基于学习机制的超启发式算法进行了讨论。[Nareyek, 2003]使用了一种基于非平稳强化学习的方法来更新启发式算法被选择的概率。除此之外,强化学习思想在超启发式算法中的应用研究还包括二元指数补偿([Remde
et al
.,2009])、禁忌搜索([Burke
et al
.,2003])和选择函数等([Cowling
et al
., 2000])。
近些年来,序列到序列模型(sequence-to-sequence)的一系列研究突破激发了研究者们对于神经组合优化(neural combinatorial optimization)方向的兴趣。其中注意机制(attention mechanism)对于加强神经网络模型在机器翻译([Bahdanau
et al
.,2014])和算法学习([Graves
et al
.,2014])方面的效果中扮演了重要决策。 [Vinyals
et al
., 2015]提出了一种带有特殊注意机制的网络模型—Pointer Net,并使用有监督学习的方法来通过此模型求解旅行商问题(Travelling Salesman Problem)。[Bello
et al
., 2016]提出了一种基于强化学习思想的神经组合优化(neural combinatorial optimization)框架,并使用此种框架求解了旅行商问题和背包问题(Knapsack Problem)。因为此种框架的有效性和普适性,本研究在求解新型装箱问题中主要使用了此种框架和方法。
3. 针对三维装箱问题的DRL方法
3.1 问题定义
在经典的三维装箱问题中,需要将若干个物品放入固定尺寸的箱子中,并最小化箱子的使用数量。与经典问题不同的是,本文提出的新型装箱问题的目标在于设计能够容纳一个订单中所有物品的箱子,并使箱子的表面积最小。在一些实际业务场景中,例如跨境电商中,包装物品时使用的是柔性的塑料材料,而且由于包装材料的成本与其表面积直接正相关,所以最小化箱子的表面积即意味着最小化包装成本。
本文提出的新型装箱问题的数学表达形式如下所示。给定一系列物品的集合,每个物品
i
都有各自的长(
li
)、宽(
wi
)和高(
hi
)。优化目标为寻找一个表面积最小且能够容纳所有物品的箱子。我们规定(
xi, yi,zi
)表示每一个物品的左下后(left-bottom-back)角的坐标,而且(0, 0, 0)表示箱子的左下后角的坐标。决策变量的符号及其含义如表1所示。基于以上问题描述和符号定义,新问题的数学表达形式为:
3.2 DRL方法
在本部分中,我们将介绍用于求解新型三维装箱问题的DRL方法。在求解三维装箱问题时,决策变量主要分为三类:
(1) 物品放入箱子的顺序;
(2) 物品在箱子中的摆放位置;
(3) 物品在箱子的摆放朝向。
我们首先设计了一种启发式算法来求解此类新型三维装箱问题。此种算法的基本思想为:在放入一个物品时,遍历所有可用的空余空间和物品朝向,并选择能够最小化表面积的组合。然后再遍历所有物品,确定一个能够最小化浪费空间体积(least waste space)的物品。算法的详细步骤请见附录。在本文中,我们使用DRL方法来优化物品的放入顺序,在确定了物品的放入顺序之后,选择物品的摆放位置和朝向时使用和以上启发式算法相同的方法。所以本研究的重点在于使用DRL方法来优化物品的放入顺序。在未来的研究中,我们将会把物品的放入顺序、摆放位置和朝向统一纳入深度强化学习方法框架中。
3.2.1 网络结构
本研究主要使用了[Vinyals
et al
.,2015]和[Bello
et al
.,2016]提出的神经网络结构。在Vinyals和Bello等人的研究中提出了一种名为Pointer Net (Ptr-Net)的神经网络来求解组合优化问题。例如,在求解旅行商问题时,二维平面中每个点的坐标被输入到网络模型中,经过计算之后,模型的输出为每个点被访问的顺序。这种网络结构与[Sutskever
et al
.,2014]提出的序列到序列模型非常相似,但是有两点不同:第一,在序列到序列模型中,每一步的预测目标的种类是固定的,但是在Ptr-Net中是可变的;第二,在序列到序列模型中,在解码阶段通过注意机制将编码阶段的隐层单元组合成为一个上下文向量信息,而在Ptr-Net中,通过注意机制来选择(指向)输入序列中的一个来作为输出。
本研究中使用的神经网络模型的结构如图1所示。网络的输入为需要装箱的物品的长宽高数据,输出为物品装箱的顺序。网络中包含了两个RNN模型:编码网络和解码网络。在编码网络的每一步中,首先对物品的长宽高数据进行嵌入表达(embedded),然后再输入到LSTM单元中,并获得对应的输出。在编码阶段的最后一步,将LSTM单元的状态和输出传递到解码网络。在解码网络的每一步中,在编码网络的输出中选择一个作为下一步的输入。如图1所示,在解码网络中的第3步的输出为4,则选择(指向)编码网络的第4步的输出,将其作为解码网络下一步(第4步)的输入。此外,在每一步的预测过程中还使用了[Bello
et al
., 2016]提出的Glimpse机制来整合编码阶段和解码阶段的输出信息。
图1 神经网络模型的结构
3.2.2 基于策略的强化学习方法
3.2.3 基准值的更新
在本研究中,我们使用了一种基于记忆重放的方法来不断地更新基准值。首先,对于每一个样本点
si
,通过启发式算法获取一个装箱方案,并计算其表面积,作为
b
(
si
)的初始值。之后在每一步的训练过程中,通过以下公式来更新基准值:
3.2.4 随机采样与集束搜索(Beam Search)
在模型的训练阶段,我们从模型预测的概率分布中进行随机选取作为输出。但是在验证阶段,我们采用贪婪策略来进行选择,即在每一步中,我们选取概率分布中概率最大的备选项作为输出。除此之外,我们还在验证阶段使用来集束搜索的方法来提高模型的效果,即在每一步中不是选择对应概率最高的备选项,而是选择概率最高的前
k
个备选项作为输出。
通过以上描述,模型的整个训练步骤总结为:
4. 数值实验
为了验证模型的效果,我们基于大量实际业务数据完成了数值实验。根据实验过程中每个订单中物品数量的不同(8,10和12),实验分为了三个部分,但是每次实验过程中的超参数均相同。在每次实验中,我们采用了15万条训练样本和15万条测试样本。在实验过程中,每批训练的样本量为128,LSTM的隐层单元的数量为128,Adam的初始学习速率为0.001,并且每5000步以0.96的比例衰减。网络模型的参数的初始值均从[-0.08, 0.08]中随机选取。为了防止梯度爆炸现象的出现,我们在训练过程中使用L2正则方法对梯度进行修剪。在更新基准值的过程中,的取值为0.7。在每次训练中,我们在Tesla M40 GPU上训练100万步,每次的训练时间大约为12小时。在验证阶段,使用集束搜索方法时,集束搜索的宽度为3。模型主要通过TensorFlow来实现。
数值实验的结果请见表2。主要评价指标为平均表面积(Average surface area, ASA).从表中可以看出,在使用集束搜索的情况下,本文提出的基于DRL的方法在三类测试集上分别可以获得大约4.89%, 4.88%, 5.33%的效果提升。此外,我们还通过穷举的方法获得了对于8个物品测试数据中5000个样本数据的最优物品放入顺序,并计算得到了启发式算法的结果与最优解的平均差距为10%左右,这说明基于DRL的方法的结果已经与最优解比较接近。
表2 不同方法下获得的ASA
5. 结论
本文提出了一类新型三维装箱问题。不同于传统的三维装箱问题,本文提出的问题的优化目标为最小化能够容纳所有物品的箱子的表面积。由于问题的复杂性和求解难度,此类问题非常难以获得最优解,而大部分启发式算法又缺乏普适性。所以本文尝试将Pointer Net框架和基于深度强化学习的方法应用到了对此类问题的优化求解中。本文基于大量实际数据对网络模型进行了训练和验证,数值实验的结果表明基于深度强化学习方法获得的结果显著好于已有的启发式算法。本项研究的主要贡献包括:第一,提出了一类新型的三维装箱问题;第二,将深度强化学习技术应用到了此类新问题的求解中。在之后的研究中将会深入探索更有效的网络模型和训练算法,并且会尝试将物品的摆放位置和朝向的选择整合到模型中。
A: 三维装箱问题的启发式算法
用于求解本文的新型三维装箱问题的启发式算法包括最小表面积(least surface area)算法和最小浪费空间(least wastespace)算法。算法的详细步骤如下所示:
B:关于新型三维装箱问题为NP-hard问题的证明
引理B.1: 本文提出的新型三维装箱问题为NP-hard问题。
关注「技术边城」把握前沿技术脉搏
6. 测试结果
1.
问题
描述
设有n个
物品
S和若干个容量为C的
箱子
B,n个
物品
的体积分别为{s1 ,s2 ,…, sn } ,且有 si ≤ C (1≤i≤n) ,
装箱
问题
(packing problem)把所有
物品
分别装入
箱子
,求占用
箱子
数最少的
装箱
方案。
问题
描述:一维经典
装箱
问题
可描述如下:S=(S1,S2,..Sn),其中0< Si ≤ 1, 称之为第i个物体的体积(或重量),1≤i≤n,现有n个容积(或载重量)为1 的
箱子
,要求如何设法将S1,S2,..Sn放入尽可能少的箱中。
装箱
问题
是NP
问题
,即在多项式时间内无法精确求解,一般采用近似算法,即启发式算法,这样可以迅速得到满意解,而不一定是最优解. 常见的算法:NF(Next Fit)近
if (pb->remainder >= goods[i].gv)/////////////////////////////能装下。///////////////分配货物节点单元。for (i = 0;i++)/////////////////遍历货物信息数组。}/////////////////////////////////////遍历
箱子
结束。if (pb==NULL)/////////////////////需要新
箱子
。////////////////////////////////////
装箱
。
一、
问题
描述
设给定N项
物品
, 大小为s1, s2, s3, …, sn, 每个
物品
的都不超过1; 现有大小为1的
箱子
若干个, 将
物品
装入
箱子
中, 尽量使用少的
箱子
装满所有
物品
;
现有一列
物品
:0.2, 0.5, 0.4, 0.7, 0.1, 0.3, 0.8;其中一种
装箱
方案如下所示:
装箱
问题
是一个NP完全
问题
, NP完全
问题
的最优解的时间复杂度不能是一个二项式的(通常NP
问题
的时间复杂度是指数型的);因此, 当获知这是一个NP完全
问题
, 就要考虑不纠结于求解其最优解,通常求解器近似解,并且近
<br /><br />
装箱
问题
也叫背包
问题
,简单来说,就是把小货物往大
箱子
里装,要如何才能装得多。个人常见的经历就是“装冰箱”,很有趣的现象就是常常感觉冰箱再也装不下了,但是经过一翻折腾之后又神奇的装下了。<br />从企业运作角度来看就是尽量让每个容器(仓库、车辆、集
装箱
、船等)装的尽量多,可以节约企业的费用。通常,装载率85%左右,使用
装箱
优化方法后,可以达到90~95%左右。海尔做过一个海运
装箱
的项目,节约了大量运费。日本的汽车企业也非常重视
装箱
问题
,他们海运过来的汽车零件箱内几乎每个角落都会被填满
最后得出状态转移方程:f[i][j]=min(f[i-1][j],f[i-1][j-v[i]]);现在从 n个
物品
中,任取若干个装入箱内(也可以不取),使
箱子
的剩余空间
最小
。有一个
箱子
容量为 V,同时有 n 个
物品
,每个
物品
有一个体积。接下来 n 行,每行有一个正整数,表示第 i 个
物品
的体积。共一行一个整数,表示
箱子
最小
剩余空间。第一行共一个整数 V,表示
箱子
容量。第二行共一个整数 n,表示
物品
总数。每个格
子
中填的是当前情况
最小
剩余空间。首先,我们要画个图来帮助理解。用行号 i 来遍历这n个
物品
。
常规的二维矩形
装箱
问题
只要求利用率尽可能大就可以了,但是在现实场景中,由于订单顺序等缘故,有一些
物品
需要优先于其他
物品
进行装载,这就诞生了本文要解决的“所以就引出了本文的主角:剩余空间法。经过测试,剩余空间法的求解效果在带顺序约束的二维矩形
装箱
问题
上可能优于天际线启发式算法。剩余空间法思路很简单:每放入一个矩形,就把空间按照下图的方式切成两部分剩余空间。每次放置矩形找到最合适的剩余空间放就行了。带顺序约束的二维矩形
装箱
问题
给定每个
物品
一定的权重,要求按照权重从大到小的顺序进行装载。这就涉及到评价规则了。
山东大学 赵一帆
问题
描述
在
箱子
装载
问题
中,有若干个容量为c的
箱子
和n个待装载入
箱子
中的
物品
。
物品
i需占s[i]个单元(0<s[i]≤c)。所谓成功装载(feasible packing),是指能把所有
物品
都装入
箱子
而不溢出,而最优装载(optimal packing)则是指使用了最少
箱子
的成功装载。
问题
分析
这道题目是算法课设发给我要求完成的题目,给了四种基本的算法,再加上avl树和竞赛树优化(竞赛树那部分我写的还是有点满意),后续我感觉可以用模拟退火来做一下,所以就搜集资料