ahe*_*ang 5 algorithm a-star shortest-path
在A*中,通常你获得的结果只有一条路径.根据A*,对于给定的起点和终点是否有可能有3条推荐路径?所以第二个返回的是第二个最佳路径,第三个是第三个最佳路径.
我想的可能是以某种方式修改启发式以反映第二和第三条最佳路径.你们怎么想?
更新: 我的实现是在PHP中,我使用的是封闭集.所以,如果有办法做到这一点,请告诉我.
如果您的语言支持回溯/生成器/迭代器/协程,那么这可以很容易地完成。
# Python code
def astar(start):
q = [start] # priority queue
while len(q) > 0:
node = heappop(q)
if isGoal(node):
yield node
for x in successors(node):
heappush(q, x)
Run Code Online (Sandbox Code Playgroud)
该yield关键字与 类似return,只不过该函数可以在 a 之后重新输入yield以获得下一个解。为了获得最好的三名:
solutions = []
i = 0
for sol in astar(start):
solutions.append(sol)
if i == 3:
break
i += 1
Run Code Online (Sandbox Code Playgroud)
然而,如果您使用闭集(即Russell & Norvig的图搜索算法),这将不起作用,因为这样在搜索最佳解决方案时,部分非最佳解决方案可能会被“切断”。