您忘记计算并考虑实际路径的成本。您忘记累积多次前进和后退的边缘成本!
统一成本搜索(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 应用于您的具体示例。最初,我们检查是否乙是否是目标节点。不是,所以我们展开乙. 我们可以添加乙访问(或扩展)节点列表(图搜索)或不访问(树搜索)。让我们使用树搜索,这样我们就不会跟踪展开的节点,这意味着我们可以多次展开一个节点。乙有两个孩子,一个和C,所以我们将它们添加到边缘,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然后到B是f(B)=36+36=72(假设您在同一条边上来回前进,因此您需要累积这些行程的成本!)和f(C)=70,所以我们访问C,所以我们将它从边缘移除,现在是F={B}.
您应该能够完成剩余的搜索(我实际上还没有完成)。我建议您观看 John Levine 的视频Uniform Cost Search,他展示了 UCS 和 A* 如何工作的具体示例。