Artificial intelligence 为什么允许对角线运动会使A*和曼哈顿距离不可接受?

Artificial intelligence 为什么允许对角线运动会使A*和曼哈顿距离不可接受?,artificial-intelligence,graph-theory,graph-algorithm,heuristics,Artificial Intelligence,Graph Theory,Graph Algorithm,Heuristics,我对网格中使用a*和曼哈顿距离度量的对角线运动有点困惑。有人能解释为什么使用对角线运动使其不被允许吗?对角线运动会不会找到一个更好的最佳解决方案,比如说,在到达目标状态时比从左到右的过程中少走几步,或者我遗漏了什么?正如比克的评论所指出的,曼哈顿距离会高估一个状态与其对角可及状态之间的距离根据定义,过度估计距离的启发式是不允许的。 现在,这到底是为什么 假设曼哈顿距离过程如下所示: function manhattan_dist(state): y_dist = abs(state.y

我对网格中使用a*和曼哈顿距离度量的对角线运动有点困惑。有人能解释为什么使用对角线运动使其不被允许吗?对角线运动会不会找到一个更好的最佳解决方案,比如说,在到达目标状态时比从左到右的过程中少走几步,或者我遗漏了什么?

正如比克的评论所指出的,曼哈顿距离会高估一个状态与其对角可及状态之间的距离根据定义,过度估计距离的启发式是不允许的。

现在,这到底是为什么

假设曼哈顿距离过程如下所示:

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。因此,在这种情况下,曼哈顿距离不能作为可接受的启发

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

考虑这一新程序:

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,这实际上不是对实际距离的高估

虽然本主题较老,但我想添加一个不同的解决方案,如果允许对角移动,则使用实际最快的自由路径到达目标

function heuristic(state):
    delta_x = abs(state.x - goal.x)
    delta_y = abs(state.y - goal.y)
    return min(delta_x, delta_y) * sqrt(2) + abs(delta_x - delta_y)

此方法返回一个启发式,将最大数量沿对角线移动,剩余部分沿直线移动到目标,并提供最大可能的启发式,该启发式不会高估目标的移动成本。

曼哈顿距离(1,1)到(2,2)是多少?对角线(欧几里德)距离是多少?假设一个可接受的启发式方法不能高估到目标的实际距离,你看到问题了吗?优秀的启发式方法!