我正在使用这个GraphSearch
伪代码算法从起始位置找到目标的最短路径:
function GRAPH-SEARCH(problem,fringe,strategy) return a solution, or failure
closed <-- an empty set
fringe <-- INSERT(MAKE-NODE(INITIAL-STATE[problem]),fringe)
loop do
if fringe is empty then return failure
node <-- REMOVE-FRONT(fringe,strategy)
if STATE[node] is not in closed then
add STATE[node] to closed
for child-node in EXPAND(STATE[node],problem) do
fringe <-- INSERT(child-node,fringe)
end
end
我正在实施从起始位置搜索目标的A*
强调。 A*
搜索使用公式:
f(n)= g(n)+ h(n)
其中g(n)是到达当前child-node
的成本,h(n)是到达目标的启发式值(我们假设启发式确定是可以接受的)和f(n)是我们分配给node
中fringe
的组合值。
在A*
搜索中,PriorityQueue
用于确定接下来测试目标状态的child-node
到pop()
和/或扩展到更多子项,这种情况是具有最低值的child-node
。
这是我的问题:
我的当前PriorityQueue
如下:
S -> B = 1 + 3 = 4 // The cost to B + the heuristic value to goal
S -> A = 1 + 3 = 4 // The cost to A + the heuristic value to goal
S = 0 + 0 = 0 // Has been popped & expanded
S
是起始位置,A
和B
是子节点。
有两条路径分配了下一个最低值4,那么PriorityQueue
pop()
下一条路径是哪条路径?
答案 0 :(得分:0)
我已经了解到PriorityQueue
的性质,如果下一个项目的优先级值相等,那么结构只会被视为Queue
。
在这种情况下,这意味着由于S -> A = 1 + 3 = 4
是第一个,因此它将是第一个。