人工智能3:通过搜索进行问题求解
形式化、搜索、执行。
一、形式化
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*算法因为内存不足不能求解的问题。