人工智能中,搜索问题一般包括两个重要的问题:

  1. 搜索什么:通常指目标
  2. 在哪里搜索:即搜索空间,通常指一系列状态的汇集,因此也称为状态空间

目录

[隐藏]

搜索方式

按是否使用启发式信息分

按问题的表示方式分

  • 状态空间搜索
  • 与/或树搜索

搜索策略

宽度优先搜索

宽度优先搜索算法是沿着树的宽度遍历树的节点,如果发现目标,则算法中止。属于盲目搜索。宽度优先搜索的实现一般采用open-closed表。

深度优先搜索

深度优先搜索沿着树的最大深度方向生成节点并与目标节点进行比较,只有当上次访问的节点不是目标节点,而且没有其他节点可以生成的时候,才转到上次访问节点的父节点,然后搜索该节点的其他子节点。因此深度优先搜索也称为回溯搜索。它既不是完备的,也不是最优的。有时候,某些特定的问题会产生大量重复的节点。例如“八数码”问题就是这样的,当每次运用向上、向下、向左、向右移动空格的算符时,可能产生与已经产生的节点重复的节点。当再次搜索到这个重复节点时,由于应用的算符基本一致,还会产生重复,所以为了节约时间和存储空间,往往在宽度优先算法中设立一个机制,用来删除这些重复的节点,以提高效率。

迭代加深搜索

对深度优先搜索进行了一定改进,对搜索树的深度进行控制,即有界深度优先搜索

但是深度限制值d的选取是一个问题,因此试图尝试所有可能的深度限制,即在找到目标之前,通过迭代不断增大d以保证完备性和最优性。

启发式OR图搜索算法

AND-OR图启发式搜索


一个特殊问题博弈

约束满足搜索


搜索策略还可以指在使用搜索引擎中所使用的策略,它通常是搜索之母,一个好的搜索过程必定有一个好的搜索策略来支持。

评价准则

  • 完备性
  • 时间复杂性
  • 空间复杂性
  • 最优性

 

树搜索算法 (2008-07-08 21:27:51)
哈工大计算机科学与工程系的骆吉洲老师的《算法导论》PPT写得很不错,摘录如下
 
H ill Climbing算法
    1. 构造由根组成的单元素栈S;
    2.  If Top(S)是目标节点  Then  停止;
    3.  Pop(S);
    4.  S的子节点按照其启发测度由大到小的顺序压入S; 
    5.  If  S空  Then  失败  Else  goto 2.
 
Best-First Search算法
  1. 使用评价函数构造一个堆H, 首先构造由根组成的单元素堆;
  2.  If H 的根 r 是目标节点Then停止;
  3.  从 H 中删除 r, 把 r 的子节点插入H;
  4.  If H 空 Then 失败 Else goto 2.
 
BBS(分支界限策略)的原理
  一边搜索一边记录以前搜索过的最大(最小)界,以及时剪除不必要的搜索
  产生分支的机制(使用前面的任意一种策略)
  产生一个界限(可以通过发现可能解)
  进行分支界限搜索, 即剪除不可能产生优化解的分支.
 
A*算法与分支界限策略的比较
  分支界限策略是为了剪掉不能达到优化解的分支
  分支界限策略的关键是“界限”
  A*算法的核心是告诉我们在某些情况下, 我们得 
        到的解一定是优化解, 于是算法可以停止
  A*算法试图尽早地发现优化解
  A*算法经常使用Best-first策略求解优化问题
 
A*算法关键—代价函数
  对于任意节点n
  g(n)=从树根到n的代价
  h*(n)=从n到目标节点的优化路径的代价
  f*(n)=g(n) + h*(n)是节点n的代价
What is the value of h*(n)?
  不知道!
  于是, f*(n)也不知道
估计h*(n)
  使用任何方法去估计h*(n), 用h(n)表示h*(n)的估计
  h(n)<=h*(n)总为真
  f(n)=g(n)+h(n)<=g(n)+h*(n)=f*(n)定义为n的代价

 
A*算法
  (1). 使用Best-first策略搜索树;
  (2). 节点n的代价函数为f(n)=g(n)+h(n), g(n)是
            从根到n的路径代价,  h(n)是从n到某个目
            标节点的优化路径代价;
  (3). 对于所有n, h(n)h*(n);
  (4). 当选择到的节点是目标节点时, 算法停止, 返回一个优化解.

附注:STL里面进行堆操作可用下面函数。
make_heap 建大顶堆
sort_heap 利用堆进行堆排序
push_heap 和 make_heap 插入元素到堆里
pop_heap 删除堆顶元素
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐