我有一张目的地地图(下面的红点)和一些兴趣点(黄色,绿色和蓝色点)。
我正在尝试找到目的地的路径,但起点未定义 - 我只是希望它尽可能多地传递感兴趣的点,而不会使路线迂回。
例如,在这种情况下,以下(粉色线)将是一条好路线:
黄点是离目的地最远的POI(在这种情况下没用),绿色点是距离目的地最远的四个点。
有人可以建议一个适合这个的算法吗?
这是一个变成图形的合适问题吗? “不太迂回”的要求似乎暗示了这一点,但是我如何协调这一点并希望尽可能多地传递POI?
编辑:澄清“不太迂回”的要求。我只是想让它成为一个合理的路线,例如,所有角落的总和最多转90度。 POI将始终位于目的地附近,因此长度不是真正的问题。
答案 0 :(得分:3)
问题可以明确地缩小为图G=(V,E)
,其中V
是您的所有POI,E
在这种情况下是V x V
(所有顶点之间的边缘)。您还需要生成权重函数w:E->R
,以便w(u,v) = distance between u and v
问题实际上是Traveling Salesman Problem的变体,所以它是NP-Hard(所以没有已知的多项式解决方案) - 但环顾四周,有很多heuristics for this problems。
另外 - 如果你不期望很多POI(例如20-30) - 可以使用动态编程解决方案来找到所有点之间的最佳路径。
答案 1 :(得分:1)
似乎你可以把它变成一个图形,为每个感兴趣的点分配负权重(可能通过减少导入该点的任何边缘的值),然后将所述图形插入到Bellman-Ford算法中] 1,允许负长边。如果两个POI非常接近,可能会出现唯一的问题,因此可能需要某种修剪方法。