图文解析A*搜索算法

A*算法是启发式搜索算法,是根据Dijkstra算法改进而来。

一、定义:是一种在图形平面上,对于有多个节点的路径求出最低通过成本的算法。它属于图遍历和最佳优先搜索算法,亦是BFS的改进。

二、如何更好的理解A*算法?

如下图所示,S为起始(start)节点,G为目标(goal)节点。

(1)节点之间连线是两点的路径长度,如A到E的路径长度c(A,E)=9。

(2)节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15,表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数。

(3)从起点S到达当前节点x的路径长度表示为g(x)。

(4)从起点S到达目标G并经过点x的估计距离长度表示为f(x)=g(x)+h(x),该公式是A*算法的核心公式。

(5)A*算法通过不断的选择估计距离f最小的节点,逐渐构建最短路径。

逻辑流程

创建两个集合OPEN集,CLOSED集,算法核心是从OPEN集中选择最优(f值小最优,或f相同时,h小的更优)的节点到CLOSED集中,然后将其后继节点放入OPEN集中,然后重复操作选取最优节点,直到到达目标,或者OPEN为空为止。最后再CLOSED集中根据目标G所包含的前序节点逆序查找最后到达起点S,这个链路的逆序即最优路径,具体流程如下图。

搜索过程

以下是前面网络的搜索过程展开图。

组合块中:

(a)灰色为前序节点

(b)蓝色当前节点x

(c)g:起点S到当前节点x的路径距离。

(d)h:当前节点x到终点G的估计距离

(e)f:起点S途径x到达终点G的估计距离,即f=g+h

(f)绿色框为当前OPEN集合中的最优节点

(g)红色框表示当前OPEN集合中需要被删除的节点

在OPEN、CLOSED中每一行表示一次完整迭代完成时两集合中的节点集合。

最后的最优路径是:S->B->F->k->G

注:当两个节点f相同时,h小的更优

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

THE END
1.A星算法详解(个人认为最详细,最通俗易懂的一个版本)虽然掌握了 A*算法的人认为它容易,但是对于初学者来说, A* 算法还是很复杂的。 搜索区域(The Search Area) 我们假设某人要从 A 点移动到 B 点,但是这两点之间被一堵墙隔开。如图 1 ,绿色是 A ,红色是 B ,中间蓝色是墙。 图1 你应该注意到了,我们把要搜寻的区域划分成了正方形的格子。这是寻路的第一https://blog.csdn.net/hitwhylz/article/details/23089415
2.A算法详细介绍.pptA*算法 尚福华 A算法 在图搜索算法中,如果能在搜索的每一步都利用估价函数f(n)=g(n)+h(n)对Open表中的节点进行排序,则该搜索算法为A算法。由于估价函数中带有问题自身的启发性信息,因此,A算法又称为启发式搜索算法。 对启发式搜索算法,又可根据搜索过程中选择扩展节点的范围,将其分为全局择优搜索算法和https://max.book118.com/html/2020/0212/5302011221002221.shtm
3.排列组合a的计算方法排列组合中的排列a,其计算公式是高中数学中的一个重要内容。排列数A(n,m)表示从n个不同元素中取出m个元素的所有排列的个数。 排列a的计算公式有两种形式: 直接相乘形式:A(n,m) = n × (n-1) × × (n-m+1) 这个公式表示,从n个元素中选择第一个元素有n种方法,选择第二个元素时剩下n-1种https://agents.baidu.com/content/question/f6702df348a15f3173183c28
4.排列组合a怎么算排列组合A(n,m)=n×(n-1),(n-m+1)=n!/(n-m)!。n为下标,m为上标。排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。 排列组合的中心问题是研究给定要求的排列和组合可能出现的情况总数https://edu.iask.sina.com.cn/bdjx/6dwQYamJ1ks.html
5.A*算法图文详解A*算法最早于1964年在IEEE Transactions on Systems Science and Cybernetics中的论文《A Formal Basis for the Heuristic Determination of Minimum Cost Paths》中首次提出。 其属于一种经典的启发式搜索方法,所谓启发式搜索,就在于当前搜索结点往下选择下一步结点时,可以通过一个启发函数https://mp.weixin.qq.com/s?__biz=MzU0NjgzMDIxMQ==&mid=2247613871&idx=4&sn=566d8caed79774e4ae02ebd027d25a50&chksm=fb54df43cc235655297bc278ee29f68750adc5cdf3a68512e9597f7e88fd1aefc1f1a0cd87ed&scene=27
6.人工智能A*算法原理A算法是启发式算法重要的一种,主要是用于在两点之间选择一个最优路径,而A的实现也是通过一个估值函数 F=G+H G表示该点到起始点位所需要的代价 H表示该点到终点的曼哈顿距离。 F就是G和H的总和,而最优路径也就是选择最小的F值,进行下一步移动(后边会做详细介绍) https://www.jianshu.com/p/274bbb6598df
7.自动驾驶路径规划:A*(Astar)算法3D视觉工坊最佳优先搜索(BFS),又称A算法,是一种启发式搜索算法(Heuristic Algorithm)。[不是广度优先搜索算法( Breadth First Search , BFS )] BFS算法在广度优先搜索的基础上,用启发估价函数对将要被遍历到的点进行估价,然后选择代价小的进行遍历,直到找到目标节点或者遍历完所有点,算法结束。 https://www.shangyexinzhi.com/article/7063887.html
8.图解A*算法相比于传统的深度搜索和广度搜索的递归回溯算法,A*算法启发式的提供代价估算能力来评估到达目标结点的最短路径所需的代价,即到达终点最省体力的方式。这在我们日常地图导航需求中得到了广泛的应用。本小节我们将以图解的方式向大伙儿揭示A星(这里姑且用星来代指*)算法的奥秘。 https://www.nowcoder.com/discuss/512892732843503616
9.自动驾驶路径规划:A*(Astar)算法最佳优先搜索(BFS),又称A算法,是一种启发式搜索算法(Heuristic Algorithm)。[不是广度优先搜索算法( Breadth First Search , BFS )]BFS算法在广度优先搜索的基础上,用启发估价函数对将要被遍历到的点进行估价,然后选择代价小的进行遍历,直到找到目标节点或者遍历完所有点,算法结束。要实现最佳优先搜索我们必须使用一https://www.elecfans.com/d/2042130.html
10.数据挖掘之Apriori算法详解和Python实现代码分享python这篇文章主要介绍了数据挖掘之Apriori算法详解和Python实现代码分享,本文先是对Apriori算法做了详细介绍,然后给出了Python版实现代码,需要的朋友可以参考下 关联规则挖掘(Association rule mining)是数据挖掘中最活跃的研究方法之一,可以用来发现事情之间的联系,最早是为了发现超市交易数据库中不同的商品之间的关系。(啤酒https://www.jb51.net/article/57209.htm
11.基于A*的双向预处理改进搜索算法摘要:本文针对传统A*算法存在冗余路径点较多与单向搜索耗时较长的缺点, 提出了一种改进A*算法. 该算法采用双向预处理结构减少冗余节点数, 并通过归一化处理和增加节点标记信息进一步优化估价函数提高遍历速度. 利用仿真软件对改进A*算法进行实验, 并与其它经典路径规划算法进行比较. 仿真结果表明, 改进后的A*算法较于https://c-s-a.org.cn/html/2019/5/6923.html
12.基于A*与DWA算法的混合路径规划算法研究为使移动机器人能在各种环境中高效工作, 需要根据实际的地形选择合适的路径规划算法。 为此, 使用A* 与 DWA(Dynamic Window Approach)算法结合的混合路径规划算法, 在仿真环境下搭建 U 型、 S 型、 L 型、狭窄通道型 4 种典型地形进行寻路实验, 同时改进了建图的权重递归公式消除对前一时刻数据依赖, 提高了算http://xuebao.jlu.edu.cn/xxb/CN/abstract/abstract1452.shtml
13.A*算法是怎么做到避开障碍物的?A*算法的理论公式可表示为:f?(n)=g?(n)+h?(n)其中:f?(n)是从初始状态经由状态n到https://www.zhihu.com/question/51626331/answer/2456365853