考虑到多个目标状态,A* 搜索如何工作?

人工智能 搜索 启发式 一个明星
2021-10-28 05:44:29

当我阅读了 AI 的基础知识时,我看到了一种情况(即搜索空间),如下图所示。

在此处输入图像描述

这些是启发式估计:

h(B)=9
h(D)=10
h(A)=2
h(C)=1

如果我们使用 A* 算法,节点B将首先扩展,因为f(B)=1+9=10, 而节点Af(A)=9+2=11f(B)<f(A), 对?

之后,搜索树将按顺序进行R -> B -> D -> G2搜索是否还会继续找到目标状态 G1?

如果我错了,请告诉我搜索的顺序。

2个回答

是的。如果您让 A* 运行(即不对新遇到的状态施加目标条件),所有状态都将被探索,就像它们在广度或深度优先搜索中一样。

问题1:首先,您声明目标G2将首先通过扩展顺序找到R, B, D, G2

这是错误的。很容易看出这是错误的,因为 A* 是一种搜索算法,它保证在仅使用允许的启发式算法的情况下找到最佳解决方案。(如果从不高估最佳目标距离,则启发式是可以接受的。在您的示例中就是这种情况。)由于到达 G1 的真实成本是 11,到达 G2 的真实成本是 13,显然必须找到 G1第一的。

因此,您的扩展顺序也是错误的。让我们首先给出所有节点的 f 值: f(A)=11, f(B)=10, f(C)=11, f(D)=13

假设 h(G1)=h(G2)=0(即启发式是“目标感知的”),我们得到f(G1)=11f(G2)=13

因为 A* 通过打开列表中搜索节点的最低 f 值扩展搜索节点(搜索节点尚未扩展),我们得到以下扩展顺序: R, B, A, C, G1

您很可能犯了一个非常常见的错误:在扩展 D 之后,您将 G2 添加到打开列表中。因为 G1 是一个目标节点并且您已经“看到”它,所以您将它作为解决方案返回。但这是错误的!目标节点不是在创建时返回,而是在选择扩展时返回!因此,虽然 D 的展开生成了 G2,但您不能将 G2 作为解返回,因为它还没有被选择展开。

问题2: G2也能找到吗?

正如NietzscheanAI指出的那样,您可以简单地继续搜索。即,在膨胀后 R, B, A, C, G1,A* 将膨胀D, G2