【问题标题】:Improve A star algorithm to search multiple goals in a maze改进A星算法在迷宫中搜索多个目标
【发布时间】:2016-09-21 02:08:59
【问题描述】:

如果我已经在迷宫中完成了 A* 算法以寻找到单个目标的最短路径(就像吃豆人游戏一样),我应该如何改进我当前的启发式(到目标的曼哈顿距离 + 到目前为止的旅行成本从一开始),这样我的算法将支持迷宫中的多个目标。基本上,我想找到通过迷宫中所有目标的最短路径。为了确保路径是最优的,假设我们忽略问题的一致性,启发式函数需要是可接受的。

我知道这就像旅行商问题,但现在我只处理相对少量的数据,所以我想继续使用 A start 算法。

欢迎提出任何想法。谢谢!

【问题讨论】:

    标签: algorithm a-star maze traveling-salesman


    【解决方案1】:

    A* 找到从一个点到另一个点的最短路径。

    您不能将约束添加到 A* 的允许路径(例如,必须沿途访问所有这些节点)并期望它仍然产生最短路径。

    您可以使用 A* 找出目标之间的距离(和路径),然后解决目标之间的旅行商问题(使用这些距离),以计算出访问目标的顺序,从而获得最短的整体路径。

    【讨论】:

    • 你能说得更具体点吗?我正在考虑使用星来计算目标之间的距离,然后应用最小生成树。但是我这里有一个迷宫而不是图表,这意味着在目标之间应用星号的可能路径不止一种……在弄清楚访问目标的顺序之前要做太多的准备工作……
    • 如果你有目标abcd,你可以使用A*来找到(a, b)(a, c)(a, d)之间的最短路径,(b, c)(b, d)(c, d)。这是一个可以解决旅行商问题的图表。如果你只有几个,尝试每一个排列就足够快了。
    【解决方案2】:

    您可以使用距离尚未访问的最近目标的距离;这样只有在访问了最后一个目标时它才会变为 0。

    【讨论】:

      【解决方案3】:

      选择 Dijkstra 算法而不是 A*。 因为 A* 算法不能应用于那些有很多目标节点的图。如果您有很多目标节点并且您不知道哪个最接近主节点,则 A* 不是非常理想的。这是因为它需要运行多次(每个目标节点一次)才能到达所有节点。

      参考: How does Dijkstra's Algorithm and A-Star compare? - Intellipaat Community

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-22
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        相关资源
        最近更新 更多