人工智能第三版第二章笔记

第二章 盲目搜索

解决AI问题的三个最流行的方法:搜索、知识表示和学习

2.0 简介:智能系统中的搜索

很多算法搜索和排序使用表结构

2.1介绍状态空间图(state-space graph),典型案例:假币问题(False coin problem)2.2 生成-测试(generated-and-test)搜索范式还有贪心算法(greedy algorithm)和回溯法(backtracking),都将问题分成若干步骤。

如8各皇后放在国际棋盘,任意两个皇后都不占据同一行、同一列或同一对角线:2.3主要讲了盲目搜索(Blind Search,即无信息搜索)算法。盲目搜索算法是一种不需要使用问题域知识的搜索方法。典型的有广度优先搜索(BFS,breath first search)和深度优先搜索(Depth First Search,DFS),BFS消耗内存太多,DFS内存需求合理,但可能会因为偏离起始位置过远而错过相对靠近搜索起始位置的解。介于BFS和DFS之间的折中是迭代加深的DFS,可以将DFS有限的空间需求与BFS能找到解的确定性结合到一起。

2.1 状态空间图

状态空间图(state-space gragh)是对问题的一种表示方法。空间图的一条路径,对应某个具体问题的解。有时只需搜索问题的任意一个解即可,而有时需要找到一个最优解(最短路径)。知情搜索(Informer Search)法常可以发现问题的最优解,盲目搜索可寻求发现问题的任意一个解。

假币问题(False Coin Problem),有12枚硬币,已知其中一枚是假的或伪造的,但不知道这枚假币比真币轻还是重。为解决这问题,可以建模个过程,只称3次,即可找到那枚假币。

微型假币问题(Mini False Coin Problem),只涉及6枚硬币。

状态空间树(state-space tree),包含了问题可能出现的所有状态和这些状态之间所有可能的转换,有两种特殊类型的节点,其中一种是表示问题起始状态的起始节点,搜索始于起始节点,止于终点或目标状态。有时目标是找到一个解,有时是找到最小代价的解。

2.2 生成-测试范式(generate-and-test)

定义:先给出可能的解,再检查每个可能的解,看是否有候选解能够构成问题的解。

N皇后问题(n-Queens Problem)指将n个皇后放置在一个n*n的棋盘上,使得任何两个皇后都不互相攻击,即任何两个皇后都不占据相同的行、列或对角线。这些条件被称为问题的约束条件

一个可靠的生成器须给出满足问题约束的、大小为4的所有子集。若生成器能给出每个可能的解,那么生成器是完备的(complete).若某个给出的解被拒绝,那么这个解就不会再次被给出,那么生成器是非冗余(noredundant)的。若生成器没有给出明显不可行的解,那么它相对高效。若生成器有一些信息,允许其对给出的解做出一些限制,那么这个生成器是知情的(informed)

生成-测试范式的过程:

{while 没有找到解,但仍有候选方案

[生成可能的解

测试其是否满足所有的问题约束条件]

End While}

IF找到某个解,则宣布成功,并输出此解

Else宣布没有找到解

2.2.1 回溯法

完全枚举法(exhaustive enumeration),会查看所有情况以寻找问题的解,甚至在已经发现当前步骤不可能成功得到解的情况下,还可能从部分解开始进一步往后搜索。

回溯法(backstracking)是对完全枚举法的一种改进。针对某个问题,给出解的过程会被分成多个步骤。

2.2.2 贪心算法

贪心算法(greedy algorithm),也是先将一个问题分成几个步骤求解,其中每次只考虑一个输入,每次总是包含一个必须优化的目标函数(objiective function),典型的目标函数可是旅行距离、开销或时间。

2.2.3 旅行商问题

旅行商问题(Travelinh Salesperson Problem,TSP),也称旅行销售员问题。

分支定界(branch and bound)算法是广度优先搜索的一种变体,此算法中按照开销不减少的原则进行探索。

2.3 盲目搜索算法

有DFS深度优先搜索、BFS广度优先搜索和DFS-ID迭代加深的深度优先搜索,它们:

  1. 不使用启发估计 启发式估计会搜索最有希望得到解的路径前进
  2. 目标是找出给定问题的解。

2.3.1 深度优先搜索 DFS

尽可能快地深入树中进行搜索,每当搜索方法可做出选择时,就选择最左(最右)分支。

3拼图问题 8层

2.3.2 广度优先搜索BFS

从树的顶部到底部,按从左到右(或从右到左)的方式,可逐层访问节点。

三拼图问题,4层

2.4 盲目搜索算法的实现和比较

2.4.1 深度优先搜索的实现

搜索算法的共同做法,维护2张表,openlist开放表和clsed list封闭表,开放表包含了所有待探索的节点,而封闭表中则包含了所有已探索和不再考虑的节点。DFS搜索过程用栈存放,后进先出(LIFO)。

2.4.2 广度优先搜索的实现

广度优先搜索用队列来表示开放表。队列是先进先出(FIFO)

2.4.3 问题求解性能的衡量指标

完备性(complete)

最优性(optimal)

时间复杂度(time complexity)关注找到解要花费的时间—可以根据搜索期间生成(或扩展)的节点数量来衡量时间。

空间复杂度(space complexity)关注内存开销,用三个参数表示:1)节点的分支因子(branching factor记为b),参数d是最浅目标节点的深度,参数m是状态空间中所有路径的最大长度。

2.4.4 DFS和BFS的比较

当1.树很深2.分支因子不太大。3.解出现在树中的位置相对较深时,优先DFS

当1.分支因子不太大2.解出现在树中位置在合理的深度3.所有的路径都不是特别深时优先BFS

DFS-ID 执行一个DFS算法,其状态空间的深度的界为0,若没找到目标就执行另一个DFS算法,此时深度的界为1。继续以此方式搜索,深度的边界都会增加1.

2.5 本章小结

生成-测试范式是解决问题的直接方式,生成器给出问题的可能解,测试器确定它们的有效性。好的生成器是完备、非冗余并且知情的。

完全枚举法是一种查看所有可能解来寻找解的搜索过程。

回溯法一旦发现一个部分违反了问题的约束条件,就放弃这个部分解,这样就缩短了搜索时间。

贪心算法在求解城市间最短路径的问题中非常有用,但不适用解决所有问题,如解决旅行商问题。

BFS在探索求解问题时,按层次遍历树,(在各种约束下)是完备和最优的;但空间需求的过量阻碍其发展;DFS有可能迷失在无限路径中,但DFS的空间需求相对合理,既不是完备的也不是最优的。DFS-ID执行的是一个完备的DFS搜索过程,具备DFS和BFS的优点,即DFS的中等存储空间需求以及BFS的完备性和最优性。

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值