【人工智能】搜索策略

搜索的两层含义:

  1. 找到从初始事实到问题最终答案的一条推理路线。
  2. 时间、空间复杂度最小。

盲目搜索

OPEN表:存放将要刚生成的节点。
【人工智能】搜索策略_第1张图片
CLOSE表:存放要扩展或已经扩展的节点。
【人工智能】搜索策略_第2张图片

上述两图要记住父结点编号,以便于为扩展节点设置指向父节点的指针。

一般的搜索过程:
step1:初始节点S0放入OPEN表,并建立只包含S0的图(记作G)。

step2:OPEN表为空,退出,无解。

step3:(OPEN表非空)取OPEN表的第一个节点,放入CLOSE表中,记为n。

step4:若n为目标节点,搜索成功,并从n逆向回溯到S0的路径。

step5:(n不是目标节点)根据n生成一组子节点。将其中不是n节点的先辈的子节点记作集合M,并M中的节点加入G中。

step6:针对M的不同情况进行一下处理
①M中未曾在G中出现过的节点,设置一个指向父节点(n)的指针,并加入OPEN表中。
②M中已经在G中出现过的节点,确认是否需要修改指向父节点的指针。
③M中已经在G中出现过且已经扩展过的节点,确认是否需要修改其后继节点指向父节点的指针。

step7:按某种策略对OPEN表中的节点排序。

step8:转step2

下面出现的广搜(宽度优先搜索)、深搜(包括有界深搜)、等代价搜索对OPEN表排序的策略不同。


1.宽度优先搜索

这种搜索是逐层进行,在对下一层任一节点进行搜索之前,必须搜索玩本层的所有节点。
宽度优先搜索在扩展节点时,是将每个扩展节点放入OPEN尾部,并配置指向父节点n的指针。


2.深度优先搜索

扩展结点的策略:子节点放置在OPEN表首部,并配置指向父节点n的指针。
关于有界深搜:
设定了一个搜索深度最大值dm。其中初始节点是0,其他节点是父节点深度再+1。
因此在算法执行期间,扩展节点之前还要判断当前搜索深度是否等于dm,如果等于转到step2


3.代价树搜索

此时的搜索树的每条边都有代价
g(n):初始节点S0到节点n的代价。
c(n1,n2):父节点n1到子节点n2的代价。
因此有g(n2) = g(n1) + c(n1,n2)

代价树广搜

扩展节点时,将n节点的子节点ni(i = 1,2,3…)加入OPEN表,设置指向父节点的指针,对OPEN表中的全部节点按g(ni)从小到大顺序重新排序。

代价树深搜

扩展结点时,将n的节点的子节点ni(i = 1,2,3…)按边代价从小到大的顺序放入OPEN表的首部,并设置指向父节点的指针。


作业题1
列出图中树的访问序列以满足下列两种搜索策略,并写出搜索过程中的OPEN表和CLOSE表。(在所有情况下都选择最左分支优先访问,设节点12为目标节点):
(1)深度优先搜索
(2)广度优先搜索【人工智能】搜索策略_第3张图片
深度优先搜索:

OPEN CLOSE
1
4,3,2 1
6,5,4,3 1,2
6,4,3 1,2,5
11,10,4,3 1,2,5,6
11,4,3 1,2,5,6,10
4,3 1,2,5,6,10,11
7,4 1,2,5,6,10,11,3
13,12,4 1,2,5,6,10,11,3,7
13,4 1,2,5,6,10,11,3,12
  1. 既要满足深搜在扩展OPEN表时将扩展结点放入OPEN表的头部,又要满足题目选择最左分支的情况(就是从引入CLOSE表的n节点的子节点集合M中,选取其序号最小的节点,比如对于n=2,子节点引入OPEN的顺序为6,5,小的序号是5,也就是下一步要扩展到最左节点)
  2. 关于深搜将扩展结点放入OPEN表首部,此博客有详细图示

广度优先搜索:

OPEN CLOSE
1
2,3,4 1
3,4,5,6 1,2
4,5,6,7 1,2,3
5,6,7,8,9 1,2,3,4
6,7,8,9 1,2,3,4,5
7,8,9,10,11 1,2,3,4,5 ,6
8,9,10,11,12,13 1,2,3,4,5 ,6,7
9,10,11,12,13 1,2,3,4,5 ,6,7 ,8
10,11,12,13 1,2,3,4,5 ,6,7 ,8,9
11,12,13 1,2,3,4,5 ,6,7 ,8,9,10
12,13 1,2,3,4,5 ,6,7 ,8,9,10,11
13 1,2,3,4,5 ,6,7 ,8,9,10,11,12

作业题2
根据右边的交通图,分别利用代价树的广度优先搜索哟和代价树的深度优先搜索求出从A点出发到达E点的路径
【人工智能】搜索策略_第4张图片
1.广搜:

OPEN g(ni) CLOSE g(ni)
A
C1,B1 3,4 A 0
B1,D1 4,5 A,C1 0,3
D1 ,E1,D2 5,6,8 A,C1,B1 0,3,4
E1,D2 ,E2 6,8,8 A,C1 ,B1,D1 0,3,4,5
D2,E2 8,8 A,C1 ,B1,D1,E1 0,3,4,5,6

所以路线为:A——B(B1)——E(E1
【人工智能】搜索策略_第5张图片
2.深搜:

OPEN c(ni,nj) CLOSE g(ni)
A
C1,B1 3,4 A 0
D1 ,B1 2,4 A,C1 0,3
E1,B1,B2 3,4,4 A,C1,D1 0,3,5
B1,B2 4,4 A,C1 ,D1,E1 0,3,5,8
【人工智能】搜索策略_第6张图片

启发式搜索

估价函数f(x):g(x) + h(x)
g(x):从初始节点S0到约束节点x的实际代价
h(x):从约束节点x到目标节点Sg最优路径的估计代价

h(x)体现的问题自身的启发性,被称为启发函数

1.局部择优选择

扩展结点的方式:计算n的子节点的f(x),并按从小到大的顺序放入OPEN表首部

“局部”的含义:只在子节点的范围考察下一节点。

2.全局择优选择(有序搜索算法)

扩展结点的方式:计算了n的每个子节点的f(x)并加入OPEN后,需要对OPEN表中的所有节点按f(x)从小到大排序。

3.A*算法

【人工智能】搜索策略_第7张图片

A*算法步骤:
【人工智能】搜索策略_第8张图片

  1. ④中就是比较新的g值(g(SUC))和旧的g值(g(OLD)),新的g值小,就要修改SUC节点的f值,并且修改父节点为BESTNODE(先前的节点是BESTNODE的父节点)
  2. ⑥中SUCCESSOR在CLOSE表,就继续⑦
  3. 更详细的A*算法:有手写过程

关于h(n)的选择:(八数码问题)

  1. 选择一:节点n中不在目标状态中相应位置的数码个数
    尽管并不知道h*(n)具体为多少,但当采用单位代价时,通过对“不在目标状态中相应位置的数码个数”的估计,可以得出至少需要移动h(n)步才能够到达目标,显然h(n)≤h*(n)。因此它满足A*算法的要求。
    【人工智能】搜索策略_第9张图片
  2. 定义启发函数h(n)=p(n)为节点n的每一数码与其目标位置之间的距离总和
    显然有ω(n)≤p(n)≤h*(n),相应的搜索过程也是A*算法。
    然而,p(n)比ω(n)有更强的启发性信息,由h(n)=p(n)构造的启发式搜索树,比h(n)=ω(n)构造的启发式搜索树节点数要少。
    【人工智能】搜索策略_第10张图片
    【人工智能】搜索策略_第11张图片

你可能感兴趣的:(课程复习笔记,人工智能)