230 likes | 470 Views
§ 2.3. 二、启发式搜索. 启发函数(估价函数)——把当前的状态映射为到达目标的花费(愈小愈好)或到达目标的希望程度(愈大愈好) 旅行商问题(距离和) 八数码问题(未归位牌数). 愈小愈好. 井字棋: 4 2阶差+1阶差 象 棋: 我方棋子总值-对方棋子总值 +我方棋势-对方棋势. 愈大愈好. 0. 1. 2. 2. 3. 3. 6. 1. 8. 8. 4. 0. 7. 7. 5. 6. 5. 4. § 2.3. 二、启发式搜索.
E N D
§2.3 二、启发式搜索 • 启发函数(估价函数)——把当前的状态映射为到达目标的花费(愈小愈好)或到达目标的希望程度(愈大愈好) 旅行商问题(距离和) 八数码问题(未归位牌数) 愈小愈好 井字棋:4 2阶差+1阶差 象 棋:我方棋子总值-对方棋子总值 +我方棋势-对方棋势 愈大愈好
0 1 2 2 3 3 6 1 8 8 4 0 7 7 5 6 5 4 §2.3 二、启发式搜索 • 估价函数算法很重要,以八数码为例: 粗算:未归位牌数N 细算:距离总和M N=3 M=3 N=1 M=2
begin n(0)s,J0 生成n(J)子结点表 有子结点=目标? Y 输出解PATH end N 在子结点表中找h’最小结点,记入n(J) J=J+1 §2.3 爬山法(局部最佳优先)
S n(0)=S n(1)=2 n(2)=3 n(3)=2 n(4)=1 §2.3 爬山法(局部最佳优先) • 沿梯度最大方向,以最小机时到达目标——无搜索算法,特别快。
§2.3 爬山法(局部最佳优先) • 但是不能保证到达目标 局部极值 平台 h算法不准 • 解决方法:迈一大步
h’: h 的估计值 §2.3 全局最佳优先图搜索法 • 包括A算法,A*算法 耗费函数 f = g + h g: S到当前结点(已发生)的耗费 当前节点到目标结点的耗费 h: 估价函数 f ’= g + h’
open closed S S g: 2 4 1 open表 A B C h’: 3 6 3 f ’: 5 10 4 §2.3 全局最佳优先图搜索法 示例: 第一步: 第二步:
closed 第三步: S g: 2 4 1 A B C h’: 3 6 3 10 5 open表 f ’: 1 2 D E 4 6 6 9 §2.3 全局最佳优先图搜索法
第四步: S g: 2 4 1 A B C h’: 6 10 f ’: 1 2 1 2 F G D E 6 4 4 6 9 8 9 6 §2.3 全局最佳优先图搜索法 open表
第五步: S 2 4 1 A B C 6 10 1 2 1 2 F G D E 6 4 6 9 8 9 2 3 H I 2 4 §2.3 全局最佳优先图搜索法 open表 6 9
§2.3 全局最佳优先图搜索法的优点 与爬山法比,可随时换枝,所以可以在全局(open表中)找到最佳解 (全局最佳优先图搜索法见word文档)
B E CLOSED OPEN begin OPEN表=[初始结点S] CLOSED=[ ] g(s):=0 B:=1 E:=1 OPEN=[ ] FAIL 在OPEN表中找f ’最小的结点m m=目标? Y N 输出PATH M移入CLOSED B=B+1 END 生成m的一个子结点n,令P(n)=m(使其指向m,以便找到解后输出PATH) 计算g(n)=g(m)+Δg f ’(n)=g(n)+h ’(n) Y(与结点old同) g(n) < g(old) N 修改P(old)=P(n); g(old)=g(n); f ’(old)=f ’(n) n记入OPEN表 E=E+1 Y 改进传至old的后裔结点(用深度优先法搜索) n出现过? old在CLOSE中? m还有子结点? N A算法
2 8 3 1 6 4 7 5 1 2 3 8 4 7 6 5 §2.3 一个A算法的例子 定义评价函数: f ’(n) = g(n) + h’(n) g(n)为从初始节点到当前节点的耗费值(步数) h’(n)为当前节点“不在位”的牌数
2 8 3 1 6 4 7 5 §2.3 一个A算法的例子 • h ’计算举例 “不在位”的牌数 h ’(n) =4
s(4) 2 8 3 1 6 4 7 5 1 2 2 8 3 1 6 4 7 5 2 8 3 1 4 7 6 5 2 8 3 1 6 4 7 5 A(6) C(6) B(4) 4 3 2 8 3 1 4 7 6 5 2 3 1 8 4 7 6 5 2 8 3 1 4 7 6 5 D(5) E(5) F(6) 5 8 3 2 1 4 7 6 5 2 8 3 7 1 4 6 5 2 3 1 8 4 7 6 5 2 3 1 8 4 7 6 5 I(5) J(7) G(6) H(7) 6 1 2 3 8 4 7 6 5 K(5) 1 2 3 8 4 7 6 5 1 2 3 7 8 4 6 5 M(7) L(5) 目标 §2.3
1 1 h =3 h ’=300 h =5 h ’=5 x y §2.3 全局最佳优先图搜索法讨论 1. 若令Δg ≡1,h ’ ≡ 0,为宽度优先(无启发信息的搜索) 2.若令g ≡0(只考虑h ’) ,则以最少的机时求解,但路径不一定最优 3.(1)若h ’ (精确) =h,很快达最优解(最优路径达到目标,此时不会走错枝,用爬山法即可) (2)若h ’ (可能) >h,不保证解最优,例: 可能引入y而丢失x (3)若h ’ ≯ h,可保解最优——A*算法
§2.3 全局最佳优先图搜索法讨论(Cont.) 4. A(A*)为图搜索,但择优保留单一连接弧,生成的是无重复结点的树,而不是图。 若采用树搜索,不查重复结点, 则: a) 费空间; b) 虽然省了查重时间,但是重复扩展更麻烦。 所以采用图搜索。
计算估价函数的工作量 搜索工作量 0 1 启发程度 §2.3 启发函数的适度使用 工作量 总工作量
深度优先 宽度优先 A(A*)算法 爬山法 局部最佳优先 全局最佳优先 启发式 §2.3 • 对比: