D* Lite路径规划算法应选用何种启发式函数?
关于D*-Lite网格导航中启发式函数的选择
嘿,刚好我对D*-Lite和路径规划里的启发式函数有不少实践经验,来给你梳理一下:
首先得明确,D*-Lite本质是A的增量式变体,它对启发式函数的要求和A完全一致:必须是可采纳的(admissible)——也就是这个函数计算出的代价,永远不能超过从当前节点到目标节点的实际最小路径代价。
回到你的问题,直线距离(欧几里得距离)和曼哈顿距离都是完全可以用的,具体选哪个要看你的网格移动规则:
- 曼哈顿距离:适合4方向移动的网格(只能上下左右走)。它的计算方式是
|x_current - x_goal| + |y_current - y_goal|,刚好对应这种移动方式下的最短路径步数,绝对不会高估实际代价,完全满足可采纳性要求。 - 欧几里得距离:适合8方向移动的网格(允许对角线移动)。公式是
sqrt((x_current - x_goal)^2 + (y_current - y_goal)^2),这是两点间的直线最短距离,对于8方向移动来说,实际最短路径不会比这个距离更短,所以也是可采纳的。
另外补充一点:如果你的网格里存在不同代价的格子(比如某些格子走起来更费时间/能量),这两个启发式依然适用——因为它们计算的是无代价网格下的最短路径,肯定不会高估有代价网格中的实际最小路径代价,符合可采纳性要求。
至于Koenig 2002的论文里没专门讲启发式函数,是因为D*-Lite直接沿用了A的启发式设计逻辑,默认你已经了解A中对启发式的要求,所以没有额外赘述。
内容的提问来源于stack exchange,提问作者Robotex




