【问题标题】:What are the problems associated to Best First Search in Artificial intelligence?与人工智能中的最佳优先搜索相关的问题是什么?
【发布时间】:2012-12-19 10:30:47
【问题描述】:

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

谁能给我一个例子,说明这个搜索适合用来解决哪种问题?

【问题讨论】:

    标签: algorithm prolog artificial-intelligence state-space


    【解决方案1】:

    最佳优先搜索的问题:

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

                              2
                             / \  
                            /   \
                           /     \
                          1      1.5
                          |       |
                         1/2      1
                          |       |
                         1/4      0
                          |
                         1/8
                          |
                         1/16
                          |
                         ... 
      

    注意上面是admissible heuristic function,但是最好的第一次搜索永远不会得到解决方案,它会卡在无限分支中。

    解决方案:

    1. 为了克服它,我们可以使用统一算法(例如 Dijkstra 的 未加权图的算法或 BFS)
    2. 您可以结合使用“最佳优先搜索”和 Dijkstra, 被称为A* algorithm
      A* 算法实际上是一种贪婪的最佳优先算法,但不是根据h(v) 进行选择,而是使用f(v) = h(v) + g(v) 选择接下来要探索的节点(其中g(v) 是“到目前为止的成本”。该算法如果给出admissible heuristic function,则它是完整的(如果存在则找到解决方案)和最优(找到“最佳”解决方案)。

    何时使用最佳优先搜索:

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

    【讨论】:

    • 我会在最后一个列表中添加“4)当我们可以证明在我们的问题域中,最佳优先总是最优的”3 有点像这种情况。
    猜你喜欢
    • 2012-01-12
    • 2016-03-18
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2011-05-28
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多