码迷,mamicode.com
首页 > 其他好文 > 详细

人工智能3:通过搜索进行问题求解

时间:2016-03-29 16:37:55      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

      形式化、搜索、执行。

一、形式化

      1. 初始状态

      2. 可能行动

      3. 转移模型

      4. 目标测试

      5. 路径耗散

二、算法性能

      1. 完备性

      2. 最优性

      3. 时间复杂度

      4. 空间复杂度

三、无信息搜索策略

      1. 宽度优先搜索

      先扩展根结点,接着扩展根结点的所有后继,然后再扩展它们的后继。一般地,在下一层的任何结点扩展之前,搜索树上本层深度的所有结点都应该已经扩展过。使用FIFO队列。

      性能:完备的、最优的。时间和空间需求太大。

      2. 一致代价搜索

      扩展的是路径消耗g(n)最小的结点n,也就是对任何单步代价函数都是最优的算法。可以通过将边缘结点集组合成按g值排序的队列来实现。目标检测应用于结点被选择扩展时,而不是生成时。也就是要先算所有的代价值。

      性能:如果没有为0的代价就是完备的。最优的。时间和空间消耗比宽度优先搜索还要打。

      3. 深度优先搜索

      总是扩展搜索树的当前边缘结点集中最深的结点。使用LIFO队列。最新生成的结点最早被选择扩展。效率严重依赖于使用图搜索还是树搜索。

      性能:图搜索是完备的,树搜索不完备。不是最优的。时间复杂度受限于状态空间的规模。空间复杂度性能非常好。当状态空间分支因子为b最大深度为m,只需存储O(bm)个结点。

      一种变形:回溯搜索。所用内存空间更少。

      4. 深度受限搜索

      解决了无穷路径的问题。

      性能:不完备。不是最优的。

      5. 迭代加深的深度优先搜索

      经常和深度优先搜索结合使用来确定最好的深度界限。做法是不断增大深度限制,直到找到目标。

      6. 双向搜索

       同时运行两个搜索,一个从初始状态向前搜索同时另一个从目标状态向后搜索,希望它们在中间某点相遇。可以这样实现:目标测试替换为检查两个方向的搜索的边缘结点集是否相交;如果交集不为空就找到了一个解。

四、有信息(启发式)搜索策略

      最佳优先搜索,结点是基于评价函数f(n)值被选择扩展的。大多数的最佳优先搜索算法的f由启发函数构成:

      h(n) = 结点n到目标结点的最小代价路径的代价估计值。

      1. 贪婪最佳优先搜索

      试图扩展离目标最近的结点,理由是这样可能可以很快找到解。只用启发式信息,即f(n)=h(n)。

      2. A*搜索:缩小总评估代价

      它对结点的评价结合了g(n),即到达此结点已经花费的代价,和h(n),从该结点到目标结点所化代价:f(n)=g(n)+h(n)=经过结点n的最小代价解的估计代价。

      保证最优性的条件:(1)h(n)是一个可采纳启发式,指它从不会过高估计到达目标的代价。(2)一致性:就是三角不等式,一条边长度不大于另两条边之和。

      3. 存储受限的启发式搜索

      迭代加深A*(IDA*)算法。和典型的迭代加深算法的主要区别是所用的截断值是f代价(g+h)而不是搜索深度。

      递归最佳优先搜索(RBFS)。MA*和SMA*算法。这几种是鲁棒的、最优的搜索算法,它们使用有限的内存;只要时间充足,它们能求解A*算法因为内存不足不能求解的问题。

人工智能3:通过搜索进行问题求解

标签:

原文地址:http://www.cnblogs.com/r1ce/p/5333337.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!