A star算法

来源:互联网 发布:双机热备 数据库 编辑:程序博客网 时间:2024/05/29 14:24

A star算法介绍

我们在解空间搜索问题的可行解或者最优解时常用宽度优先搜索(BFS)或者深度优先搜索(DFS),但是有时候会扩展出很多无用节点,搜索时间较长,而A*算法则是选择当前估计成本最低的节点进行扩展,图示如下:

这里写图片描述

g(n)为从起始节点到节点n的成本,h(n)为从节点n到目标点的估计成本
总的成本估计f(n) = g(n) + h(n)
整题实现大概以下几个步骤:
1. 初始化: 将开始节点放到open表中并计算估计成本,close表置空
2. 如果open表为空则算法失败,否则取出open表中估计成本最低的节点n
3. 如果n是目标节点,算法终止或者继续寻找其他可行解,否则扩展节点n的子节点,如果它们不在close中就把它放在open表中并计算估计成本,将节点n放入close表
4. 转到2

Admissible heuristic

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

1 2 3易满足,第4条中这样的启发函数被称为Admissible heuristic,只有满足了这个才能保证A*算法在树搜索中能找到最优解
eg. 令h(n)===0,A*搜索退化为宽度优先搜索(BFS),不估计成本,肯定能找到最优解

Consistent heuristi

这里写图片描述

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 heuristi,则不仅能找到最优而且是最快的找到(扩展的节点最少)

While all consistent heuristics are admissible, not all admissible heuristics are consistent.


参考:
A*搜索算法
柳厶幺的回答