通常在A *中获得的结果只是一条路径。给定的出发地和目的地是否有可能根据A *设置3条推荐路径?所以返回的第二条是第二条最佳路径,第三条是第三条最佳路径。

我正在考虑也许可以通过某种方式修改启发式方法以反射(reflect)出第二和第三条最佳路径。.你们怎么看?

更新:
我的实现使用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相似,不同之处在于,可以在yield之后重新输入该函数以获取下一个解决方案。要获得最好的三个:
solutions = []
i = 0
for sol in astar(start):
    solutions.append(sol)
    if i == 3:
        break
    i += 1

但是,如果您使用封闭集(即Russell & Norvig的图搜索算法),则此方法将不起作用,因为在搜索最佳解时,部分非最优解可能会被“截断”。

10-08 04:42