如何设计成本函数和启发式函数,使用a*寻路算法找到最快路线



我目前正在制作一个道路网络寻路程序,希望能够使用a*寻路找到最短的路线(按距离(和最快的路线(时间(。

对于SHORTEST路线,我使用(道路长度(作为成本,使用从相邻节点到末端节点的欧氏距离作为启发式。这很好用。

然而,当试图(按时间(找到最快的路线时,我假设汽车会一直以限速行驶,所以我使用(道路长度/道路限速(作为成本。对于启发式,我使用从相邻节点到末端节点的欧几里得距离,除以到达该相邻节点的道路速度限制。这似乎很好,但当我在相同的起点和终点之间使用SHORTEST路径算法时,我通常会得到更快的旅行时间,这不是我想要的。

我理解我的成本和启发式需要具有相同的程度,并且启发式函数需要是一致的和可接受的。不过,我不确定我是否在正确地设计寻找最快路线的成本和启发式方法。如果我还没有正确的想法,我该如何找到最快的路径?

编辑:已解决

使用到目标节点的直线距离/网络中任何道路的最高速度限制作为启发式意味着估计的成本(时间(永远不会高估路径的真实成本。我的代码中的问题是我最初的启发式算法估计过高。@btilly的建议解决了这个问题,因为启发式是可以接受的,并且会低估成本。

最新更新