A star算法

Posted 爆米花好美啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A star算法相关的知识,希望对你有一定的参考价值。

A star算法介绍

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

g(n)为从起始节点到节点n的成本,h(n)为从节点n到目标点的估计成本
总的成本估计f(n) = g(n) + h(n)
整题实现大概以下几个步骤:
1. 初始化: 将开始节点放到open表中并计算估计成本,close表置空
2. 如果open表为空则算法失败,否则取出open表中估计成本最低的节点n, 将节点n放入close表
3. 如果n是目标节点,算法终止或者继续寻找其他可行解,否则扩展节点n的子节点:
对于每个子节点:
\\\\\\\\如果它在close中就忽略它,否则:
\\\\\\\\\\\\\\如果它也不在open表中,把它们加入open表中并计算估计成本,并且把当前节点n设置为它们的父亲
\\\\\\\\\\\\\\如果它在open表中,重新计算它的估计成本
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
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*算法在图搜索中能找到最优解。

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

总结

A star算法的特点(考虑g(x)+h(x),注意树搜索满足Admissible heuristic,图搜索满足Consistent heuristic时)
1. 完备性:肯定能找到最优解
2. 最优性:找到的解花费最小
3. 快:扩展更少的节点

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

贪婪搜索(启发式搜索,但只考虑h(x))
1. 不完备性:不保证能找到最优解
深度优先搜索是贪婪搜索的特例


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

以上是关于A star算法的主要内容,如果未能解决你的问题,请参考以下文章

码上实战立体匹配系列经典PatchMatch: 代价计算

机器学习笔记1——经验误差模型评估方法和性能度量

Dijkstra 的算法和 A-Star 的比较如何?

A*算法

[算法学习]A星算法

为啥A-star算法需要g(n)?