一、无信息与有信息搜索
- 无信息搜索又名盲目搜索:
•在搜索时,只有问题定义信息可用。
•盲目搜索策略仅利用了问题定义中的信息。
- 有信息搜索:
• 在搜索时,当有策略可以确定一个非目标状态比另一种更好的搜索,称为有信息的搜索。
二、最佳优先搜索
•思想: 使用一个评估函数 f(n)给每个结点估计他们的希望值。 优先扩展最有希望的未扩展结点。
•实现: fringe表中根据希望评估值从大到小排序
•最佳优先搜索策略有:
- 贪婪最佳优先搜索
- A* 搜索
(一)贪婪最佳优先搜索
•评估函数: f(n) = h(n) (heuristic,启发函数) = 估计从结点n到目标的代价
例如:hSLD(n) = 从结点 n 到 Bucharest的 直线距离
•贪婪最佳优先搜索优先扩展看上去更接近目标的结点(启发式函数评估出来的)
• 完备性? No – 可能陷于死循环当中
• 比如, Iasi Neamt Iasi Neamt
• 时间? O(bm), 但一个好的启发式函数能带来巨大改善
• 空间? O(bm)
• 最优性? No
(二)A* 搜索
• 思想: 避免扩展代价已经很高的结点。
• 评估函数 f(n) = g(n) + h(n)• g(n) = 到达结点n已经发生的实际代价
- h(n) = 从结点n到目标的代价估计值
- f(n) =评估函数,估计从初始结点出发,经过结点n,到目标的路径代价的估计
1.可采纳的启发式函数
• 如果启发式函数h(n)对于任意的结点n都满足 h(n) ≤ h*(n),这里 h*(n)是指从结点n到达目标的真正代价,则称h(n)是可采纳的。
• 定理: 如果h(n)是可采纳的,则 A* 树搜索算法是具有最优性。
• 完备性? Yes
• 时间? 指数级
• 空间? 将所有产生的结点存储在内存中
• 最优性? Yes
(三)A*的改进方法
存储受限制的启发式搜索:
思想:迭代加深的A*算法,用一个f-cost代替有限制的深度优先中的d作为截断值,进行剪枝。
递归最佳优先搜索(RBFS)
• 尝试模拟标准的最佳优先搜索而只需线性空间。
1. 记录当前节点的祖先可得到的最佳可替换路径的f值。
2. 如果当前的f值超过了这个限制,则递归将转回到替换路径。
3. 向上回溯改变f值到它的孩子的最佳f 值
4. 重复扩展这个上个节点,因为仍有可能存在较优解。
(简单)存储限制的A*
• 当内存满了的时候删除最坏的节点