3搜索问题-启发式搜索
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CLOSED表: 1)( ) 2)(s(4)) 3)(s(4) B(4)) 4)(s(4) B(4) D(5)) 5)(s(4) B(4) D(5) E(5)) 6)(s(4) B(4) D(5) E(5) I(5)) 7)(s(4) B(4) D(5) E(5) I(5) K(5))
5
C(6)
2 8 3 1 4 D(5) 7 6 5
E(5)
F(6)
8 3 2 1 4 7 6 5
2 8 3 7 1 4 6 5
2 3 1 8 4 I(5) 7 6 5 1 2 3 8 4 7 6 5
6
2 3 1 8 4 7 6 5
J(7)
G(6)
H(7)
K(5)
1 2 3 7 8 4 6 5
L(5)
A算法的表现极大地依赖于评价函数,特别是h(n), 即:从节点n到目标节点最佳路径的估计耗散 假定h*(n)表示节点n到目标节点最佳路径的实际耗 散 如果 h(n)> h*(n) , 搜索的节点数少,搜索范围小, 效率高,但不能保证得到最优解。 如果h(n)<= h*(n) ,这种情况下,搜索的节点数多, 搜索范围大,效率低,但能得到最优解
5 5 5 5 5
A*算法
◦ 当h(n)<=
h*(n) 时,同时满足完备性和最优
性要求 ◦ h(n)越接近于真实耗散h*(n),算法的搜索效 率越高,对内存和时间的需求越小 ◦ 如果满足h(n)= h*(n),是最完美的A*算法 ◦ h(n)的设计是A*算法的核心,也是最困难的 地方
◦ 6-1) ADD(mj, Open); ◦ 6-2) IF f(n→mk) <f(mk) THEN f(mk):=f(n→mk); ◦ 6-3) IF f(n→ml) < f(ml) THEN f(ml):=f(n→ml); ADD(ml,Open);
7. Open中的节点按f 值从小到大排序;
h(S0)=4
例:八数码问题
◦ 启发函数2: h2(n)=所 有数码到目标位置的距 离和(曼哈顿距离)
问题1:图中S0状态h(S0) 是什么, h*(S0) 又是什 么 问题2:这个启发函数是 否一定满足h(n)<= h*(n)
2 8 3 1 6 4 7 5 S0 1 2 3 8 4 7 6 5 Sg
数码1:1 数码2:1 数码3:0 数码4:0 数码5:0 数码6:1 数码7:0 数码8:2
h2(S0)=5
OPEN表
2 8 3 1 6 4 7 5 S0 1 2 3 8 4 7 6 5 Sg
节点 父节点编号 f(n)=g(n)+h(n)
S0
5
0+5
2 8 3 1 6 4 7 5 S1
2 8 3 1 4 7 6 5 S2
s
扩展n后新生成的子节点m1({mj}) 、
m2({mk}) 、m3({ml})分别计算评
f(n)
n
价函数值:
f(m1)=g(m1)+h(m1)
f(m3)
m3 m1
f(m1)
m2
f(m2)
f(n,m2)=g(n,m2)+h(m2)
f(n,m3)=g(n,m3)+h(m3)
f(m31)
m31
8. GO LOOP;
A算法由一般的图搜索算法改变而成。算法第7步每 次按照f(n)值的大小对Open表中的元素进行排序,
f(n)值小的节点排在前面,而f(n)值大的节点则放在
Open表的后面,这样每次扩展节点时,都选择当前
f(n)值最小的节点来优先扩展。
A算法是按f(n)递增的顺序来排列Open表中节点的, 因而优先扩展f(n)值小的节点,体现了好的优先搜索 的思想,所以算法A是一个好的优先搜索策略。
2 3 1 8 4 7 6 5 S5
h(s1)=1+1+0+0+0+1+1+2 h(s2)=1+1+0+0+0+0+0+2 h(s3)=1+1+0+0+1+1+0+2 h(s4)=2+1+0+0+0+0+0+2 h(s5)=1+1+0+0+0+0+0+1 h(s6)=1+1+0+1+0+0+0+2 h(s7)=1+0+0+0+0+0+0+1 h(s8)=1+1+1+0+0+0+0+1 h(s9)=0+0+0+0+0+0+0+1 h(s10)=0+0+0+0+0+0+0+0 h(s11)=0+0+0+0+0+0+1+1
是
失败
否 选取OPEN表中f值最小的节点i放入CLOSED表
i为目标节点吗?
是
成功
否 扩展i,得后继节点j,计算f(j),提供返回 节点i的指针,利用f(j)对OPEN表重新排 序,调整亲子关系及指针
有序搜索算法框图
1. Open:=(s),f(s):=g(s)+h(s); 2. LOOP: IF Open=( ) THEN EXIT(FAIL); 3. n:=FIRST(OPEN); 4. IF GOAL (n) THEN EXIT(SUCCESS); 5. REMOVE (n, Open), ADD(n, Closed); 6. EXPAND(n)→ (mi),把mi作为n的后继节点添入G,计算 f(n→mi)=g(n→mi)+h(mi);
1+6 1+4 1+6 2+5 2+3 2+5 3+2 3+4 4+1 5+0 5+2
CLOSED表
S9
节点 父节点编号 f(n)=g(n)+h(n)
1 2 3 8 4 7 6 5 S10
1 2 3 7 8 4 6 5 S11
0 1 2 3 4 5
S0
5
S2 S5 S7 S9 S10
0 1 2 3 4
2 3 1 8 4 7 6 5 S9
1 2 3 8 4 7 6 5 S11
2 3 1 8 4 7 6 5 S10
CLOSED表
编号 节点 父节点编号 f(n)=g(n)+h(n)
0 1 2 3 4 5 6
S0 S2 S4 S5 S9 S11 S12 0 1 1 3 4 5
4 4 5 5 5 5 5
1 2 3 8 4 7 6 5 S12
评价函数,也称为启发函数提供问题的启发性信息, 按其用途划分,可分为以下三类:
◦ 用于扩展节点的选择,即用于决定应先扩展哪一个节点, 以免盲目扩展 ◦ 用于生成节点的选择,即用于决定应生成哪些后续节点, 以免盲目地生成过多无用节点 ◦ 用于删除节点的选择,即用于决定应删除哪些无用节点, 以免造成进一步的时空浪费
2 8 3 1 4 7 6 5 S4
2 8 3 1 4 7 6 5 S6
2 3 1 8 4 7 6 5 S7
1 2 3 8 4 7 6 5
2 3 1 8 4 7 6 5 S8
S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11
编号
0 0 0 1 1 1 2 2 3 4 4
7 5 7 7 5 7 5 7 5 5 7
g*(n):从s到n的最短路径的耗散值 h*(n):从n到g的最短路径的耗散值 f*(n)=g*(n)+h*(n):从s经过n到g的最短路径的 耗散值 g(n)、h(n)、f(n)分别是g*(n)、h*(n)、f*(n)的估 计值
开始
算法
把S放入OPEN表, 计算估价函数 f (s)
OPEN表为空表?
1
启发式搜索,也称为有信息搜索,借助问题的特定 知识来帮助选择搜索方向 在搜索过程中对待扩展的每一个节点进行评估,得 到最好的位置,再从这个位置进行搜索直到目标。 启发式搜索的目的是省略大量无谓的搜索路径,提 到效率。 在启发式搜索中,对节点的评价是十分重要的,评 价函数是搜索成败的关键。
1 2 3 7 8 4 6 5 S13
由CLOSED表可知,解路径为S0-S2-S5-S9-S11-S12
2 8 3 1 6 4 7 2 8 3 1 6 4 7 5
3
s(4)
1
A(6)
2 8 3 1 4 7 6 5 2 3 1 8 4 7 6 5
2
B(4)
4
2 8 3 1 6 4 7 5 2 8 3 1 4 7 6 5
利用知识来引导搜索,达到减少搜索范围,降低问 题复杂度的目的。 启发信息的强度
◦ 强:降低搜索工作量,但可能导致找不到最优解 ◦ 弱:一般导致工作量加大,极限情况下变为盲目搜索,但 可能可以找到最优解
引入启发知识,在保证找到最佳解的情况下,尽可 能减少搜索范围,提高搜索效率。
定义一个评价函数f,对当前的搜索状态进行评估, 找出一个最有希望的节点来扩展。
评价函数的格式: f(n) = g(n) + h(n) f(n):评价函数 h(n):启发函数 g(x)——从初始节点S0到节点x的实际代价; h(x)——从x到目标节点Sg的最优路径的评估代价, 它体现了问题的启发式信息,其形式要根据问题的特 性确定,h(x)称为启发式函数。
f(m32)
m32
按第6步比较不同路径的耗散值并
进行相应的指针修正.
图2-12 搜索示意图
2 8 3 1 6 4 7 5
1 2 8 7 6
3 4 5
定义评价函数: f(x)=d(x)+w(x) d(x)表示节点在x搜索树中的深度, w(x)表示节点x中不在目标状态中相应位置的数码 个数,w(x)就包含了问题的启发式信息。 一般来说某节点的w(x)越大,即“不在目标位” 的数码个数越多,说明它离目标节点越远。
对初始节点S0,由于d(S0)=0, w(S0)=5,因此f(S0)=5。 在搜索过程中除了需要计算初始节点的评估函数 外,更多的是需要计算新生节点的评估函数。
1 2 2 8 8 1 6 7
3 3 4 5 4 5
7 6
w(n) =4
2 8 3 1 6 4 7 5 S0
1 2 3 8 4 7 6 5 Sg
满足h(n)<= h*(n) 条件的A搜索,称为A* (Astar)搜索 A* 搜索中,h(n)越接近h*(n) ,搜索效率越高 宽度优先算法可以看作A*算法的特例,即:g(n) 是节点所在的层数,h(n)=0 代价树宽度搜索也可以看作A*算法的特例,即: g(n)是节点n的实际路径耗散,h(n)=0 跟前两个算法一样,A*算法也具有完备性和最优 性
OPEN表
节点 父节点编号 f(n)=g(n)+h(n)
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 0 0 0 1 1 1 2 2 3 3 4 5 5
4 6 4 6 5 5 6 6 7 5 7 5 5 7
2 8 3 1 6 4 7 5 S1
2 8 3 1 4 7 6 5 S2
1 2 3 8 4 7 6 5
目标
M(7)
OPEN表: 1)初始化(s(4)) 2)第一循环结束(B(4) A(6) C(6)) 3) 第二循环结束 (D(5) E(5) A(6) C(6) F(6)) 4) 第三循环结束 (E(5) A(6) C(6) F(6)G(6) H(7)) 5) 第四循环结束(I(5) A(6) C(6) F(6) G(6) H(7)J(7)) 6) 第五循环结束 (K(5) A(6) C(6) F(6) G(6) H(7) J(7)) 7) 第六循环结束(L(5) A(6) C(6) F(6) G(6)H(7) J(7) M(7)) 第七循环结束 在算法第4步成功退出
一个节点n的评价函数的构造通常由两部分构成 ◦ 从初始节点到当前节点n的路径耗散 g (n) ◦ 从当前节点n到目标节点的期望耗散 h(n) 即:评价函数可表示为:
f (n ) g (n ) h(n )
这两部分里, g (n) 通常是比较明确的,容易得到 而 h(n) 难以构造,也没有固定的模式,需要根 据具体问题分析
2 3 1 8 4 7 6 5 S5
2 8 3 1 6 4 7 5 S3
0+4 1+5 1+3 1+5 2 +3 2+3 2+4 3+3 3+4 3 +2 3+4 4 +1 5+0 5+2
2 8 3 1 4 7 6 5 S4
2 8 3 1 4 7 6 5 S6
8 3 2 1 4 7 6 5 S7
2 8 3 7 1 4 6 5 S8
例:八数码问题
◦ 启发函数1:h1(n)=不在位的 数码的总数
问题1:图中S0状态h(S0)是什么, h*(S0) 又是什么 问题2:这个启发函数是否一定 满足h(n)<= h*(n) 问题3:对于八数码问题,还能 提出其他的启发函数吗?
2 8 3 1 6 4 7 5 S0 1 2 3 8 4 7 6 5 Sg
5
C(6)
2 8 3 1 4 D(5) 7 6 5
E(5)
F(6)
8 3 2 1 4 7 6 5
2 8 3 7 1 4 6 5
2 3 1 8 4 I(5) 7 6 5 1 2 3 8 4 7 6 5
6
2 3 1 8 4 7 6 5
J(7)
G(6)
H(7)
K(5)
1 2 3 7 8 4 6 5
L(5)
A算法的表现极大地依赖于评价函数,特别是h(n), 即:从节点n到目标节点最佳路径的估计耗散 假定h*(n)表示节点n到目标节点最佳路径的实际耗 散 如果 h(n)> h*(n) , 搜索的节点数少,搜索范围小, 效率高,但不能保证得到最优解。 如果h(n)<= h*(n) ,这种情况下,搜索的节点数多, 搜索范围大,效率低,但能得到最优解
5 5 5 5 5
A*算法
◦ 当h(n)<=
h*(n) 时,同时满足完备性和最优
性要求 ◦ h(n)越接近于真实耗散h*(n),算法的搜索效 率越高,对内存和时间的需求越小 ◦ 如果满足h(n)= h*(n),是最完美的A*算法 ◦ h(n)的设计是A*算法的核心,也是最困难的 地方
◦ 6-1) ADD(mj, Open); ◦ 6-2) IF f(n→mk) <f(mk) THEN f(mk):=f(n→mk); ◦ 6-3) IF f(n→ml) < f(ml) THEN f(ml):=f(n→ml); ADD(ml,Open);
7. Open中的节点按f 值从小到大排序;
h(S0)=4
例:八数码问题
◦ 启发函数2: h2(n)=所 有数码到目标位置的距 离和(曼哈顿距离)
问题1:图中S0状态h(S0) 是什么, h*(S0) 又是什 么 问题2:这个启发函数是 否一定满足h(n)<= h*(n)
2 8 3 1 6 4 7 5 S0 1 2 3 8 4 7 6 5 Sg
数码1:1 数码2:1 数码3:0 数码4:0 数码5:0 数码6:1 数码7:0 数码8:2
h2(S0)=5
OPEN表
2 8 3 1 6 4 7 5 S0 1 2 3 8 4 7 6 5 Sg
节点 父节点编号 f(n)=g(n)+h(n)
S0
5
0+5
2 8 3 1 6 4 7 5 S1
2 8 3 1 4 7 6 5 S2
s
扩展n后新生成的子节点m1({mj}) 、
m2({mk}) 、m3({ml})分别计算评
f(n)
n
价函数值:
f(m1)=g(m1)+h(m1)
f(m3)
m3 m1
f(m1)
m2
f(m2)
f(n,m2)=g(n,m2)+h(m2)
f(n,m3)=g(n,m3)+h(m3)
f(m31)
m31
8. GO LOOP;
A算法由一般的图搜索算法改变而成。算法第7步每 次按照f(n)值的大小对Open表中的元素进行排序,
f(n)值小的节点排在前面,而f(n)值大的节点则放在
Open表的后面,这样每次扩展节点时,都选择当前
f(n)值最小的节点来优先扩展。
A算法是按f(n)递增的顺序来排列Open表中节点的, 因而优先扩展f(n)值小的节点,体现了好的优先搜索 的思想,所以算法A是一个好的优先搜索策略。
2 3 1 8 4 7 6 5 S5
h(s1)=1+1+0+0+0+1+1+2 h(s2)=1+1+0+0+0+0+0+2 h(s3)=1+1+0+0+1+1+0+2 h(s4)=2+1+0+0+0+0+0+2 h(s5)=1+1+0+0+0+0+0+1 h(s6)=1+1+0+1+0+0+0+2 h(s7)=1+0+0+0+0+0+0+1 h(s8)=1+1+1+0+0+0+0+1 h(s9)=0+0+0+0+0+0+0+1 h(s10)=0+0+0+0+0+0+0+0 h(s11)=0+0+0+0+0+0+1+1
是
失败
否 选取OPEN表中f值最小的节点i放入CLOSED表
i为目标节点吗?
是
成功
否 扩展i,得后继节点j,计算f(j),提供返回 节点i的指针,利用f(j)对OPEN表重新排 序,调整亲子关系及指针
有序搜索算法框图
1. Open:=(s),f(s):=g(s)+h(s); 2. LOOP: IF Open=( ) THEN EXIT(FAIL); 3. n:=FIRST(OPEN); 4. IF GOAL (n) THEN EXIT(SUCCESS); 5. REMOVE (n, Open), ADD(n, Closed); 6. EXPAND(n)→ (mi),把mi作为n的后继节点添入G,计算 f(n→mi)=g(n→mi)+h(mi);
1+6 1+4 1+6 2+5 2+3 2+5 3+2 3+4 4+1 5+0 5+2
CLOSED表
S9
节点 父节点编号 f(n)=g(n)+h(n)
1 2 3 8 4 7 6 5 S10
1 2 3 7 8 4 6 5 S11
0 1 2 3 4 5
S0
5
S2 S5 S7 S9 S10
0 1 2 3 4
2 3 1 8 4 7 6 5 S9
1 2 3 8 4 7 6 5 S11
2 3 1 8 4 7 6 5 S10
CLOSED表
编号 节点 父节点编号 f(n)=g(n)+h(n)
0 1 2 3 4 5 6
S0 S2 S4 S5 S9 S11 S12 0 1 1 3 4 5
4 4 5 5 5 5 5
1 2 3 8 4 7 6 5 S12
评价函数,也称为启发函数提供问题的启发性信息, 按其用途划分,可分为以下三类:
◦ 用于扩展节点的选择,即用于决定应先扩展哪一个节点, 以免盲目扩展 ◦ 用于生成节点的选择,即用于决定应生成哪些后续节点, 以免盲目地生成过多无用节点 ◦ 用于删除节点的选择,即用于决定应删除哪些无用节点, 以免造成进一步的时空浪费
2 8 3 1 4 7 6 5 S4
2 8 3 1 4 7 6 5 S6
2 3 1 8 4 7 6 5 S7
1 2 3 8 4 7 6 5
2 3 1 8 4 7 6 5 S8
S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11
编号
0 0 0 1 1 1 2 2 3 4 4
7 5 7 7 5 7 5 7 5 5 7
g*(n):从s到n的最短路径的耗散值 h*(n):从n到g的最短路径的耗散值 f*(n)=g*(n)+h*(n):从s经过n到g的最短路径的 耗散值 g(n)、h(n)、f(n)分别是g*(n)、h*(n)、f*(n)的估 计值
开始
算法
把S放入OPEN表, 计算估价函数 f (s)
OPEN表为空表?
1
启发式搜索,也称为有信息搜索,借助问题的特定 知识来帮助选择搜索方向 在搜索过程中对待扩展的每一个节点进行评估,得 到最好的位置,再从这个位置进行搜索直到目标。 启发式搜索的目的是省略大量无谓的搜索路径,提 到效率。 在启发式搜索中,对节点的评价是十分重要的,评 价函数是搜索成败的关键。
1 2 3 7 8 4 6 5 S13
由CLOSED表可知,解路径为S0-S2-S5-S9-S11-S12
2 8 3 1 6 4 7 2 8 3 1 6 4 7 5
3
s(4)
1
A(6)
2 8 3 1 4 7 6 5 2 3 1 8 4 7 6 5
2
B(4)
4
2 8 3 1 6 4 7 5 2 8 3 1 4 7 6 5
利用知识来引导搜索,达到减少搜索范围,降低问 题复杂度的目的。 启发信息的强度
◦ 强:降低搜索工作量,但可能导致找不到最优解 ◦ 弱:一般导致工作量加大,极限情况下变为盲目搜索,但 可能可以找到最优解
引入启发知识,在保证找到最佳解的情况下,尽可 能减少搜索范围,提高搜索效率。
定义一个评价函数f,对当前的搜索状态进行评估, 找出一个最有希望的节点来扩展。
评价函数的格式: f(n) = g(n) + h(n) f(n):评价函数 h(n):启发函数 g(x)——从初始节点S0到节点x的实际代价; h(x)——从x到目标节点Sg的最优路径的评估代价, 它体现了问题的启发式信息,其形式要根据问题的特 性确定,h(x)称为启发式函数。
f(m32)
m32
按第6步比较不同路径的耗散值并
进行相应的指针修正.
图2-12 搜索示意图
2 8 3 1 6 4 7 5
1 2 8 7 6
3 4 5
定义评价函数: f(x)=d(x)+w(x) d(x)表示节点在x搜索树中的深度, w(x)表示节点x中不在目标状态中相应位置的数码 个数,w(x)就包含了问题的启发式信息。 一般来说某节点的w(x)越大,即“不在目标位” 的数码个数越多,说明它离目标节点越远。
对初始节点S0,由于d(S0)=0, w(S0)=5,因此f(S0)=5。 在搜索过程中除了需要计算初始节点的评估函数 外,更多的是需要计算新生节点的评估函数。
1 2 2 8 8 1 6 7
3 3 4 5 4 5
7 6
w(n) =4
2 8 3 1 6 4 7 5 S0
1 2 3 8 4 7 6 5 Sg
满足h(n)<= h*(n) 条件的A搜索,称为A* (Astar)搜索 A* 搜索中,h(n)越接近h*(n) ,搜索效率越高 宽度优先算法可以看作A*算法的特例,即:g(n) 是节点所在的层数,h(n)=0 代价树宽度搜索也可以看作A*算法的特例,即: g(n)是节点n的实际路径耗散,h(n)=0 跟前两个算法一样,A*算法也具有完备性和最优 性
OPEN表
节点 父节点编号 f(n)=g(n)+h(n)
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 0 0 0 1 1 1 2 2 3 3 4 5 5
4 6 4 6 5 5 6 6 7 5 7 5 5 7
2 8 3 1 6 4 7 5 S1
2 8 3 1 4 7 6 5 S2
1 2 3 8 4 7 6 5
目标
M(7)
OPEN表: 1)初始化(s(4)) 2)第一循环结束(B(4) A(6) C(6)) 3) 第二循环结束 (D(5) E(5) A(6) C(6) F(6)) 4) 第三循环结束 (E(5) A(6) C(6) F(6)G(6) H(7)) 5) 第四循环结束(I(5) A(6) C(6) F(6) G(6) H(7)J(7)) 6) 第五循环结束 (K(5) A(6) C(6) F(6) G(6) H(7) J(7)) 7) 第六循环结束(L(5) A(6) C(6) F(6) G(6)H(7) J(7) M(7)) 第七循环结束 在算法第4步成功退出
一个节点n的评价函数的构造通常由两部分构成 ◦ 从初始节点到当前节点n的路径耗散 g (n) ◦ 从当前节点n到目标节点的期望耗散 h(n) 即:评价函数可表示为:
f (n ) g (n ) h(n )
这两部分里, g (n) 通常是比较明确的,容易得到 而 h(n) 难以构造,也没有固定的模式,需要根 据具体问题分析
2 3 1 8 4 7 6 5 S5
2 8 3 1 6 4 7 5 S3
0+4 1+5 1+3 1+5 2 +3 2+3 2+4 3+3 3+4 3 +2 3+4 4 +1 5+0 5+2
2 8 3 1 4 7 6 5 S4
2 8 3 1 4 7 6 5 S6
8 3 2 1 4 7 6 5 S7
2 8 3 7 1 4 6 5 S8
例:八数码问题
◦ 启发函数1:h1(n)=不在位的 数码的总数
问题1:图中S0状态h(S0)是什么, h*(S0) 又是什么 问题2:这个启发函数是否一定 满足h(n)<= h*(n) 问题3:对于八数码问题,还能 提出其他的启发函数吗?
2 8 3 1 6 4 7 5 S0 1 2 3 8 4 7 6 5 Sg