带有流量和时间的 OptaPlanner VRPPD Windows

OptaPlanner VRPPD with Traffic and Time Windows

目前有没有办法将流量模式合并到 OptaPlanner 中,并解决包裹和交付 VRP 问题?

例如。假设我今天和明天需要在 30 辆车中优化 500 次取货和送货,每辆取货时间为 1-4 小时 window。我想在高峰时段尽可能避开城市的繁忙区域。

也可以添加(或同时取消)新的取件。

我确定这是一个常见问题。在 OptaPlanner 中是否存在一个合适的解决方案?

谢谢!

用户经常这样做,但没有开箱即用的例子。

有几种方法可以做到这一点,但一种方法是向 distanceMatrix 添加第 3 个维度,表示出发时间。通常使用 15 分钟、30 分钟或 1 小时的粒度。

这里有 2 个缩放问题:

  • 内存。 15 分钟意味着每天 24 * 4 = 96。鉴于具有 2 个维度,10k 个位置 distanceMatrix 使用将近 2 GB RAM,显然内存可能成为一个问题。
  • 预计算时间。计算距离矩阵可能很耗时。 “批量算法”可以在这里提供帮助。例如,graphhopper 社区不支持批量距离计算,但他们的企业版本以及 OSRM(免费)支持。从远程 Google 地图 API 或远程企业 Graphhopper API 获取 3 维矩阵可能会导致带宽问题(见上文,距离矩阵的大小可能达到数 GB,特别是非二进制格式,例如 JSON 或 CSV)。

在任何情况下,3 维矩阵都存在,只需将 OptaPlanner 示例的 ArrivalTimeUpdateListener 调整为使用 getDistance(from, to, departureTime)