【问题标题】:I need an algorithm to find the best path我需要一种算法来找到最佳路径
【发布时间】:2010-01-03 11:53:31
【问题描述】:

我需要一种算法来找到寻路问题的最佳解决方案。问题可以表述为:

  • 在起点,我可以沿着多条不同的路径前进。
  • 在每个步骤中,还有多个可能的选择。
  • 每个步骤都有两种可能的操作:
    • 确定路径是否可接受的边界条件。
    • 确定路径是否已到达最终目的地并可以被选为最佳路径的条件。
  • 在每一步都可以消除许多路径,只让“好的”路径增长。

我希望这充分描述了我的问题,也是一个可能的蛮力解决方案。

我的问题是:蛮力是解决问题的最佳/唯一方法吗,我还需要一些关于算法最佳编码结构的提示。

【问题讨论】:

  • 有什么方法可以确定中间路径(即,经过几个步骤,但尚未完成)当前路径是否优于另一个潜在路径?换句话说,有没有办法比较两条尚未到达目的地的路径,并确定一条路径是否比另一条路径看起来更好?而且......我们实际上在谈论多少个步骤?正常情况和最坏情况?
  • 如果您提供有关您的问题的详细信息的更多信息将会很有帮助。
  • @stkx A* 是最优的,如果启发式从不高估到目标的真实距离。

标签: algorithm


【解决方案1】:

看看A*,用长度作为边界条件。

http://en.wikipedia.org/wiki/A%2a_search_algorithm

【讨论】:

    【解决方案2】:

    您正在寻找某种状态空间搜索算法。在不了解具体问题的情况下,很难推荐一个而不是另一个。

    如果您的空间是开放式的(无限树搜索),或者几乎是开放式的(例如国际象棋),您需要一种算法来修剪没有前途的路径,并选择有前途的路径。 alpha-beta 算法(被许多OLD国际象棋程序使用)立即浮现在脑海中。

    A* 算法可以给出很好的结果。从 A* 中获得好的结果的关键是选择一个好的启发式(加权函数)来评估当前节点和各种后继节点,以选择最有希望的路径。简单的路径长度可能不够好。

    Elaine Rich 的 AI 教科书(旧书但很好)在各种搜索算法上花费了大量时间。全面披露:在 UT Austin 的本科期间,我是本文的实验对象之一。

    【讨论】:

      【解决方案3】:

      您是否尝试过breadth-first search? (BFS),如果长度是最佳路径的标准 您还必须修改算法以忽略“不可接受的路径”

      【讨论】:

        【解决方案4】:

        如果您的问题与您描述的完全一样,您有两种选择:深度优先搜索和广度优先搜索。

        深度优先搜索会考虑一条可能的路径,一直追到最后(或只要它可以接受),然后才与其他路径进行比较。

        广度优先搜索可能更合适,在每个路口,您都会考虑所有可能的后续步骤,并使用一些分数来排列每个可能步骤的执行顺序。这使您可以确定搜索的优先级并更快地找到好的解决方案,(但要证明您已经找到了最佳解决方案,它所花费的时间与深度优先搜索一样长,并且不太容易并行化)。

        但是,您的问题也可能适用于Dijkstra's algorithm,具体取决于您的问题的详细信息。如果是,那是更好的方法!

        这也是开发您自己的算法的一个很好的起点,该算法的性能比迭代搜索好得多(如果这样的算法实际上是可能的,它可能不是!)

        【讨论】:

          【解决方案5】:

          A* 加上洪水填充和动态规划。它很难实现,很难在一个简单的帖子中描述,而且太有价值,不能放弃,所以很抱歉我不能提供更多,但是如果你想去的话,搜索洪水填充和动态编程会让你走上这条路路线。

          【讨论】:

            猜你喜欢
            • 2013-12-03
            • 1970-01-01
            • 2021-06-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-17
            • 1970-01-01
            相关资源
            最近更新 更多