【算法】图解A* 搜索算法
最新版本参考(含代码实现):【机器人】路径规划 - 图解A* 搜索算法 - 知乎
A* 算法是启发式搜索算法,是根据Dijkstra算法改进而来。
问题引入
如下图所示,S为起始(start)节点,G为目标(goal)节点。
- 节点之间连线是两点的路径长度,如A到E的路径长度c(A,E) = 9。
- 节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15, 表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数,启发函数的设计有很多方法,具体可参考链接,此处不再扩展。
- 从起点S到达当前节点x的路径长度表示为g(x) 。
- 从起点S到达目标G并经过点x的估计距离长度表示为f(x) = g(x) + h(x),该公式是A*算法的核心公式。
- A*算法通过不断的选择估计距离f最小的节点,逐渐构建最短路径。
逻辑流程
创建两个集合OPEN集,CLOSED集,算法核心是从OPEN集中选择最优(f值小最优,或f相同时,h小的更优)的节点到CLOSED集中,然后将其后继节点放入OPEN集中,然后重复操作选取最优节点,直到到达目标,或者OPEN为空为止。最后再CLOSED集中根据目标G所包含的前序节点逆序查找最后到达起点S,这个链路的逆序即最优路径,具体流程如下图。
搜索过程
以下是前面网络的搜索过程展开图。
组合块中:
- 灰色为前序节点
- 蓝色当前节点x
- g:起点S到当前节点x的路径距离。
- h:当前节点x到终点G的估计距离
- f:起点S途径x到达终点G的估计距离,即 f = g + h
- 绿色框为当前OPEN集合中的最优节点
- 红色框表示当前OPEN集合中需要被删除的节点
在OPEN、CLOSED中每一行表示一次完整迭代完成时两集合中的节点集合。
最后的最优路径是:S->B->F->k->G
注:当两个节点f相同时,h小的更优
更多阅读
【机器人】 D*算法-动态路径规划
【算法】图解A* 搜索算法相关推荐
- 算法(三):图解广度优先搜索算法
算法(三):图解广度优先搜索算法 算法简介 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS: ...
- 《算法图解》读书笔记—像小说一样有趣的算法入门书
前言 学习算法课程的时候,老师推荐了两本算法和数据结构入门书,一本是<算法图解>.一本是<大话数据结构>,<算法图解>这本书最近读完了,读完的最大感受就是对算法不再 ...
- 算法图解第六章笔记与习题(广度优先搜索)
算法图解第六章笔记与习题(广度优先搜索) 文章目录 算法图解第六章笔记与习题(广度优先搜索) 6.1 图(graph) 6.2 广度优先搜索 6.3.1 查找最短路径 6.3.2 队列 6.4 实现图 ...
- 《算法图解》学习笔记(六):图和广度优先搜索(附代码)
欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...
- 读书笔记《算法图解》:像小说一样有趣
算法图解 正如封面一样所说的一样 "像小说一样有趣的算法入门书",其面的插画一样正诠释了其有趣性. 读完这本书,所以个人觉得这本书适合小白作为 "课外读物"一样 ...
- 机器学习入门及基本算法图解
基本算法 最近在学习神经网络,整理了一些算法,写出来给自己一点交代吧,本人刚入算法没多久,如果有不对的地方,请指出来大家一起学习,谢谢. 费曼算法(Feynman algorithm) 将这个算法放在 ...
- python算法书pdf_Python算法很难吗?python神书《算法图解》PDF电子版分享给你!
许多小伙伴后台私信柠檬说,python算法让自己很头疼,有没有可以让算法像小说一样有趣的书籍资料呢?看这里吧!柠檬为大家找到了这本<算法图解>的PDF电子版!让你在学习python的路上变 ...
- 与word2vec_Word2vec算法图解(一)
今天的主题是:Word2vec算法图解(一) 一.word2vec算法简介 Sikp-grams(SG) 给定中心词去预测上下文单词. Continuous Bag of Words(CBOW) 给定 ...
- c语言a 寻路算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
本文实例讲述了JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法.分享给大家供大家参考,具体如下: 完整实例代码如下: A*寻路算法 #stage { border: 1px solid lig ...
最新文章
- c++ 怎么读取rtf文件_最全集合!Word、PPT、Excel、PDF文件转换方法大全!建议收藏...
- Tkinter的entry组件
- SpringMVC获取Request,Response, Session对象
- 以数据为核心的SOC3.0时代到来
- 基于Node的PetShop,RESTful API以及认证
- edusoho linux 500错误,EduSoho网校系统如何处理500 Internal Server Error?
-
EduSoho官网
- POST请求转换为其他请求失效 input type=“hidden“ name=“_method“ value=“put“无效
- 【Excel】统计不重复数据的个数,设置单元格不允许出现重复数据
- TikZ绘图示例——尺规作图:线段的任意等分
- 微博开放第三方协议 媒体机构能重掌话语权吗?
- 中国水稻种子行业市场供需与战略研究报告
- UI Maker,界面设计sample
- php 回显,PHP实时回显 实时输出结果的方法 实时反馈结果到浏览器
- 【干货】前端开发者最常用的六款IDE
- Freemarker - 根据模板动态生成word文档
- vue 使用three.js 实现3D渲染
- Java+spring 基于ssm的幼儿园管理系统程序#毕业设计
- NDK-r25交叉编译qemu-7.0.0 第651步报错
- java redis实现抢购_【抢购/秒杀】redis实现高并发下的抢购/秒杀功能
- JDBC 学习笔记3
热门文章
- 统一gis平台地图服务发布流程及使用
- 才云 Caicloud 开源 Nirvana:让 API 从对框架的依赖中涅槃重生
- java中slacc意思,家用联通光纤开启IPv6
- 三维地图app的发展,离不开Infortrend GSe Pro 高效NAS共享
- unix/linux 经典书籍推荐
- scrollTo 平滑滚动
- nodejs require/import导包报错以及解决方法,chalk-animation库使用
- Box-constrained L-BFGS 相关知识拓展
- 桥接路由器总是掉线_无线路由器桥接完整教程(不会断网)【图文详解】
- 白鹭引擎的微信分享接口