人工智能中的最佳优先搜索有哪些问题?

时间:2012-12-19 10:30:47

标签: algorithm prolog artificial-intelligence state-space

我知道一般问题包括局部最大值和高原但是我很好奇是否有更多与此特定搜索相关的问题以及我为克服这些问题而采取的最佳行动方案。

有人也可以举例说明这种搜索可以用于哪种问题吗?

1 个答案:

答案 0 :(得分:13)

最佳首次搜索的问题:

  1. 很贪心。在许多情况下,它会带来非常快速的解决方案 (因为您开发的节点数量不会增加 指数地,它随着深度的增加而线性增加 解决方案!),但它通常没有优化,因为你的 启发式函数有一些错误,有时会出错 回答下一个要探索的节点。
  2. 无限分支也存在问题。假设你是 跟随分支,其中深度为i的节点具有启发式值 h(v_i) = 2^-i。你永远不会达到零,但最先贪得无厌 将继续开发这些节点。
    示例:

                            2
                           / \  
                          /   \
                         /     \
                        1      1.5
                        |       |
                       1/2      1
                        |       |
                       1/4      0
                        |
                       1/8
                        |
                       1/16
                        |
                       ... 
    
  3. 请注意,上面是admissible heuristic function,但是最好的第一次搜索永远不会得到解决方案,它会陷入无限分支。

    <强>解决方案:

    1. 为了克服它,我们可以使用一个统一的算法(如Dijkstra的 算法或未加权图的BFS)
    2. 你可以结合使用“最佳第一搜索”和Dijkstra 被称为A* algorithm
      A *算法实际上是一种贪婪的最佳第一算法,但您没有根据h(v)进行选择,而是使用f(v) = h(v) + g(v)选择要探索的节点(其中g(v)是“到目前为止成本“。算法是完整的(找到解决方案,如果存在)和最优(找到”最佳“解决方案),如果它被赋予admissible heuristic function
    3. 何时使用Best First Search:

      1. 如果你有一个完美的启发式(在文献中表示为h*),最好的第一次搜索将找到一个最佳解决方案 - 而且速度很快。
      2. 如果你不关心最佳解决方案,你只想快速找到一个解决方案 - 它通常可以解决问题(但你必须小心无限分支问题)。
      3. 当我们使用A *时,我们实际上使用了最佳的首次搜索 - 但是在f:V->R而不是h:V->R上。