Skip to content
Go back

CS188课程笔记(1)

Edit page

边缘集

  • 不管用什么搜索策略,边缘集本质上都是以优先队列的形式存储的,所使用的策略仅仅决定了优先级的设置方式。
  • 针对特定算法的底层数据结构替换:
    • 如果专注于 DFS ,可以用来实现。
    • 如果专注于 BFS,可以用普通队列来实现。
  • 虽然这种针对性的数据结构替换能略微提升运行效率,但会降低底层代码实现的统一性。
  • 之前提到的统一成本搜索会盲目地向各个方向均匀搜索。
  • 为了提高效率,我们在搜索时加入“关于目标位置的额外信息”,即Informed Search,也被称为启发式方法 (Heuristics)
  • 之前都是构建一个搜索问题的抽象模型然后运行算法;而使用启发式方法,还需要额外加上一步——设计一个启发式函数
  • 优先扩展你认为最接近目标状态的节点。
  • 启发式方法在这里的作用,就是作为衡量每个状态到目标状态距离的评估工具。
  • 结合了 Uniform Cost Search 和 Greedy Search 的优势。
  • 根据该节点的 g (实际回溯成本) + h (预估向前成本) 来判断优先级。
  • 最优性条件 (Optimality):要保证找到最优解,启发式必须是一个乐观的启发式 (Admissible Heuristic),即估计的成本必须小于或等于实际成本。
    • 对于吃豆人寻路,启发式可以是曼哈顿距离
    • 对于翻煎饼问题,启发式可以是最大错位煎饼的编号
  • 与 Uniform Cost 相比,A* 依然会在各个方向上有所扩展,但会优先朝向目标方向推进。
  • A* 算法通常是首选的规划算法,被广泛应用于电子游戏 (Video games)、路由规划 (Routing)、语音识别解码 (Decoding in speech recognition) 以及机器翻译 (Machine translation) 等领域。

搜索终止的核心原则

  • 无论使用哪种搜索算法,极其重要的一点是只有在目标节点出队时才停止,而不是在目标节点刚被发现(入队)时停止。
  • 图搜索会记录一个已扩展的节点列表,并避免重复扩展它们
  • 用 A* 实现图搜索并保证最优解,要求启发式不仅要是乐观的,还必须是一致的 (Consistent)

小结

  • A* 算法同时运用了回溯成本向前成本
  • 启发式函数的设计是提升整个算法性能的关键因素。

Edit page