在现实世界中,车辆路径问题(VRP)中的车辆必须走这条路:它们不能在客户之间直线行驶。 大多数VRP研究论文和演示都乐于忽略此实现细节。 和我一样,过去。 尽管使用道路距离(而不是空中距离)不会对VRP的NP硬性产生很大影响,但确实会带来一些额外的挑战。 让我们来看看这些挑战。




道路距离数据集

首先,我们需要现实的数据集。 不幸的是,在VRP研究社区中,缺乏具有道路距离的公共VRP数据集。 VRP Web很少,例如位于29个位置的巴伐利亚数据集,但没有什么严重的。 因此,我必须根据以下要求自己生成一些实际的数据集:

  1. Google Maps用作道路,在数据集中每对位置之间的真实距离以km为单位。
    • 例如,在小道路上合理的时候使用高速公路。
  2. 对于每个数据集,生成一个空中距离变量和一个道路距离变量,以比较结果。
  3. 生成多个数量级的相似数据集,以比较可伸缩性。
  4. 为VRP中的车辆容量限制添加合理的车辆容量和客户需求。

我最终生成了比利时的数据集,其中包含城市,城镇和郊区的位置。 最大的一个有2750个位置。 稍后我可能会添加USA数据集的道路变体,这些变体最多可达10万个位置。

OptaPlanner –具有真实道路距离的车辆路线

通过使用基于OpenStreetMap的出色的Java库GraphHopper ,查询实际道路距离相对容易。 只要整个道路网(比利时只有200MB)可以加载到内存中,它也很快。 加载北美的整个道路网络(6GB)更具挑战性。 我将这些数据集提交到VRP Web,以便其他研究人员也可以使用它们。

所有这一切都发生 OptaPlanner的VRP示例开始解决它之前。 在求解过程中,距离已经在查找表中可用。 一旦我们开始生成具有1000个或更多位置的数据集,预先计算每个位置对之间的所有距离可能会带来内存和性能问题。 我将在下一个博客中解释这些以及补救措施。

空中距离与道路距离

为了清楚起见,我将集中在数据集belgium-n50-k10.vrp上,该数据集具有50个位置和10个车辆,每个车辆的容量为125。 OptaPlanner有5分钟的时间来解决这两种变体(空中和道路距离)。

使用空中距离 (可根据纬度和经度计算欧几里得距离)会导致:

OptaPlanner –具有真实道路距离的车辆路线

总距离22.99并不重要,因为它不在通用的度量单位内,而且因为我们的车辆无论如何也无法从点到点飞行。 我们需要将此空距解决方案应用于真实道路网络 (如下所示),以了解真实距离:

OptaPlanner –具有真实道路距离的车辆路线

现在,让我们将上方的空中距离解决方案与下方的道路距离解决方案进行比较。

OptaPlanner –具有真实道路距离的车辆路线

道路距离解决方案所需的时间减少了108.45公里,因此几乎提高了5%! 这就是世界上最密集的道路网络之一(比利时的道路网络):在更稀疏的道路网络上,收益可能会更多。

结论

使用实际距离而不是空中距离确实很重要。 用空距离求解VRP,然后应用道路距离不是最理想的。

但是,我们真的可以预先计算大型数据集中的每个位置对吗? 敬请关注。

翻译自: https://www.javacodegeeks.com/2014/09/optaplanner-vehicle-routing-with-real-road-distances.html

相关文章:

  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
  • 2022-12-23
  • 2021-07-17
  • 2022-02-01
  • 2021-10-11
猜你喜欢
  • 2021-05-20
  • 2021-11-01
  • 2021-12-19
  • 2021-11-25
  • 2022-12-23
  • 2021-11-21
  • 2021-04-27
相关资源
相似解决方案