artificial-intelligence - 为什么允许对角线移动会使 A* 和曼哈顿距离 Not Acceptable ?

标签 artificial-intelligence graph-theory graph-algorithm heuristics

我对使用 A* 和曼哈顿距离度量的网格中的对角线移动有些困惑。有人可以解释为什么使用对角线运动使其不被接受吗?不会在对角线运动中找到更好的最佳解决方案,因为到达目标状态的步骤比左上右下少,还是我错过了什么?

最佳答案

正如 beaker 的评论所指出的那样,曼哈顿距离将高估一个州与它对角可到达的州之间的距离。 根据定义,不能接受过度估计距离的启发式方法。

现在,为什么会这样呢?

让我们假设您的曼哈顿距离过程如下所示:

function manhattan_dist(state): 
    y_dist = abs(state.y - goal.y)
    x_dist = abs(state.x - goal.x)
    return (y_dist + x_dist)

现在,考虑将该过程应用于 (1,1) 的状态的情况,并假设目标是 (3,3)。这将返回 4 的值,它高估了实际距离 2。因此,在这种情况下,曼哈顿距离将不能作为一种可接受的启发式方法。

在允许对角移动的游戏板上,通常使用 Chebyshev Distance 代替。为什么?

考虑这个新程序:
function chebyshev dist(state): 
    y_dist = abs(state.y - goal.y)
    x_dist = abs(state.x - goal.x)
    return max(y_dist, x_dist)

回到前面的(1,1)和(3,3)的例子,这个过程会返回值2,这确实不是对实际距离的高估。

关于artificial-intelligence - 为什么允许对角线移动会使 A* 和曼哈顿距离 Not Acceptable ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547400/

相关文章:

algorithm - 在推理图中查找第一个 UIP

javascript - 寻找多个节点之间成本最小的路径

image-processing - 人脸认证

python - 如何使用 bert 嵌入而不是 glove/fasttext 等静态嵌入来训练神经网络模型?

artificial-intelligence - 用人工智能防止垃圾邮件

algorithm - 无法将 Alpha Beta 修剪算法应用于此树

algorithm - 关于图中的二分集和独立集

algorithm - 查找给定(不一定是二叉)树的最大和二 fork 树

python - 如何在 python 中导入 matplotlib

python - 在列表列表中查找重叠列表