情景:
假设我有一个带有边权重的大伪随机图,但没有任何与节点相关的坐标信息。此外, 有N个航点均匀分布在图表周围,包含 从每个航路点到每个其他节点的预先计算的最短路径信息。
目标:
找到随机源节点和目标节点之间的最短路径。
根据我之前使用A *解决的问题以及我在该主题上阅读的论文,启发式算法似乎依赖于欧几里德度量来计算良好的距离近似,例如:一条直线。
我的问题是:是否有任何可以帮助我解决上述情况的好的启发式,或者我被迫依赖纯粹的Dijkstra算法(与预先计算的航路点节点相结合)?
非常感谢任何想法或评论。
修改
感谢所有帮助过的人,利用三角不等式就可以了。最近的航点计算非常昂贵,因此与纯Dijkstra相比,平均运行时间要高得多,但此时此时并不重要。
这里概述了已探索节点的数量(每种图表类型的随机源/目标):
第一个图表类型(1)由 200个节点和 250个边组成,而最后一个图类型(40个) )由 8000个节点和 10000个边组成(更高的类型意味着更大的图形)。
答案 0 :(得分:4)
我们希望从A到B的最短路径长度采用乐观的启发式方法。
找到距离A最近的航点。称之为W。
然后max {d(W,B) - d(W,A),0}是从A到B的最短路径长度的下限。
<强>证明:强>
通过三角不等式,我们得到d(W,B)≤d(W,A)+ d(A,B)。
因此d(A,B)≥d(W,B)-d(W,A)。
你可以对称地应用这个想法,以获得更好的界限。也就是说,找到最近的航路点WA到A和最近的航点WB到B然后你的下界是
max {d(WA,B) - d(WA,A),d(WB,A) - d(WB,B),0}
这种启发式的好处在于它随着航点密度的增加而明显改善。
答案 1 :(得分:-1)
你的启发式可以是:
shortest path distance between source and closest waypoint +
shortest path distance from that waypoint to your target node
修改强>
正如尼克拉斯指出的那样,这种启发式方法是不可接受的。因此,它不能用于A *。请不要理会。 p>