📅  最后修改于: 2023-12-03 15:41:18.152000             🧑  作者: Mango
统一成本搜索(Uniform-Cost Search,UCS)也被称为最佳优先搜索(Best-First Search,BFS),是一种经典的启发式搜索算法。其基本思想是在所有已经扩展的节点中选取路径代价最小的搜索节点作为下一个搜索节点来进行搜索。
UCS是一种延伸了BFS的搜索策略,它并不使用任何启发式函数来指导搜索方向,而是通过遍历所有的路径来搜索到目标状态。
Input: problem, a problem to be solved
Output: a solution
frontier <- priority queue containing initial state
explored <- empty set
while frontier is not empty do
node <- frontier.pop()
if node is goal
return solution
add node to explored set
for each child of node do
if child is not in explored set or frontier queue
child.path_cost <- node.path_cost + child.operator_cost
frontier.add(child, child.path_cost)
child.parent <- node
else if child in frontier and child.path < node.path
replace existing node with child
return failure
以上是UCS搜索算法的伪代码,其核心是对已经探寻的节点进行更新并将它们加入到搜索队列priority queue中,不断重复这个过程直到找到目标状态或搜索队列为空。
伪代码中的priority queue
就是一个按照节点路径代价进行排序的优先队列,每次从队列头弹出的都是路径代价最小的节点。
explored set
是所有已经被探寻过的节点的集合,可以防止搜索进入无限循环。
在伪代码中,每个节点万一被探寻时,都会计算并更新其与父节点的路径代价,然后加入到优先队列中。如果在优先队列中已经存在该节点,那么就需要比较其路径代价,并将路径代价更小的节点放入优先队列中。
UCS是一种经典的启发式搜索算法,在搜索时可以保证路径代价最小,并且能够生成有效的最优路径。在某些问题中,UCS可能会比其他启发式搜索算法更有效。