Neural Large Neighborhood Search for the Capacitated Vehicle Routing Problem

摘要

学习如何自动解决优化问题有可能为优化技术提供下一个重大飞跃。 近年来,自动学习启发式算法在路由问题上的性能一直在稳步提高,但纯粹基于机器学习的方法仍然优于最先进的优化方法。 为了缩小这一性能差距,我们提出了一种新颖的大型邻域搜索 (LNS) 框架,用于车辆路线规划,该框架集成了用于生成新解决方案的启发式方法。 学习机制基于具有注意力机制的深度神经网络,并且专门设计用于集成到 LNS 搜索设置中。 我们评估了我们在有能力的车辆路由问题(CVRP)和拆分交付车辆路由问题(SDVRP)上的方法。 在拥有多达 297 个客户的 CVRP 实例上,我们的方法明显优于仅使用手工启发式方法和文献中众所周知的启发式方法的 LNS。 此外,我们针对 CVRP 和 SDVRP 表明,我们的方法超越了现有机器学习方法的性能,并接近最先进优化方法的性能。

引言

机器学习领域的最新进展使神经网络能够学习如何执行各种任务。 在优化领域,人们对使用深度强化学习自动学习优化问题的启发式方法越来越感兴趣。 特别是对于实际应用,自动生成足够好的启发式算法非常有趣,因为与开发手工启发式算法相关的成本(就劳动力而言)并不总是值得性能提升。 虽然在自动学习启发式算法方面取得了成功,在某些问题上优于最先进的技术,例如容器预编组 [11],但许多问题已证明对于学习启发式算法来说极其困难。
路径问题,例如旅行商问题(TSP)和车辆路径问题(VRP),是实践中最广泛解决的优化问题之一。 然而,问题表示的高度可变的大小长期以来使得基于机器学习的方法的应用变得困难。 先进的深度学习模型架构的引入,例如指针网络 [31],现在可以处理输入数据的可变长度序列,使得机器学习方法在路由问题中的应用变得可行。
已经提出了几种学习如何解决路由问题的方法,但即使是最新的方法也无法胜过最先进的优化技术。 这种性能差距可以部分通过基于机器学习的方法的简单搜索策略来解释,例如,采样 [17] 或波束搜索 (BS) [19]。 为了解决这个问题,我们建议将学到的启发式方法整合到更高级别的元启发式方法中。 我们为 VRP 开发了一个大型邻域搜索 (LNS) 元启发式算法,该算法学习启发式算法以修复不完整的解决方案,并利用它们来指导解决方案空间中的搜索。 请注意,开发的元启发式不包含任何专门为某个路由问题开发的组件。 与以前的方法一样,我们的方法自己学习解决一类问题实例所需的复杂启发式方法。
在这项工作中,我们专注于有能力的车辆路由问题(CVRP)和相关的拆分交付车辆路由问题(SDVRP)。 CVRP 是由 [7] 引入的,是优化文献中研究最多的问题之一。 问题实例由完全无向图 G = (V, E) 描述,其中 V = {v0, …, vk}。 节点 v0 代表仓库,所有其他节点代表客户。 每个客户都有一个需求 di 并且从节点 vi 到 vj 的旅行成本由 c¯ij 给出。 有一个车队可用,每个车辆的容量为 Q。 任务是以最小的成本找到一组路线(都在车站开始和结束),以便满足所有客户的需求,并且每个客户都只有一个人访问 车辆。 SDVRP 与 CVRP 的不同之处仅在于客户可以被多辆车访问(即,一次交付可以拆分为多次交付)。 我们考虑距离矩阵服从三角不等式的 CVRP 和 SDVRP 版本。
我们提出了一种称为神经大型邻域搜索 (NLNS) 的新方法,它将学习到的启发式方法集成到复杂的高级搜索过程中。 NLNS 基于大型邻域搜索 (LNS),这是一种元启发式方法,通过迭代地将破坏和修复运算符应用于起始解决方案来探索所有可能解决方案的空间。 我们实现了两个简单的销毁程序,可以应用于任何路由问题。 修复被破坏的(即不完整的)解决方案的复杂得多的任务留给了通过策略梯度强化学习训练的深度神经网络。 出于多种原因,我们选择 LNS 作为我们方法的基础。 首先,LNS 提供了一个简单的框架来通过其破坏和修复范式来学习邻域函数。 其次,修复问题的复杂性主要与实例大小无关,这使我们能够处理比以前的方法大得多的问题实例。 最后,LNS 已成功应用于大量优化问题,包括许多路由问题(例如,[21])。 我们在一组不同的 CVRP 上评估 NLNS和 SDVRP 实例。 我们表明,NLNS 使用文献中的手工修复算子提供了对 LNS 的显着改进。 此外,NLNS 显着优于现有的机器学习方法,并且接近或匹配最先进的优化方法的性能。
这项工作的贡献如下: 1. 我们开发了一个 LNS,它依赖于学习的启发式来探索解决方案的邻域。 我们的方法经过专门调整,可以从 GPU 的并行计算能力中受益。
2. 我们为 VRP 提出了一种新的神经网络模型,该模型具有用于完成不完整解决方案的注意力机制。
本文组织如下。 首先,我们讨论使用基于机器学习的方法来解决路由问题的相关工作。
然后我们介绍了 NLNS 方法以及新的神经网络模型。 最后,我们在 CVRP 和 SDVRP 实例上评估 NLNS,并将其与最先进的优化和机器学习方法进行比较。

2相关工作

[10] 描述了神经网络在组合优化问题中的第一个应用,其中使用 Hopfield 网络计算 TSP 的解决方案。 尽管这一早期应用前景广阔,但由于引入了新的神经网络架构,基于学习的方法直到最近才成为传统优化方法的有力竞争者。 [31] 中引入的指针网络使用注意机制来学习给定输入序列排列的条件概率(例如,TSP 实例的客户排列)。 作者使用监督学习训练他们的模型来解决多达 50 个客户的 TSP 实例。 在推理过程中,使用了波束搜索,他们报告了具有多达 30 个客户的 TSP 实例的有希望的结果。 该想法由 [3] 扩展,其中使用 actor-critic 强化学习训练指针网络。 作者报告说,与基于监督学习的方法相比,具有 50 和 100 个客户的 TSP 实例的性能有所提高。
已经为 TSP 提出了许多其他方法。 在 [14] 中,提出了一种图嵌入网络,它学习了一种逐步构建解决方案的贪婪启发式算法。 图神经网络在 [20] 中与波束搜索(波束宽度大小为 40)一起用于生成度量 TSP 的解决方案。 该网络通过监督学习进行训练,报告的性能比指针模型的性能略差。 [13] 为多 TSP 提出了另一种基于监督学习的方法。 作者使用置换不变池网络结合波束搜索来生成解决方案。 图注意力网络 [28] 通过强化学习在 [8] 中进行训练,为 TSP 构建解决方案,并在后续步骤中通过 2-OPT 本地搜索进行改进。 在 [12] 中,图卷积网络 [5] 用于生成边邻接矩阵,描述边在 TSP 解决方案中出现的概率。 事后波束搜索用于将边缘概率转换为有效解决方案。
迄今为止,只有少数基于深度学习的方法考虑了 VRP。 在 [19] 中,提出了一个模型,该模型使用注意机制和循环神经网络 (RNN) 解码器为 CVRP 和 SDVRP 构建解决方案。 与指针模型相反,所提出的模型对输入的顺序(即客户的顺序)是不变的。 此外,该模型可以有效地处理动态输入元素(例如,一旦访问了客户,客户需求就会发生变化)。 作者使用类似于 [3] 的 actor-critic 强化学习方法,并使用波束宽度高达 10 的波束搜索来搜索好的解决方案。 与 NLNS 相比,解决方案是使用顺序方法构建的,其中客户 上一步访问过的客户始终连接到下一步中的另一个客户。 这允许 RNN 解码器学习一种解码策略,该策略将先前解码步骤的输出考虑在内。 在 NLNS 中,修复了不完整的解决方案,并且解决方案的当前状态不仅仅取决于在之前的修复步骤中做出的决定。 因此,我们没有在我们的模型中使用 RNN。
在 [17] 中使用了类似于 [8] 的图注意力网络,并通过强化学习进行训练,以生成针对不同路由问题的解决方案,包括 TSP、CVRP 和 SDVRP。 作者使用基于确定性贪婪 rollout 的基线的策略梯度强化学习来训练他们的模型。 与我们的方法相反,图注意力网络使用一个复杂的基于注意力的编码器,它创建一个完整实例的嵌入,然后在解决方案生成过程中使用。 我们的模型只考虑与修复损坏的解决方案相关的实例部分,而不使用单独的编码器。 [17] 中采用的搜索程序并行采样给定实例的多个解决方案,并返回最佳解决方案。
在并行工作中,在 LNS 设置中使用神经网络来解决打车服务中遇到的路由问题 [25]。 所采用的网络通过监督学习进行训练,其输入数据由复杂的领域特定特征(例如后悔值)组成。 相比之下,NLNS 旨在以不需要深入问题或优化知识的方式自动生成启发式。
存在大量使用机器学习组件的优化方法,例如学习从选项组合中选择算法的算法选择方法或学习在搜索过程中调整搜索参数的方法(例如,[1])。 我们不在这里讨论这些方法,但请读者参考 [18] 和 [4]。
机器学习技术也经常用于超启发式,其目的也是自动化元启发式方法的设计。 超启发式通过选择或组合现有的启发式或启发式组件来实现这一点。 例如,在 [26] 中提出了一种 VRP 变体的超启发式方法,它可以学习如何在搜索过程中应用低级启发式方法。

3 NEURAL LARGE NEIGHBORHOOD SEARCH

NLNS 是 LNS 元启发式的扩展,它使用强化学习自动完成开发修复算子的复杂任务。 NLNS 的设计充分利用了 GPU 的并行计算能力,支持两种搜索模式:批量搜索,即同时求解一批实例;单实例搜索,即使用并行求解单个实例。 搜索。
LNS 是一种元启发式,其中解决方案的邻域由修复和破坏算子隐式定义,并由 Shaw [22] 首次引入。 令 π 是给定问题实例的初始解。 LNS 通过应用破坏算子和修复算子来生成 π 的相邻解 π 0 。 destroy 操作符删除部分解决方案,例如,通过从解决方案中删除到 CVRP 的游览,从而导致不可行的解决方案。 它通常包含随机元素,以便在多次破坏同一解决方案时删除解决方案的不同部分。然后,维修操作员通过完成不完整的旅行或将未分配的客户分配给现有旅行来修复损坏的解决方案,例如,针对 CVRP,从而创建可行的解决方案 π 0 。 诸如模拟退火 [16] 中的 Metropolis 准则之类的验收准则用于确定是否应接受新解决方案,即 π 0 是否应替换 π。 在更新 π(或不更新)之后,搜索继续直到达到终止条件。
LNS 的性能在很大程度上取决于领域专家开发的破坏和修复算子的质量。 虽然即使是纯粹随机破坏解决方案部分的简单销毁运算符也可以产生好的解决方案,但修复运算符通常需要实施复杂的启发式方法。 与 LNS 相比,NLNS 使用多个破坏和修复算子(如自适应大邻域搜索 [21])。 每个修复算子 o R 对应于我们提出的神经网络模型的学习参数化 θ,该模型在顺序修复过程中修复解决方案。 在一个修复算子的训练过程中,相应的模型被反复呈现不完整的解(从某个分布采样的实例),这些解已经被特定的破坏算子 o D 破坏了。 训练的目的是调整模型参数 θ 所以 该模型构建了高质量的解决方案。 通过仅呈现来自某个分布的模型实例,它能够学习适应特定实例类特征的修复算子和销毁算子。 这种能力对于在实践中经常解决具有相似特征的实例的问题特别重要,例如 VRP 变体的情况。
这也意味着可以在遇到实例的特征发生变化的情况下重新训练 NLNS,从而避免设计新算子所需的大量人力资源。
初始起始解 π 是由一个简单的贪心过程生成的。 通过始终将最近的客户添加到游览来创建从站点开始的路线。 如果最近客户的需求超过了车辆的剩余负载,则车辆返回到站点。 重复此过程,直到访问完所有客户。
结果是一个解决方案 π,它由一组都在仓库开始和结束的旅行组成。
3.1 销毁运算符
使用销毁运算符 o D 销毁解决方案,该运算符指定应从解决方案中删除多少元素以及应如何选择这些元素。 为了销毁解决方案,我们只实现了两个简单的销毁程序,它们不需要深入的领域知识,几乎可以应用于任何路由问题。
• 基于点的销毁从解决方案的所有游览中删除最接近随机选择点的客户。
• 基于游览的销毁从解决方案中删除最接近随机选择点的所有游览。
如果从游览 {vi, …, vj , …, vk} 中删除了客户 vj,则会创建三个未完成的游览。 不完整游览 {vi, …, vj−1} 包含客户 vj 之前的所有顶点,不完整游览 {vj} 仅包含客户 vj ,而游览 {vj+1, …, vk} 包含客户 vj 之后的所有顶点 客户 vj。 如果删除由 r 个客户组成的完整游览,则创建每个只包含一个客户的 r 个不完整游览。 每个销毁运算符都指定应以百分比形式删除的客户数量(这称为销毁程度)。
3.2 学习修复解决方案修复被破坏的解决方案的问题可以表述为强化学习问题,其中代理(学习模型)在多个离散时间步长内与环境(不完整解决方案)交互。 在每个时间步长中,模型将一个不完整的游览与另一个不完整的游览或站点连接起来。 重复该过程,直到解决方案仅包含不超过车辆容量的完整旅行。 下面我们先以一个具体的例子来说明修复过程。 然后,我们更正式地描述了模型输入是如何生成的,以及我们如何将强化学习问题形式化。
图 1 显示了一个被破坏的解决方案和相应的模型输入。 该解决方案包含四个不完整的游览,其中一个不完整的游览仅由一个客户组成。 该模型为未连接到站点 (x1, …, x5) 的不完整游览的每一端接收一个特征向量。 每个特征向量不仅代表所考虑的旅行结束处的节点,还包含整个未完成旅行的信息,例如未满足的需求。 此外,该模型还会收到一个描述仓库 (x0) 的特征向量。
此外,该模型将旅行的一端作为参考输入。
在本例中,参考输入是 x3。 该模型的任务是选择相关联的游览端 3 应连接到的位置。 该模型通过指向输入 x0、…、x5 之一来完成此操作。 例如,如果模型指向 x5,则游览端 3 连接到游览端 5。请注意,模型仅获取有关已破坏解的不完整游览的信息。 因此模型输入的大小不取决于实例的大小(即客户数量),而是取决于破坏程度。 这使我们能够将 NLNS 应用于拥有近 300 个客户的大型实例。
破坏解 π 的模型输入生成如下。
对于由多个客户组成的每个不完整的游览,为不是仓库的每一端创建一个输入(步骤 1)。 然后,对于每个只有一个节点的不完整游览,生成一个输入(步骤 2)。 最后,创建仓库的输入(步骤 3)。 每个输入 x 是由元组 hx X, xY , xD, xS i 表示的 4 维特征向量。 这些值计算如下。 在对应于步骤 1 的第一种情况中,其中 x 表示不完整游览的结束 {vi, …, vj},x X 和 x Y 是游览结束时节点的 x 和 y 坐标 在考虑中,x D 是游览 {vi, …, vj} 满足的需求总和。 如果游览 {vi, …, vj} 包含站点,则值 x S 设置为 3,否则设置为 2。
对应第 2 步,如果 x 表示具有单个节点 {vi} 的游览,则 x X 和 x Y 是节点 vi 的 x 和 y 坐标,x D 设置为游览 {vi} 的满足需求 2 . 值 x S 设置为 1。 对于步骤 3 中的未完成游览,x 表示站点 v0,x X 和 x Y 是站点的 x 坐标和 y 坐标并且x D 和x S 被设置为-1。 在输入网络之前,值 x X、x Y 和 x D 被重新缩放到区间 [0, 1](除了仓库的 x D 值,它总是 -1)。 在下文中,我们将描述如何在顺序修复过程中使用模型输入。
令 π0 是通过将销毁运算符应用于完整解而生成的不完整解。 在每个修复时间步 t 中,模型以元组 (Xt, ft) 的形式获得不完整解 πt,其中 Xt 包含在时间步 t 使用上述过程生成的所有输入,而 ft 描述参考输入。 然后模型输出所有动作的概率分布。 也就是说,模型定义了一个参数化的随机策略 pθ(at|πt),其中 θ 代表模型的参数。 每个动作 at 对应于将 ft 表示的旅程的结束连接到 Xt 中的元素之一,并导致(不完整的)解决方案 πt+1。 重复此过程,直到达到没有任何不完整游程的解决方案 πT。
参考输入 ft 是 Xt \ {x0} 的一个元素,并在时间步长 t = 0 随机选择。在接下来的时间步长中,ft 被设置为表示连接到 ft−1 的旅行结束的输入 如果与 ft-1 相关的游览仍然不完整。 否则,在第一次迭代中随机选择 ft。
我们使用的屏蔽程序不允许模型执行会导致不可行解决方案的操作(例如,创建一个承载需求高于车辆容量的旅行)。
我们也不允许模型选择对应于将 ft 与其自身连接的动作。 屏蔽是通过将禁止操作的对数概率设置为 0 来实现的。
3.2.1 模型架构 该模型的架构如图 2 所示。该模型以一对 (Xt, ft) 作为输入,它表示在时间步长 t 的不完整解 πt。 对于每个输入 xi ∈ Xt,使用变换 Embc 计算嵌入 hi。 Embc 由两个线性变换组成,中间有一个 ReLU 激活3。 它单独且相同地应用于所有输入。 Embc 的两层都具有 dh 维度(我们将所有训练模型的 dh 设置为 128)。 对于参考旅行结束表示 ft,使用与 Embc 具有相同结构但使用不同可训练参数的变换 Embf 生成嵌入 h f。 注意层 Att 使用所有嵌入来计算单个 dh 维上下文向量 c,该向量 c 描述所有相关嵌入 h0,… . . , 恩。
哪些输入相关是基于 h f 确定的。 例如,向量 c 可能主要包含有关表示靠近由 f 表示的游览终点的游览终点的输入的信息。 为了计算上下文向量 c,首先计算 n 维对齐向量 a¯ 来描述每个输入的相关性:
公式(1-3)
上下文向量 c 对相关输入的信息进行编码,每个输入的相关性 xi ∈ Xt 由对齐向量 a¯ 给出。
然后将向量 c 的串联和参考输入 h f 的嵌入提供给具有两层(均使用 ReLU 激活)的全连接前馈网络,该网络输出 dh 维向量 q。 这个单个输出向量 q 与每个嵌入 h0, 一起使用。 . . , hn 计算所有动作的输出分布:
公式(4-5)
向量zb和包含可训练参数。
与[19]中提出的体系结构不同,我们不使用基于RNN的解码器。此外,我们使用FFN来计算用于基于上下文向量c(描述相关输入点)和向量hf(描述参考输入f)选择动作的向量q。在[19]中,对齐向量a使用RNN的输出来计算,上下文向量c直接用于计算所有动作的输出分布。
公式(6-8)
带b(π0)作为基线。一个很好的基线,用于估计修复解决方案J的成本(θ|π0)能正确稳定训练过程。与[3]类似,我们使用第二个模型称为critic来估计修复成本π0.与策略模型交替训练批评家,以最小化其对修复成本的预测之间的均方误差π0和使用最近学习的策略时的实际成本。评论家将为X0生成的值作为输入π0,如上所述。批评家使用位置前馈网络处理每个输入,该网络为每个输入输出一个连续值。所有输出的总和就是修理成本b的估计值(π0).
3.3搜索指导与现有的、纯粹基于机器学习的VRP方法相比,NLNS实现了一个独立于问题的高级搜索过程,能够更有效地探索搜索空间。为了与最先进的机器学习和优化方法进行比较,我们实现了两种不同版本的搜索程序,这两种程序都是为了利用GPU的并行计算能力而设计的。批处理搜索快速并行求解一组不同的实例,单实例搜索通过对实例的多个解同时应用销毁和修复操作符来求解单个实例。这两种方法在搜索过程中都使用一组给定的已学习的修复运算符,每个修复运算符或针对给定的销毁运算符进行专门培训。由于gpu只擅长并行应用相同的操作,因此一次只能使用一个修复操作符。
3.3.1单实例搜索
单实例搜索适用于VRP的标准搜索设置,其中单实例必须在给定的时间预算内求解。为了避免陷入局部极小值,LNS通常使用基于模拟退火的接受准则[16],该准则接受基于温度值T的恶化解决方案。
算法1显示了单实例搜索。在搜索开始时,现有的解决方案π ∗ 设置为给定的可行解π 并且温度T被设置为起始温度Ts。
主搜索组件由两个嵌套while循环组成。在外循环的每一次迭代中,一个由现有解决方案的副本组成的批处理Bπ ∗ 已创建。然后,使用逐渐降低的温度T在内环中改进B中的解决方案(即,接受恶化的解决方案的可能性降低)。
在外循环的末端,T被设置为再加热温度Tr,以允许搜索在下一次执行内循环开始时从其局部最小值逃逸。
在内环中,首先破坏B中的所有解,然后使用随机4均匀选择的破坏-修复算子对进行修复。最佳解决方案π b∈ B则被接受为当前解决方案π 或者被拒绝。此外,任职者在下列情况下会得到更新:π b比b好π ∗ . 最后,更新温度并将B中元素的前Z%设置为当前解决方案π.
参数Z控制搜索集中于生成当前解的相邻解的程度π. (1)−Z) 百分比
3.3.2批量搜索
在批量搜索中,使用以下程序并行求解多个实例。首先,如前所述,使用贪婪启发式为每个实例生成初始解。这将创建一批解决方案B。在搜索的每个后续迭代中,选择销毁和修复操作符对,并使用该对销毁和修复B中的所有解决方案。这将创建一个相邻的解决方案π 每个解决方案为0π ∈ B.邻近的解决方案π 仅当成本π 0小于当前解决方案的成本π. 搜索将继续进行,直到达到整个批次的终止条件,例如,一个固定的时间限制。通过将B拆分为多个子集,然后分别并行处理,可以并行化搜索。我们不像在单实例搜索中那样使用模拟退火,因为在批量搜索中,每个实例执行的销毁和修复操作要少得多,使得复杂的验收标准不那么有效。
与自适应大邻域搜索(ALNS)[21]一样,我们根据修复算子在以前迭代中的性能来选择它。
为此,我们使用指数移动平均法跟踪B中所有解的平均成本的绝对改善。然而,与ALNS根据学习到的概率分布随机选择破坏和修复算子不同,我们总是选择在以前的迭代中性能最好的算子对。由于运算符的性能在搜索过程中趋于零,这确保了定期使用(和评估)所有运算符。这种简单的自适应机制在初步实验中提供了与更复杂的实现类似的性能。
4计算结果
我们评估了几个CVRP和SDVRP实例集上的NLN。我们把分析分成两部分。首先,我们评估批量搜索并将其与现有的机器学习方法进行比较。然后,我们比较了单实例搜索和最先进的优化方法。我们还通过用[6]中提出的手工修复算子替换学习的修复算子来评估基于学习的NLNS组件的贡献。
在所有的实验中,NLNS都是在一个nvidiateslav100gpu和一个2.2ghz的intelxeonsilver4114cpu上运行的,使用10个内核。使用Adam优化器[15]和10%的静态学习率,对每个维修操作员进行250000批256个实例的培训−4 . 培训维修操作员的时间从几个小时(例如,有20个客户的情况)到4天(例如,有近300个客户的情况)5不等。
4.1批量搜索
我们将NLNS批量搜索与[17]中的抽样(AM)注意模型以及[19]中的强化学习方法与波束搜索(RL-BS)注意模型进行了比较,并对20、50和100个客户的CVRP和SDVRP实例进行了分析。对于我们考虑的六个问题类中的每一个,我们定义了四个销毁操作符:每个销毁过程两个,每个销毁的程度不同,并训练了四个相应的修复操作符。
为了与[17]中的AM方法进行比较,我们为每个问题类生成了10000个实例的测试集。实例是从与[17]和[19]中的实验中使用的实例相同的分布中取样的。我们在与NLNS相同的机器上使用作者提供的代码和模型运行AM方法(为每个实例采样1280个解决方案)。对于文献[19]中的RL-BS方法,我们没有自己进行任何实验(因为没有公开的模型),而是展示了作者报告的结果。这些是使用1000个实例的测试集和尺寸为10的波束宽度获得的。
表1显示了每个实例集的所有解决方案的平均成本以及解决每个实例集的所有实例的总挂钟时间。对于RL-BS方法,我们假设运行时与测试集的大小成线性关系,并显示作者报告的1000个实例乘以10的运行时(因此我们用星号标记这些实例)。
4.2单实例搜索
我们接下来将NLNS的单实例搜索与最先进的优化方法以及使用手工修复操作符的LNS进行比较。我们注意到我们没有调整NLN的超参数,因此结果可能会得到改进。在所有实验中,我们使用300的批量大小,并将Z(重置为当前解决方案的批量百分比)设置为0.8。启动温度Ts和再加热温度Tr被动态地设置为B中解决方案成本的四分位区间,并且冷却计划指数地将温度降低到1。对于客户数少于200的实例,我们将温度再加热5次,对于客户数多于200的实例,我们将温度再加热10次。在所有实验中,我们将目标函数中客户之间的距离四舍五入到最接近的整数。
4.2.1 CVRP的容量车辆路径问题
我们将NLNS与[29,30]中的统一混合遗传搜索(UHGS)和启发式解算器LKH3[9]进行了比较。
UHGS是一种基于群体的VRP变体算法,它由能够适应当前问题类型的多态成分组成。LKH3是Lin Kernighan Helsgaun TSP求解器的扩展,能够解决各种著名的路由问题。
此外,我们还评估了基于学习的NLNS组件的贡献。为此,我们用[6]中提出的修复算子来替换学习到的修复算子。维修操作员首先根据一个随机选择的标准(例如,客户需求)对销毁操作员删除的所有客户进行排序。
然后,顾客以顺序的方式重新加入旅游团。对于每个客户,评估所有潜在的插入位置,并根据插入成本和定义程序贪婪性的参数以一定的概率选择每个位置。
destroy操作符的超参数选择类似于[6]。除了维修操作之外,基于学习的NLN和基于非学习的LN共享相同的组件,允许直接比较所采用的维修操作。
我们在一个新的数据集上评估所有方法,该数据集包含与[27]中提出的实例具有相同属性的实例。[27]中的实例都是唯一的,但是NLNS的目的是学习如何解决特定的实例组。因此,我们将新的数据集组织成17组,每组20个实例,其中一组的所有实例都具有相同的特征(即,这些实例是从相同的分布中采样的)。这个新的数据集在机器学习文献中使用的数据集(例如,10000个具有相同特征的实例)和优化文献(例如,少数实例都具有不同的特征),并允许更好地评估经过训练或调整以解决特定特征实例的方法(例如基于机器学习的方法)。实例组如表2所示,在以下特征上彼此不同:客户数量(Cust.)、仓库位置(Dep.)、客户位置(Cust.)。客户需求(Dem)和车辆容量(Q)。有关实例属性的完整描述,请参阅[27]。
我们使用四个修复操作符(对应于具有不同销毁过程和销毁程度的四个销毁操作符)运行NLNS,这些操作符分别针对每个实例组在单独的训练实例上进行训练。LKH3是在2.6 GHz的Intel Xeon E5-2670 CPU的单核上评估的,其超参数配置由[9]用于解决[27]的实例。每个方法都会运行每次三次。表2报告了每个实例组的平均成本和平均运行时。我们不报告最优性的差距,因为计算所有实例的最优解在计算上是不可行的。UHGS在所有实例组上都提供了最好的性能,尽管与NLNS和LKH3相比只有0.08%到3.38%的小差距。使用手工启发式的LNS在所有实例上都显著优于NLNS,与UHGS的差距在0.89%到12.14%之间。虽然这并不表明设计一个能够与NLNS竞争的修复操作员是不可能的,但它表明,这充其量是一项复杂的任务,需要付出巨大的努力和对问题的深刻理解。NLNS和LKH3提供了类似的性能,NLNS在17个实例组中的11个上找到了成本更低的解决方案。NLNS是第一个学习启发式,以实现性能与LKH3,这是一个重要的成就,鉴于多年的人类发展和洞察已经进入LKH3。
4.2.2拆分配送车辆路径问题
我们将NLNS与最新的多起点迭代局部搜索算法SplitILS进行了比较,该算法从[23]开始,在[2]的8个SDVRP实例上使用。实例有75或100个客户,客户的需求被选择在每个实例的不同时间间隔内。车辆容量Q为160。
对于NLN,我们只培训两组维修操作员,每组由4名维修操作员组成(具有不同的销毁程序和销毁程度)。这两组维修操作员都接受了100个随机定位客户的培训,但对于第一组客户,[0.01Q,0.3Q]中随机选择了一个需求,而对于第二组客户,[0.1Q,0.9Q]中随机选择了一个需求。我们使用第一组解算实例S76D1、S76D2、S101D1和S101D2,使用第二组解算其余的实例。请注意,修复运算符应用于从与其培训所用实例的基础分布不完全匹配的分布中采样的实例(例如,对具有100个客户的实例进行培训的修复运算符用于修复具有75个客户的实例)。表3显示了NLNS和splitil的平均性能(超过20次运行)。虽然在拥有75个客户的实例上,SplitILS比NLNS找到了更好的解决方案,但在拥有100个客户的大型实例上,NLNS的性能要优于SplitILS。因此,与CVRP的情况一样,NLNS能够与文献中的最新技术相匹配,甚至略优于后者。

5 结论

我们提出了NLNS,它是LNS的一个扩展,可以学习VRP实例的修复算子,并将其应用于引导式启发式搜索。
我们将CVRP和SDVRP实例上的NLNS与最新的机器学习和优化方法进行了比较,结果表明,NLNS中学习到的启发式组件优于文献中手工设计的启发式组件。NLNS的搜索指导也使得它在并行求解一组实例时的性能显著优于基于机器学习的方法(依赖于琐碎的搜索策略)。当连续求解CVRP实例时,NLNS提供了与启发式解算器LKH3相似的性能,但优于基于种群的UHGS方法。在SDVRP实例上,NLNS能够在有100个客户的实例上优于最先进的SplitILS方法。我们的结果令人信服地表明,结合学习模型和高层次的搜索指导优于模型缺乏搜索能力。在未来的工作中,我们将进一步探索学习模型和搜索程序之间的关系,包括使维修和销毁操作员的联合培训成为可能。

你可能感兴趣的:(RL&OR)