A* 和统一成本搜索显然是不完整的

人工智能 搜索 一个明星 诺维格罗素 统一成本搜索
2021-10-19 18:05:20

考虑下图表示搜索空间的图表。

在此处输入图像描述

如果我们从B并尝试达到目标状态E,最低成本优先搜索(LCFS)(又名统一成本搜索)算法无法找到解决方案。这是因为,B选择A超过C扩展为f(A)=g(A)=36<f(C)=g(C)=70.f(n)是节点的成本函数n, 和g(n)是到达节点的成本n从开始状态。进一步,从A, LCFS 现在将选择B展开,这反过来将选择A再次结束C. 这会导致无限循环。这表明 LCFS 是不完整的(不保证找到解决方案,如果存在的话)。

对于 A*,我们定义f(n)=g(n)+h(n), 在哪里h(n)是从节点到达目标状态的预期成本n. 如果我们定义曼哈顿距离(L0规范)为h(),书籍(如Stuart Russell 和 Peter Norvig 的《人工智能:现代方法》(第 3 版))说 A* 一定会找到解决方案(因为它存在)。但是,我找不到如何。用一个*,B仍然会选择A自从f(A)=36+(h(A)=40)=76<f(C)=70+(h(C)=30+50)=150. 你看,这意味着,当A向后扩展B,B将再次选择A, 无限循环随之而来。

我在这里想念什么?

1个回答

您忘记计算并考虑实际路径的成本。您忘记累积多次前进和后退的边缘成本!

统一成本搜索(UCS)的评估函数是f(n)=g(n), 在哪里g(n)表示从起始节点到路径的成本n. A* 的评价函数为f(n)=g(n)+h(n), 在哪里h(n)是一个可接受的启发式。UCS 是 A* 的一个特例,具有可接受的启发式h(n)=0,n. 评估函数用于边缘中选择下一个要访问的节点,即可能被访问的节点集合。每当我们访问一个节点时,我们都会将其从边缘移除。展开节点_X意味着添加的孩子X到边缘。每当您访问一个节点时,您也会将其展开

让我们将 UCS 应用于您的具体示例。最初,我们检查是否B是否是目标节点。不是,所以我们展开B. 我们可以添加B访问(或扩展)节点列表(图搜索)或不访问(树搜索)。让我们使用树搜索,这样我们就不会跟踪展开的节点,这意味着我们可以多次展开一个节点。B有两个孩子,AC,所以我们将它们添加到边缘,F={A,C}. 我们现在应该访问A或者C? 我们将访问评估函数的最小值,即A, 鉴于f(A)=g(A)=36<f(C)=g(C)=70,所以我们删除A从现在的边缘F={C}. A目标节点?不,所以我们扩展它,但它只有一个孩子,B,所以我们添加B到边缘,所以F={C,B}. 到达路径的成本B先去A然后到Bf(B)=36+36=72(假设您在同一条边上来回前进,因此您需要累积这些行程的成本!)和f(C)=70,所以我们访问C,所以我们将它从边缘移除,现在是F={B}.

您应该能够完成剩余的搜索(我实际上还没有完成)。我建议您观看 John Levine 的视频Uniform Cost Search,他展示了 UCS 和 A* 如何工作的具体示例。