人工智能中搜索策略的探讨
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
是处于最优路经上的概率等 ; h ( x) 称为启发函数 ;
局部择优搜索的优点是搜索的复杂度小 ,能够纵深的查找
估价函数 f ( x) 表示从初始节点经过节点 x 到目标节点的 目标节点 ,但是缺点也是很明显的 ,它是一种不完备搜索 ,而且
最优路径的代价估价值 ,它的作用是估价 O PEN 表中各节点的 搜索的路径不一定是最佳路径 ;全局择优搜索的优点是它是一
用于估价节点重要性的函数称为估价函数 , 其一般形式 中 ,如果令 f ( x) = g ( x ) , 则它就成了代价树的广度择优搜索 ;
为 : f ( x) = g ( x ) + h ( x ) , g ( x ) 为从初始节点 S 0 到节点 x 已 如果 f ( x) = d ( x) (这里 d ( x ) 表示节点 x 的深度) , 则它就成
作为当前状态 。重复上述过程 ,直到目标状态出现或者不再有 节点到该节点路径上所付出的代价来决定 , 哪条路径付出的代
可供操作的状态和算符时为止 。
价小 ,相应的节点就作为它的父节点 。这是第 ( 6) 步所阐述的
在给出具体过程之前 , 首先介绍两个数据结构 ———O PEN 内容 。(4) 通过搜索所得到的图称为搜索图 , 由搜索图中的所 表和 CL OS ED 表 。O PEN 表用于存放刚生成的节点 ,其形式如 有节点及反向指针所构成的集合是一棵树 ,称为搜索树 。
30
福 建 电 脑 2004 年第 8 期
人工智能中搜索策略的探讨
田 中
(武警重庆市总队修理所 401147)
【摘 要】 在介绍了一般搜索策略的前提下 ,对盲目搜索和启发式搜索进行了探讨 , 进而介绍了几种常用的搜索 策略 ,并对各种搜索策略进行了比较 。最后对实际应用提出了建议 。 【关键词】 搜索 复杂度 启发式信息 估价函数 人工智能
效率 ,则 g ( x) 可以忽略 ,但此时会影响搜索的完备性 , 因此 , 在
这里我们对搜索的几种搜索策略做了简单阐述 ,我们可以
确定 f ( x) 时 ,要权衡各种利弊得失 ,使 g ( x) 与 h ( x ) 各占适当 清楚的看到 ,启发式搜索比盲目搜索要好得多 ,但是问题的关
的比重 。
键是如何确定估价函数 。如果估价函数确定的不好 ,那么搜索
(1) 一般搜索过程具有通用性 , 其他各种搜索策略都可以
有关的启发式信息 ,用以指导搜索朝着最有希望的方向前进 , 看作是它的一个特例 。各种搜索策略的区别是对 O PEN 表中
加速问题的求解过程并且找到最优解 。
的节点排序的准则不同 。( 2) 子节点中可能有些是当前扩展节
1 一般搜索过程
点的父节点 、祖父节点等 , 此时不能把这些先辈节点作为当前
②对于那些先前已在 G 中出现过的 M 成员 , 确定是否需 子节点放入到 O PEN 表的首部 , 并为其配置指向父节点的指
要修改指向父节点的指针 。
针。
③对于那些先前已在 G 中出现并且已经扩展了 M 的成
2. 2. 2 该过程与广度优先搜索的唯一区别是 :广度优先搜
员 ,确定是否需要修改其后继节点指向父节点的指针 。
基本思想 :首先把初始结点作为当前状态 ,选择适用的算 扩展节点的子节点 。余下的子节点记作集合 M , 并加入图 G
符对其进行操作 ,生成一组子状态 (或称后继状态 、后继节点 、 中 。(3) 一个新节点可能是第一次被生成的节点 , 也可能是先
子节点) ,然后检查目标状态是否在其中出现 。若出现 ,则搜索 前已作为其他节点的后继节点被生成过 , 当前又作为另一个节 成功 ,否则 ,按照某种策略从已经生成的状态中再选一个状态 点的后继节点被再次生成 。此时 , 对它的处理方法是 :根据原
表 1 。对于不同的搜索策略 ,节点在 O PEN 表中的排列顺序是
由上边介绍可知 , 问题的求解过程实际上就是搜索过程 ,
不同的 。
问题的求解的状态空间图是通过搜索逐步形成的 , 边搜索边形
状态节点
父节点
成 ,而且搜索每前进一步 ,就要检查一下是否到达了目标状态 , 这样就可尽量少生成与问题无关的状态 , 即节省了存储空间 ,
搜索分为盲目搜索和启发式搜索 。盲目搜索是按预定的
(7) 按某种搜索策略对 O PEN 表中的节点进行排序 。
控制策略进行搜索 ,由于搜索总是按预定的路线进行 ,没有考
(8) 转向 (2) 步 ;
虑到问题本身的特性 ,所以这种搜索具有盲目性 ,效率不高 ,不 说明 :
便于复杂问题的求解 。启发式搜索是在搜索中加入了与问题
点总是按照进入的顺序排列 , 先进入的节点排在前面 , 后进入 的节点排在后面 。扩展节点后将其子节点放入 O PEN 表的尾 部 ,并为每一个子节点都配置指向父节点的指针 。
2. 1. 2 其优先在于只要问题有解 ,它就可以找到问题的解 ,
但是其明显的缺点是搜索盲目性大 ,在一些复杂问题求解过程 中 (比如棋艺类) ,将会产生“信息爆炸”, 它的时间复杂度和空 间复杂度都是不能容忍的 。设每一个节点产生 m 各节点 ,问题 的解在第 n 层出现 , 其复杂度最小是 m ( n - 1) + 1 , 最大是
经实际付出的代价 ; h ( x) 是从节点 x 到目标节点 S g 的最优路 为广度择优搜索 ,所以广度优先搜索与代价树的广度择优搜索
径的估计代价 ,它体现了问题的启发性信息 , 其形式要根据问 是全局择优搜索的特例 。
题的特性确定 。例如 , 它可以是节点 x 到节点的距离 , 也可以
3. 5 局部 、全局择优搜索的区别
小复杂度是 n ;但是 ,如果目标节点不在此分支上 , 而该分支又 们选择节点的标准不一样 :深度优先搜索以子节点的深度作为
是一个无穷分支 ,则就不可能得到解 。所以深度优先搜索是不 选择标准 ,后生成的子节点先被考察 ; 代价树深度优先搜索以
完备的 ,即使问题有解 , 它也不一定能求得解 。尽可能找到问 各子节点到父节点的代价作为选择标准 , 代价小的优先选择 ;
3. 4 全局择优搜索
已解决问题的任何特性 。启发式搜索克服了上述缺点 ,它利用
每次总是从 O PEN 表的全体节点中选择一个估价值最小
搜索过程中的有用信息优化搜索 。
的节点 。这一点和代价树的广度优先搜索类似 , 但是不同之处wk.baidu.com
3. 2 估价函数
在于它的择优标准是估价函数 f 最小的节点 。在全局择优搜索
在该子节点的子节点中选择一个节点进行考察 , 一直如此向下
①对于那些未曾在 G 中出现过的 M 成员设置一个指向 搜索 。当到达某个子节点 ,且该子节点既不是目标节点又不能
父节点 (即节点 n) 的指针 ,并把他们放入 O PEN 表中 。
继续扩展时 ,才选择其兄弟节点进行考察 , 扩展节点 n 后将其
31
索是把节点 n 的子节点放入到 O PEN 表的首部 。仅此一点不 ( x) 对每一个子节点计算估价值 , 并选择最小者作为下一个要
同 ,就使得搜索的路线完全不一样 。
考察的节点 。扩展节点 n 后用估价函数 f ( x ) 计算每个子节点
2. 2. 3 在深度优先搜索中一旦进入某个分支 , 就将沿着该 的估价值 ,并按估价值从小到大的顺序依次放到 O PEN 表的首
入了一些条件而已 ,他们的复杂度相同 。
( x) = g ( x) ,这里 d ( x) 表示节点的深度 , 则局部择优搜索就成
3 启发式搜索
了深度优先搜索 。所以深度优先搜索和代价树的深度优先搜
3. 1 盲目式搜索中找到一个解 ,所需要扩展的节点数可能 索可看作是局部择优搜索的特例 。
很大 。因为这些节点的扩展次序完全是随意的 ,而且没有利用
考察之前 ,不对 n + 1 第层的节点进行扩展 。O PEN 表中的节
表2 搜索的一般过程如下 :
(1) 把初始节点 S 0 放入 O PEN 表 , 并建立目前只包含 S 0 的图 ,记为 G。
(2) 检查 O PEN 表是否为空 ,若为空则问题无解 ,退出 。 (3) 把 O PEN 表的第一个节点取出放入到 CL OS ED 表 ,并 记该节点为节点 n 。 (4) 考察节点 n 是否为目标节点 。若是 , 则求得了问题的 解 ,退出 。 (5) 扩展节点 n ,生成一组子节点 。把其中不是节点 n 先
m n ,其平均复杂度是
m(
n
-
1) + 1 2
+
mn。
2. 2 深度优先搜索
辈的那些子节点记作集合 M ,并把这些子节点作为节点 n 的子
2. 2. 1 深度优先搜索的基本思想是 :从初始节点 S0 开始 ,
节点加入到 G 中 。
在其子节点中选择一个节点进行考察 , 若不是目标节点 , 则再
(6) 针对 M 中子节点的不同情况 ,分别进行如下处理 :
索是将节点 n 的子节点放入到 O PEN 表的为步 ,而深度优先搜
© 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net
2004 年第 8 期 福 建 电 脑
3. 3 局部择优搜索
的结果可能还不如盲目式搜索 ,但是在一些简单问题中我们还
局部择优搜索是一种启发式搜索方法 , 是对深度优先搜索 是用盲目搜索为好 。
方法的一种改进 。其基本思想是 :当一个节点被扩展以后 ,按 f
参考文献 1 、傅清祥等. 算法与数据结构. 电子工业出版社 2 、严蔚敏等. 数据结构 (第二版) . 清华大学出版社 3 、王永庆. 人工智能原理与方法. 西安交通大学 4 、张福炎. 程序员级高级程序员级程序设计. 清华大学出版社
(上接第 34 页) 通过上面例子的设计说明 ,使用面向对象的思维方法 ,其实是 一个将程序设计思维方式从具体的编程技术当中抽象出来的
过程 ,而这个抽象的过程是自上而下的 ,较符合人类的思维习 惯 ,也就是先不考虑问题解决的细节 ,把问题的最主要的方面 抽象成为一个简单的框架 ,集中精力思考如何解决主要问题 , 然后在解决问题的过程中 ,再把问题的细节分割成一个一个小
题解所在的分支是深度优先搜索方法的关键 。
局部优先搜索以估价函数作为选择标准 , 哪一个子节点的值最
另外还有有界深度优先搜索 、代价树的广度优先搜索 、代 小就优先被选择 。另外 , 在局部择优搜索中 , 若令 f ( x ) = g
价树的深度优先搜索等 , 都是这两种盲目搜索的特例 , 其中加 ( x) ,则局部择优搜索就成为代价树的深度优先搜索 ; 若令 f
重要程度 , 决定它们在 O PEN 表中的次序 。其中 g ( x ) 指出了 种完备搜索 ,如果能够找到目标节点 ,那么它一定是最佳路径 ,
搜索的横向趋势 ,它有利于搜索的完备性 , 但影响搜索的效率 。 缺点是搜索时会产生“组合爆炸”,搜索的效率仍然不高 。
如果我们只关心到达目标节点的路径 , 并且希望有较高的搜索 4 结束语
又提高了求解效率 。
表1 CL OS ED 表用于存放将要扩展或者已经扩展的节点 ,其形式如
2 盲目搜索 盲目搜索又成为无信息搜索 ,一般用于求解比较简单的问
题。
表 2。
2. 1 广度优先搜索
编号
状态节点
父节点
2. 1. 1 基本思想 :从初始节点 S0 开始 ,逐层对节点进行扩 展并考察它是否为目标节点 ,在第 n 层的节点没有全部扩展并
分支一直向下搜索 。如果目标节点恰好在此分支上 , 则可较快 部 ,为每个子节点配置指向父节点的指针 。
的得到解 。如果选择的路径是对的 , 那么它空间复杂度将大大
深度优先搜索 、代价数的深度优先搜索以及局部择优搜索
减少 ,比如搜索的层数是 n ,每个节点扩展的节点是 m , 那么最 都是子节点作为考察范围的 , 这是他们的共同点 。不同的是他
问题 ,再专门去解决细节问题 。因而一旦牢牢的抓住了这一 点 ,我们就会发现在软件设计和开发过程中 ,总是会不知不觉 的运用面向对象的思维方法来设计和编写程序 ,并且程序的设 计和开发也变得不再那么枯燥 ,而一个合理运用面向对象技术 进行设计和架构的软件 ,更是具备了思维的艺术感 。最终使软 件系统更可靠 ,容易维护 ,风格一致 ,可重用 ,代码清晰 。