最佳路径搜索(二):启发式搜索(代价一致搜索(Dijkstra search),贪心搜索,A*搜索)

文章目录

  • 前言
  • 一、启发式搜索(heuristic search)
    • 方法(Dijkstra search,Greedy Search,A* )
    • 性质(Admissible & Consistent & dominate)
    • 总结


前言

启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、降低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。简单来说,就是已知起点和终点位置,寻找最佳路径。


一、启发式搜索(heuristic search)

方法(Dijkstra search,Greedy Search,A* )

代价一致搜索 (Uniform Cost Search or Dijkstra search)
贪心搜索 (Greedy Search)
A星搜索 (A* Search)

首先, 使用评价函数 f(x) 来对上述的节点选择顺序进行排序
下面先定义两个函数

g(x) 为从根节点到x节点的代价总和

h(x) 为从x节点到目标节点的估计代价总和

这类应用算法有

代价一致搜索 (Uniform Cost Search or Dijkstra search) f(x) = g(x)

贪心搜索 (Greedy Search) f(x) = h(x)

A星搜索 (A* Search) f(x) = g(x) + h(x)

这个网址对算法进行了可视化表示,解释和例子非常具体的有助于理解,强烈推荐!!!!!link~~~~~~~~~~

性质(Admissible & Consistent & dominate)

Admissible heuristic

admissibility是启发式搜索的一个性质,如果满足这个性质,那么,启发函数一定能得到最佳solution。

A*搜索能找到最优解的充分条件:

  1. 搜索树上存在着从起始点到目标点的最优路径
  2. 问题域是有限的
  3. 所有结点的子结点的成本>0
  4. h(n) =< h*(n) (h*(n)为从节点n到目标点的实际成本)

1 2 3易满足,第4条中这样的启发函数被称为Admissible heuristic,也就是说在A*中我们对目标的估计必须小于或等于其实际值,不然可能会出现找不到最优路径或者根本找不到路径的情况

Consistent heuristic
最佳路径搜索(二):启发式搜索(代价一致搜索(Dijkstra search),贪心搜索,A*搜索)_第1张图片
N是开始节点,绿色的是目标节点,h(N)则是从N到目标节点的启发函数,N’为任意不同于N的节点
A star with tree能找到最优解的充分条件:

  1. 搜索树上存在着从起始点到目标点的最优路径
  2. 问题域是有限的
  3. 所有结点的子结点的成本>0
  4. h(N’) + c(N, N’) < h(N)
    这样的启发函数被称为Consistent heuristic,只有满足了这个才能保证A*算法在图搜索中能找到最优解。

一个启发函数是consistent,它也是admissible。反之,不可。

dominate

Dominance(用于表现不同启发函数的关系)
two admissible heuristics ha, hb:如果对于所有n, ha(n) >hb(n),那么,我们可以说 ha dominates hb,对于这个search问题,我们最好使用ha作为启发函数。

总结

A star算法的特点(考虑g(x)+h(x),注意树搜索满足Admissible heuristic,图搜索满足Consistent heuristic时)

  1. 完备性:肯定能找到最优解
  2. 最优性:找到的解花费最小
  3. 快:扩展更少的节点

UCS(代价一致搜索,只考虑g(x))

  1. 完备性:肯定能找到最优解
  2. 最优性:找到的解花费最小
  3. 比A*慢一些
    广度优先搜索是代价一致搜索的特例

贪婪搜索(启发式搜索,但只考虑h(x))

  1. 不完备性:不保证能找到最优解
    深度优先搜索是贪婪搜索的特例(令h(n)===0,A*搜索退化为宽度优先搜索(BFS),不估计成本,肯定能找到最优解)

你可能感兴趣的:(基础,数据结构)