【发布时间】:2020-06-15 01:58:32
【问题描述】:
使用Mapbox Optimization API 是否可以优化多个司机之间的路线?
示例:添加 6 个位置,添加 2 个司机,路线在两个司机之间拆分/优化
我仍处于计划阶段,所以我自己还没有过多地探索,但是我看到的代码和所有示例都只针对单个驱动程序优化......有没有人做过类似的事情这个以前?你有什么可以推荐给我正确的方向吗?
【问题讨论】:
标签: mapbox
使用Mapbox Optimization API 是否可以优化多个司机之间的路线?
示例:添加 6 个位置,添加 2 个司机,路线在两个司机之间拆分/优化
我仍处于计划阶段,所以我自己还没有过多地探索,但是我看到的代码和所有示例都只针对单个驱动程序优化......有没有人做过类似的事情这个以前?你有什么可以推荐给我正确的方向吗?
【问题讨论】:
标签: mapbox
Mapbox 的优化 API 在输入 coordinates 之间返回一个时长优化的路由,也就是解决所谓的"Travelling Salesman Problem"。这是一个众所周知的NP-hard 图论问题,这意味着该问题没有已知的一般多项式时间解。
用于计算上述持续时间优化路由的基础数据是将coordinates 输入连接到 API 请求的边的成本函数。您可以使用Mapbox's Matrix API 检索一组这些坐标位置之间的成本值(包括流量)。
如this Stack Overflow post 的回答中所讨论的那样,为问题添加第二个司机/推销员会使问题更难解决。
a link to a scientific paper 正在讨论解决此问题的可能方法。
正如研究界所证明的那样,Multiple Travelling Salesman Problem 的解决方案实施起来并不简单。如果您不想参与实现可以为您解决问题的算法这一重要任务,您可以实现一个函数,该函数将对如何在两个驱动程序之间拆分目标coordinates 进行有根据的猜测。这种“有根据的猜测”可以基于从 Matrix API 获得的值。您可以为每个驱动程序创建一个one-to-many request,然后为每个坐标取两个持续时间中较小的一个,并将坐标分配给适当的驱动程序。然后,您可以使用 Mapbox 的优化 API 分别解决两个独立的旅行商问题。
即使您确实实施了可以解决多次旅行推销员问题的算法,该问题的复杂性也会随着驾驶员数量和航点数量的增加而呈指数级增长。因此,您最终可能会得到一个可行的解决方案,但不一定会在可靠的时间内进行计算。在实施解决方案时要牢记这些性能限制。
【讨论】:
driver_1 被分配到 dest_a ,driver_2 被分配到 dest_b,dest_a 比 dest_b 更接近 dest_c,所以 driver_1 必须接下来去那里)。