交通 | NeurIPS论文:深度学习结合LKH启发式算法
这篇文章提出了一种解决旅行商问题的新算法——NeuroLKH算法,该算法结合了深度学习和强大的传统启发式算法LKH。NeuroLKH算法的创新在于训练了稀疏图网络(SGN),其中,有监督学习边得分(edge scores),无监督学习节点惩罚值(node penalties)。基于SGN的输出,NeuroLKH创建了边的候选集(edge candidate set),并转换边的距离值来指导LKH的
编者按
本次解读的文章是《结合深度学习模型与LKH启发式算法来解决旅行商问题》,标题原文为:《NeuroLKH: Combining Deep Learning Model with Lin-Kernighan-Helsgaun Heuristic for Solving the Traveling Salesman Problem》。这篇文章来源于南洋理工大学团队,发表于第35届NeurIPS会议。
摘要:
这篇文章提出了一种解决旅行商问题的新算法——NeuroLKH算法,该算法结合了深度学习和强大的传统启发式算法LKH。NeuroLKH算法的创新在于训练了稀疏图网络(SGN),其中,有监督学习边得分(edge scores),无监督学习节点惩罚值(node penalties)。基于SGN的输出,NeuroLKH创建了边的候选集(edge candidate set),并转换边的距离值来指导LKH的搜索过程。
实验证明,通过在广泛的问题规模上训练一个模型,NeuroLKH显著优于LKH,并能很好地推广到更大的规模。此外,这篇文章还证明了NeuroLKH可以应用于其他路由问题,如容量有限的车辆路由问题(CVRP)、提付货问题(PDP)和带有时间窗的CVRP(CVRPTW)。
1. 背景
旅行商问题(TSP)是一个重要的NP-hard组合优化问题,在各个领域具有广泛的工业应用。精确方法因有很大的计算复杂度,而不适合解决现实中的大规模问题;相比之下,尽管缺乏最优性保证和理论分析,但启发式求解器能在更小的计算复杂度下搜索到接近最优的解。
传统的启发式方法是基于专家知识手工设计的,通常是人工可解释的。然而,在深度学习技术发展的支持下,训练强大的深度神经网络可以从某些特定分布生成的TSP实例中学习复杂的模式。类似的工作不断提高了深度学习模型来解决TSP的性能,但这仍然比传统的强启发式求解器差得多,而且通常局限于相对较小的问题规模。作者认为基于学习的方法应与强大的传统启发式算法相结合,即在从数据样本中学习复杂模式的同时,有效利用研究人员高度优化的有效启发式算法。
**Lin-Kernighan-Helsgaun(LKH)算法通常被认为是解决TSP的一个非常强大的启发式算法,它是基于Lin-Kernighan(LK)启发式算法开发的。**它通过局部优化的方式来改进当前路径,以寻找更短的旅行路线。具体而言,LKH算法使用λ-opt移动来交换路径上的一定数量的边,以形成更短的路径。在算法中,通过创建边候选集限制搜索范围,通过α度量来指导搜索方向。此外,LKH算法还利用次梯度优化来优化节点惩罚值,进一步改善边候选集的质量。然而,LKH算法也存在一些不足之处。首先,边候选集的生成仍然依赖人工设计的规则,这可能限制了候选集的质量和搜索性能。其次,节点惩罚值的迭代优化过程非常耗时,尤其是在处理大规模问题时。另外,即使通过次梯度优化改善了α度量的质量,但生成树的敏感性分析仍可能错过一些关键模式,导致边候选集的质量无法达到极限。因此,边候选集的质量仍然有很大的提升空间。
为了解决上述问题,**这篇文章提出了NeuroLKH算法。**这是一种基于学习的方法,它结合了高效的LKH算法中的λ-opt局部搜索和稀疏图网络(SGN)。SGN同时输出边得分和节点惩罚值,并分别通过监督学习和无监督学习进行训练。NeuroLKH根据从训练实例中归纳学习到的节点惩罚值来转换边的距离,而不是为每个实例执行迭代优化,从而节省了大量时间。更重要的是,边得分同时用于创建边候选集,相比LKH创建的候选集,NeuroLKH创建的候选集明显更好。NeuroLKH在各种规模的TSP实例上训练一个单一的网络,并通过几分钟的无监督离线微调来适应更大规模的问题,调整不同规模的节点惩罚尺度。
2. 模型构建
NeuroLKH算法如上图1所示,它利用稀疏图网络(SGN)来学习特定分布中生成的TSP实例相关联的复杂模式。具体而言,网络将通过多任务训练过程同时学习边得分和节点惩罚值。边得分使用监督学习进行训练,用于创建边候选集,而节点惩罚值使用无监督学习进行训练,用于转换边距离。
下面将对稀疏图网络、训练过程和提出的NeuroLKH算法详细介绍。
2.1 稀疏图网络
对于稀疏图网络(SGN),这篇文章将TSP实例格式化为一个稀疏有向图 G* = (V, E*),其中包含节点集合 V 和一个稀疏的边集合 ,该集合仅包括每个节点指向的 γ γ γ个最短边,如图1中最左侧的绿色方框所示。其中,圆圈表示节点,菱形表示有向边。图的稀疏化对于在大规模TSP实例上有效训练深度学习模型并推广到更大的尺寸非常重要。需要注意的是,边(i, j)属于E并不意味着其相反方向的边(j, i)也属于E。节点输入 x v ∈ R 2 x_v \in R^2 xv∈R2 是节点坐标,而边输入 x e ∈ R x_e \in R xe∈R是边的距离。虽然作者关注的是具有欧几里得距离的二维TSP问题,但该模型也可以应用于其他类型的TSP问题。
SGN由以下两部分组成:1)将边和节点输入嵌入到对应的特征向量中的编码器,2)分别用于边得分和节点惩罚值的两个解码器。
编码器(Encoder)
编码器首先将节点输入 x v x_v xv和边缘输入 x e x_e xe分别线性投影到特征向量 v i 0 ∈ R D v^0_i \in R^D vi0∈RD和 e i , j 0 ∈ R D e^0_{i,j} \in R^D ei,j0∈RD中,其中D是特征维数,i∈V和(i,j)∈E*。然后将L个稀疏图卷积层嵌入节点和边缘特征,其正式定义如下:
a
t
t
n
i
,
j
l
=
e
x
p
(
W
a
l
e
i
,
j
l
−
1
)
÷
∑
(
i
.
m
)
∈
E
∗
e
x
p
(
W
n
l
e
i
,
m
l
−
1
)
(
1
)
attn^l_{i,j}=exp(W^l_ae^{l-1}_{i,j})\div\sum_{(i.m) \in E^*}exp(W^l_ne^{l-1}_{i,m}) (1)
attni,jl=exp(Walei,jl−1)÷(i.m)∈E∗∑exp(Wnlei,ml−1)(1)
v
i
l
=
v
i
l
−
1
+
R
e
L
U
(
B
N
(
W
s
l
v
i
l
−
1
+
∑
(
i
.
m
)
∈
E
∗
a
t
t
n
i
,
j
l
⊙
W
n
l
v
j
l
−
1
)
)
(
2
)
v^l_i=v^{l-1}_i+ReLU(BN(W^{l}_{s}v^{l-1}_{i}+\sum_{(i.m) \in E^*}attn^l_{i,j}\odot W^{l}_{n}v^{l-1}_{j})) (2)
vil=vil−1+ReLU(BN(Wslvil−1+(i.m)∈E∗∑attni,jl⊙Wnlvjl−1))(2)
r
i
,
j
l
=
{
W
r
l
e
j
,
i
l
−
1
,
i
f
(
j
,
i
)
∈
E
∗
W
r
l
p
l
o
t
h
e
r
w
i
s
e
(
3
)
r^{l}_{i,j}= \begin{cases} W^{l}_{r}e^{l-1}_{j,i} ,if(j,i)\in E^* \\ W^{l}_{r}p^{l} otherwise \end{cases} (3)
ri,jl={Wrlej,il−1,if(j,i)∈E∗Wrlplotherwise(3)
e
i
,
j
l
=
e
i
,
j
l
−
1
+
R
e
L
U
(
B
N
(
W
f
l
v
i
l
−
1
+
W
t
l
v
j
l
−
1
+
W
o
l
e
i
,
j
l
−
1
+
r
i
,
j
l
)
)
(
4
)
e^{l}_{i,j}=e^{l-1}_{i,j}+ReLU(BN(W^{l}_{f}v^{l-1}_{i}+W^{l}_{t}v^{l-1}_{j}+W^{l}_{o}e^{l-1}_{i,j}+r^{l}_{i,j})) (4)
ei,jl=ei,jl−1+ReLU(BN(Wflvil−1+Wtlvjl−1+Wolei,jl−1+ri,jl))(4)
其中, ⊙ \odot ⊙和 ÷ \div ÷分别表示元素级乘法和元素级除法; l = 1 , 2 , . . . , L l = 1, 2, ..., L l=1,2,...,L是层的索引;$W{l}_{a},W{l}{s},W{l}_{n},W{l}{r},W{l}_{f},W{l}{t},W^{l}{o} \in R^{D*D} $ 和 $p^{l} \in R^{D} $ 是可训练参数;方程(1)考虑元素注意力的;方程(2)和(4)中每个都包括一个Skip-Connection层和一个Batch Normalization层。由于输入图G∗是有向且稀疏的,具有不同方向的边被分别嵌入。设计(3)和(4)的动机是:边(i, j)的嵌入应该得益于知道其反向对应边(j, i)是否也在图中以及(j, i)的信息。
解码器(Decoders)
边解码器使用来自编码器的边嵌入 e i , j L e^{L}_{i,j} ei,jL,并通过两层线性投影以及ReLU激活将它们嵌入为 e i , j F e^{F}_{i,j} ei,jF。然后,边的分数 β i , j \beta_{i,j} βi,j被计算如下:
β
i
,
j
=
W
β
e
i
,
j
f
∑
(
i
.
m
)
∈
E
∗
e
x
p
(
W
β
e
i
,
m
f
)
(
5
)
\beta_{i,j}=\frac{W_\beta e^{f}_{i,j} }{\sum_{(i.m) \in E^*}exp(W_\beta e^{f}_{i,m} )} (5)
βi,j=∑(i.m)∈E∗exp(Wβei,mf)Wβei,jf(5)
类似地,节点解码器首先将节点嵌入
v
i
L
v^{L}_{i}
viL通过两层线性投影和ReLU激活嵌入为
v
i
f
v^{f}_{i}
vif。然后,节点惩罚项
π
i
\pi_{i}
πi被计算如下:
π i = C t a n h ( W π v i f ) ( 6 ) \pi_{i}=Ctanh(W_{\pi}v^{f}_{i}) (6) πi=Ctanh(Wπvif)(6)
其中,可训练参数 W β , W π ∈ R D ∗ 1 W_{\beta},W_{\pi}\in R^{D*1} Wβ,Wπ∈RD∗1;C = 10用于将节点惩罚项保持在[-10, 10]的范围内。
2.2 训练过程
文章使用监督学习训练网络来学习边得分。边的损失函数 L β \mathcal{L}_\beta Lβ的详细定义如下:
L β = − 1 γ ∣ V ∣ ∑ ( i , m ) ∈ E ∗ ( 1 { ( i , j ) ∈ E o ∗ } l o g β i , j + 1 { ( i , j ) ∉ E o ∗ } l o g ( 1 − β i , j ) ) ( 7 ) \mathcal{L}_\beta=-\frac{1}{\gamma|V|}\sum_{(i,m) \in E^*}(\mathbb{1}\{(i,j)\in E^*_o\}log\beta_{i,j}+\mathbb{1}\{(i,j)\notin E^*_o\}log(1-\beta_{i,j})) (7) Lβ=−γ∣V∣1(i,m)∈E∗∑(1{(i,j)∈Eo∗}logβi,j+1{(i,j)∈/Eo∗}log(1−βi,j))(7)
其中, E o ∗ = { ( i , j ) ∈ E ∗ ∣ ( i , j ) i n t h e o p t i m a l t o u r } E^*_o=\{(i,j)\in E^* | (i,j) in the optimal tour\} Eo∗={(i,j)∈E∗∣(i,j)intheoptimaltour},即如果边(i, j)属于最优路径,则增加其边得分 β i , j \beta_{i,j} βi,j,否则减小其得分。
节点惩罚项是通过无监督学习进行训练的。类似于LKH中次梯度优化的目标,文章试图将从TSP图G生成的最小树变换为所有节点都具有度为2的路径。与LKH的一个重要区别是,这篇文章学习的是一个TSP实例类别的模式,而不是针对特定TSP实例进行惩罚项的优化。节点损失函数
L
π
\mathcal{L}_\pi
Lπ的详细定义如下:
L
π
=
−
1
∣
V
∣
∑
i
∈
V
(
d
i
(
π
)
−
2
)
π
i
(
8
)
\mathcal{L}_\pi=-\frac{1}{|V|}\sum_{i \in V}(d_i(\pi)-2)\pi_i (8)
Lπ=−∣V∣1i∈V∑(di(π)−2)πi(8)
其中, d i ( π ) d_i(\pi) di(π) 是使用惩罚项 是使用惩罚项 是使用惩罚项 π = ( π 1 , . . . π ∣ V ∣ ) \pi=(\pi_1,...\pi_{|V|}) π=(π1,...π∣V∣)诱导的最小1-树 T π T_\pi Tπ中节点i的度。对于度大于2的节点,增加惩罚项;对于度小于2的节点,降低惩罚项。SGN被训练用于同时输出边得分和节点惩罚项,损失函数为 L = L β + η π L π \mathcal{L}=\mathcal{L}_\beta+\eta_\pi\mathcal{L}_\pi L=Lβ+ηπLπ,其中 η π \eta_\pi ηπ是平衡两个损失项的系数。
2.3 NeuroLKH 算法
使用NeuroLKH解决一个实例的过程如算法1所示。首先,将TSP实例转换为稀疏有向图 G ∗ G^∗ G∗。然后,SGN编码器将 G ∗ G^∗ G∗中的节点和边嵌入为特征嵌入,基于此解码器输出节点惩罚项 π \pi π和边得分 β \beta β。接下来,NeuroLKH创建强大的边候选集,并有效地转换每个边的距离,进一步指导NeuroLKH进行多次LKH试验以找到较好的解决方案。每个部分详细介绍如下。
转换边距离Transform Edge Distance
基于节点惩罚项 π i \pi_i πi,将原始边距离 s i , j s_{i,j} si,j转换为新的距离 c i , j = s i , j + π i + π j c_{i,j}=s_{i,j}+\pi_{i}+\pi_{j} ci,j=si,j+πi+πj,该距离将在搜索过程中使用。通过这种转换,最优解路径将保持不变。使用转换后的边距离计算的路径距离将减去$2\sum_{i \in V}\pi_i $以恢复原始TSP的路径距离。
创建边候选集Create Edge Candidate Set
对于每个节点 i ∈ V i\in V i∈V,对 ( i , j ) ∈ E ∗ (i,j)\in E^* (i,j)∈E∗,按照边得分 β i , j \beta_{i,j} βi,j进行排序,选择得分最高的k个边加入边候选集。较高得分的边在候选集中具有较高的优先级,在LKH搜索过程中首先尝试将其添加到交换中。需要注意的是,原始LKH和NeuroLKH都不能保证所有最优路径中的边都包含在边候选集中。然而,在多次试验中仍然有可能找到最优解。
LKH搜索试验LKH Searching Trials
为了解决一个TSP实例,LKH进行多次试验以寻找更好的解决方案。在每次试验中,随机初始化一个路径,并进行LKH搜索的迭代,直到路径无法通过λ-opt交换进一步改善。在每次迭代中,LKH按λ的升序进行λ-opt交换的搜索,以减小路径长度,一旦找到,就会应用这种交换。
基于训练好的SGN网络,NeuroLKH推断出边距离的转换和候选集,以指导LKH试验,这通过对模型执行前向计算来实现。这比原始LKH中对每个实例进行次梯度优化迭代直到收敛的过程要快得多,尤其是对于大规模问题,原始LKH的方法明显耗时。更重要的是,NeuroLKH不再使用基于敏感性分析的手工制作规则,而是通过强大的深度模型学习创建质量更高的边候选集,从而显著提高性能。
3. 对比实验
文章对不同规模的TSP问题进行了广泛的实验,并展示了NeuroLKH相对于基准算法的有效性。(代码可公开获取https://github.com/liangxinedu/NeuroLKH)
数据集分布Dataset distribution
在欧几里德距离空间中使用二维TSP实例进行实验,其中每个节点的两个坐标都是独立从单位均匀分布中生成的。这篇文章仅使用了包含101到500个节点的TSP实例来训练一个网络。由于训练期间的监督和反馈的数量与节点数成线性关系,作者在训练数据集中为每个大小为|V|的实例生成500000/|V|个实例,总共约为780000个实例。因此,在不同大小的问题上,监督和反馈的数量保持相似。此外,作者使用Concorde来获取用于边得分的监督训练的最优边 E o ∗ E^*_o Eo∗。对于测试,作者为每个测试问题大小生成1000个实例。
超参数Hyperparameters
文章选择从一个节点指向的有向边在稀疏边集 E ∗ E^* E∗中的数量 γ \gamma γ= 20,这样在训练数据集的 E ∗ E^* E∗中,仅有0.01%的最优路径中的边被忽略。网络的隐藏维度设置为D = 128,具有L = 30个稀疏图卷积层。损失函数中的节点惩罚系数 η π \eta_\pi ηπ= 1。使用Adam Optimizer 进行网络训练,学习率为0.0001,训练16个epoch,大约需要4天的时间。深度学习模型的训练和评估使用了一块RTX-2080Ti GPU。除了深度模型的NeuroLKH和其他基准算法的实验外(使用随机种子1234),其他实验都是在Intel® Core™ i9-10940X CPU上进行的,除非另有说明。LKH搜索过程的超参数与LKH在线提供的TSP示例脚本使用的参数是一致的。
3.1 TSP对比实验
将NeuroLKH与原始的LKH算法和最近提出的VSR-LKH算法进行了比较。具体为,先运行原始LKH进行1、10、100和1000次试验的LKH,并记录解决1000个实例的总时间;再在相同时间限制下,就解决相同的1000个实例的不同算法(NeuroLKH、VSR-LKH)进行公平比较。需要注意的是,NeuroLKH的求解时间是SGN在GPU上的推理时间和在CPU上的LKH搜索时间的总和。
训练规模比较
在表1中,作者报告了LKH、VSR-LKH和NeuroLKH在100、200和500个节点的三个测试数据集上的性能,这些数据集的规模在训练中使用的实例范围内。请注意,作者只在各种问题规模上训练了一个SGN网络,并在这里使用这三个规模来展示测试性能。如表中所示,NeuroLKH在不同问题大小和不同时间限制下明显且一贯地优于LKH和VSR-LKH。值得注意的是,对于大多数情况,最优性差距至少减少了一个数量级,这是一个显著的改进。
更大规模的泛化分析
为了评估NeuroLKH的泛化能力,作者就图中节点数量为1000、2000和5000的情况进行了测试。请注意,虽然SGN中的边得分可以直接泛化,但节点惩罚项很难直接泛化。这是因为它们是通过无监督训练的,SGN对于如何对更大的TSP实例惩罚节点没有任何知识。尽管如此,这可以通过简单的微调步骤解决。由于学到的节点嵌入非常强大,作者只微调SGN节点解码器中数量非常小的参数,并固定其他参数。具体而言,对于每个较大的问题规模,作者使用批量大小为5000/|V|对节点解码器进行100次迭代微调,对于1000、2000和5000个节点,每个规模的微调时间都不到一分钟。这种快速的微调过程是针对从分布中生成的TSP问题的一个规模而不是特定实例,可以看作是为大规模问题调整惩罚项的尺度。泛化结果总结在表2中。由于Concorde的运行时间过长,在这里作者没有运行它,因此最优性差距是相对于所有方法找到的最佳值。显然,NeuroLKH对更大的问题规模具有很好的泛化能力,并且在所有设置中,NeuroLKH相对于基线的改进是显著且一致的。
进一步讨论
对于100、200、500、1000、2000和5000个节点各自的1000个实例,NeuroLKH中SGN的推理时间分别为3s、6s、16s、33s、63s和208s,与节点数|V|近似成线性关系。相比之下,LKH和VSR-LKH中的次梯度优化需要20s、51s、266s、1028s、4501s和38970s,它们与|V|呈超线性增长,并且比SGN推理时间长得多,尤其是对于大规模问题。对于NeuroLKH,节省的时间用于进行更多的试验,这有效地有助于找到更好的解决方案。这种效果在时间限制较短的情况下更为明显。同时,对于时间限制较短,试验次数也较少的情况,算法只搜索了少量解决方案,此时边候选集的指导更为重要。基于这两个原因,NeuroLKH相对于基准算法在时间限制较短的情况下改进特别显著。这对于时间关键的应用和解决大规模问题非常有价值,因为大量试验不可行。
在图2中,作者绘制了LKH、VSR-LKH和NeuroLKH算法在解决不同节点数量的测试数据集时的性能随不同运行时间的变化情况(每次试验后的目标值结果)。时间限制设置为表1和表2中使用的最长时间限制,即LKH进行1000次试验的运行时间。显然,NeuroLKH在不同问题规模和不同时间限制下明显且一贯地优于LKH和VSR-LKH。特别地,NeuroLKH不仅能快速达到较好的解决方案,而且最终能收敛到更好的解决方案。在达到相同性能(即目标值)的情况下,NeuroLKH显著减少了计算时间。作者还可以得出结论,在时间限制较短的情况下,NeuroLKH相对于基准算法的改进尤为显著。此外,作者展示了次梯度优化对LKH和VSR-LKH的必要性。正如图2所展示的,如果没有次梯度优化(w/o SO),LKH和VSR-LKH的性能要差得多。令人印象深刻的是,即使忽略用于次梯度优化(对应LKH和VSR-LKH)的预处理时间(IPT)和稀疏图网络的推理时间(对应NeuroLKH),NeuroLKH仍然领先于LKH和VSR-LKH。请注意,这个比较对于NeuroLKH是不公平的,因为LKH和VSR-LKH消耗了更长的预处理时间,这是不可避免的。
在表1和表2中报告的结果中,几乎所有的NeuroLKH相对于LKH和VSR-LKH在不同大小和不同时间限制下的改进都具有超过99%的置信水平的统计显著性。唯一的例外是在具有100个节点的TSP问题上,以及LKH进行1000次试验的运行时间,对于这两种情况,改进的置信水平分别为90.5%和97.6%。
3.2 对其他路由问题的实验
在表3中,文章展示了NeuroLKH和原始LKH在训练中使用的最小和最大图大小(客户数量)以及更大的泛化规模测试数据集上的性能。作者使用LKH进行100、1000和10000次试验的求解时间作为时间限制。对于100次试验,两种方法都无法找到小于300个节点的PDP和CVRPTW测试实例的可行解的比例小于1%。每当出现这种情况时,作者将不可行的访问推迟到末尾,以获得可行的解。对于测试数据集中的1000个实例,SGN的推理时间分别为1s、3s、7s、10s、19s和40s,与LKH搜索过程相比,这只是一个极小的时间。如表3所示,NeuroLKH在三个问题上显著改善了解决方案的质量,而原始LKH已经是一个非常强大的启发式求解器,这展示了NeuroLKH处理各种类型路径规划问题的潜力。
4. 总结
这篇文章提出了一种利用深度学习模型与强大启发式算法相结合的方法来解决TSP问题的算法。具体而言,作者训练了一个稀疏图网络来预测边得分和节点惩罚项,用于生成边候选集和转换边距离。
通过广泛的实验可以看出,NeuroLKH在不同时间限制下相对于基准算法的改进是一致且显著的。同时,NeuroLKH也能够很好地解决具有较大规模和不同节点分布的问题。此外,作者还使用CVRP、PDP和CVRPTW问题来证明NeuroLKH有效地适用于其他路径规划问题。NeuroLKH可以有效地学习TSP的路线规律,并且在更大规模和不同节点分布的情况下具有良好的泛化能力。
然而,对于其他复杂的路径规划问题,如CVRP和CVRPTW,虽然NeuroLKH在更大规模上具有良好的泛化能力,但在没有训练的情况下,直接应用于其他需求分布和时间窗口分布的情况下较难泛化,这是NeuroLKH的局限性,需要进一步研究。此外,NeuroLKH还可以与其他基于学习的技术(如稀疏化TSP图)和其他强大的传统算法(如混合遗传搜索)相结合。
参考文献:
Xin L, Song W, Cao Z, et al. NeuroLKH: Combining deep learning model with Lin-Kernighan-Helsgaun heuristic for solving the traveling salesman problem[J]. Advances in Neural Information Processing Systems, 2021, 34: 7472-7483.
更多推荐
所有评论(0)