在 A* 中,您得到的结果通常只有一条路径。根据 A*,给定的起点和终点是否有可能有 3 条推荐路径?所以返回的第二个是第二好的路径,第三个是第三好的路径..
我在想也许以某种方式修改启发式以反映第二和第三个最佳路径。你们怎么看?
更新: 我的实现是在 PHP 中,我使用的是封闭集。因此,如果有办法做到这一点,请告诉我。
在 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)
yield
关键字与 类似,不同之return
处在于可以在 a 之后重新输入该函数yield
以获得下一个解。要获得最好的三个:
solutions = []
i = 0
for sol in astar(start):
solutions.append(sol)
if i == 3:
break
i += 1
但是,如果您使用封闭集(即Russell & Norvig的图搜索算法),这将不起作用,因为在搜索最优解时,部分非最优解可能会被“截断”。