人智导(二):启发式搜索
概述:Best-First搜索
启发式搜索算法本质上都是Best-First搜索,当然,无信息搜索也是一种Best-First搜索,只不过衡量Best的标准不同。启发式搜索算法中,衡量Best的标准是基于评价函数(启发式函数)的。
基本思路:
- 后继状态中,具有"best"期望值的状态首先选择并继续扩展
- best这里指的是期望代价度量,而非实际代价度量。精确与否取决于启发函数的质量
算法:
Function Best-First-Search(problem, EVAL-FN) returns a solution sequence
input: problem: a problem EVAL-FN: an evalution function
Queuing-FN <--- a function that orders nodes by EVAL-FN
return General-Search(problem, Queueing-FN)
贪心搜索(Greedy Search)
- 一种最简单的best-first搜索策略(最小化到达目标状态的期望代价)
- 预估离目标状态最接近的节点总是被先扩展
- 启发式函数 h h h: h ( n ) = h(n)= h(n)=从状态 n n n到目标状态的最少路径的期望代价
- 搜索过程中,到达目标状态的路径代价是预估的,而不是真实而准确的
算法:
Function Greedy-Search(problem) returns a solution or failure
return Best-First-Search(problem, h)
- 若 n n n为目标状态, h ( n ) = 0 h(n)=0 h(n)=0
- 一般来说, h h h可以为任何形式的函数
- 启发式函数依赖于问题相关的背景知识
举例:
特点:
- 与深度优先算法类似
- 不完备,不最优
- 时间与空间复杂度:最坏情况下 O ( b m ) O(b^m) O(bm),但好的启发式可以大幅度改善性能
A*搜索
思路:
避免扩展已经是最高代价的路径
原理:
组合两种函数:
f ( n ) = g ( n ) + h ( n ) f(n) = g(n) + h(n) f(n)=g(n)+h(n)
其中:
- h ( n ) h(n) h(n):从状态n到目标状态的预估(期望)代价(由贪心搜索得到)
- g ( n ) g(n) g(n):从初始状态到当前状态n的实际路径代价(由最少路径代价搜索给出)
- f ( n ) f(n) f(n):通过状态n节点的整体路径代价
寻找最佳的解,最小化 g ( n ) + h ( n ) g(n)+h(n) g(n)+h(n)是合理的
A*搜索是完备的和最优的前提:”可接受的“启发式(admissible heuristic)
即 h ( n ) ≤ h ∗ ( n ) h(n)\le h^*(n) h(n)≤h