5

在 A* 中,您得到的结果通常只有一条路径。根据 A*,给定的起点和终点是否有可能有 3 条推荐路径?所以返回的第二个是第二好的路径,第三个是第三好的路径..

我在想也许以某种方式修改启发式以反映第二和第三个最佳路径。你们怎么看?

更新: 我的实现是在 PHP 中,我使用的是封闭集。因此,如果有办法做到这一点,请告诉我。

4

1 回答 1

2

如果你的语言支持回溯/生成器/迭代器/协程,这可以很容易地完成。

# 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图搜索算法),这将不起作用,因为在搜索最优解时,部分非最优解可能会被“截断”。

于 2011-03-05T14:52:11.580 回答