考虑到多个目标状态,A* 搜索如何工作?
人工智能
搜索
启发式
一个明星
2021-10-28 05:44:29
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)=11
和f(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
。
其它你可能感兴趣的问题