在给定经度和纬度坐标的情况下,如何创建优化的步行列表?

数据挖掘 算法
2021-09-26 06:45:00

我正在开展一项政治活动,数十名志愿者将在接下来的几周内进行上门促销活动。给定一个包含名称、地址和长/纬度坐标的列表,可以使用哪些算法来创建优化的步行列表。

4个回答

正如 Steve Kalestad 所说,这是一个 TSP 问题,并且有很棒的免费求解器可以找到近似解。

对于您正在寻找的东西来说可能工作量太大,但您可以尝试将其中一种求解器与 Google Maps API 结合使用,以在您的坐标之间找到真正的步行距离: https ://developers.google.com/maps /documentation/directions/#DirectionsRequests

(我从来没有用过这个API,所以我不知道它有多简单或有效)

人们看到一些与旅行商问题密切相关的东西,并认为它无法解决。

在这个主题上已经做了很多工作,但并不是所有的工作都表明没有解决方案。根据参数和所需的解决方案,您可能会找到可行的方法。

您可能想看看OpenOpt python 库。

另一个要查看的资源是TSP Solver 和 Generator

如果您使用的是 R,则可以使用TSP 包

实际上,为您的问题实施解决方案有点过多,无法在这里介绍,但这应该提供一个很好的起点。在这些包和我为您提供的链接中的文档中,您会发现有相当多的算法策略可用。您有一个小的地理区域和一小群“销售人员”,因此在合理的时间范围内计算策略所需的计算能力应该在您的桌面上可用。

实际上,您不需要找到绝对最优的策略。你只需要一个非常好的。选择一个看起来最不压倒性的 TSP 包并试一试。

正如@SpacedMan在评论中指出的那样,街道布局将对步行列表的优化产生巨大影响。您的问题标题中仅包含“纬度和经度”;但解决这个问题并不会导致“步行名单”,而是会导致“乌鸦名单”。

将您的街道布局视为一个图形,边权重描述距离,并试图找到所有必需地址之间的最短遍历,将导致您将您的问题视为“最短路径问题”。Dijkstra 的算法是最著名的解决方案(还有其他解决方案);在其幼稚的实现中,它收敛于O(n 2 ),如果您的地址列表大小适中,这可能是可以接受的。否则,请在上述链接中查找优化版本。

至于开始解决问题的库和资源,因为您没有指定语言或平台,所以让我指出Open Street Maps wiki 中路由求解器的编译以及它们的框架和库页面

这是一个疯狂的想法:与了解社区并且以前做过挨家挨户工作的志愿者交谈。获得他们的建议和想法。他们可能会有算法不会产生的洞察力,这些修改对于任何计算机生成的路线列表都是有价值的。一个例子:避免在灯光慢或没有灯光的情况下穿过人流量大的街道。另一个例子:在同一条街道的对面工作的一对志愿者会比单独在同一条街道工作的志愿者感觉更安全。