一尘不染

如何使用A *算法找到最佳的三条路线

algorithm

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

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

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


阅读 244

收藏
2020-07-28

共1个答案

一尘不染

如果您的语言支持回溯/生成器/迭代器/协程,则可以轻松完成此操作。

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

2020-07-28