【由于专栏后几篇限制vip观看,我又把完整算法在公众号“武汉AI算法研习”进行了发布,可以查看全专栏文章。】

A-Star(A*)算法作为Dijkstra算法的扩展,在寻路和图的遍历过程中具有一定的高效性。

【适用范围】静态图搜索

【算法流程】A-Star算法中采用的估价函数如下,其中*h(i)的引入可以防止搜索过程中过渡跑偏到很多非常遥远的路径,但是这个h(i)*是未知的,计算中采用一个可以估计的值进行表达,一般用简单的曼哈顿距离
f(i)=g(i)+h(i);当前节点的价值估值f(i)=起始点到该节点的距离g(i)+当前节点距离终点的距离h(i)(启发函数)f(i) = g(i) + h(i);\\ 当前节点的价值估值f(i)=起始点到该节点的距离 g(i)+当前节点距离终点的距离h(i)(启发函数) f(i)=g(i)+h(i);当前节点的价值估值f(i)=起始点到该节点的距离g(i)+当前节点距离终点的距离h(i)(启发函数)
【搜索开始】如图方形格,绿色表示起点,红色表终点,其中蓝色为障碍物。路径必须以绿色格为起点绕过蓝色障碍物抵达红色格子。现有格子水平方向移动一格开销为10,沿对角线移动一格开销等于14。我们将路径规划过程中待检测的节点存放于Open List中,而已检测过的格子则存放于Close List中。

【第一步:以起点开始搜索周围8个格子】起点周围8个点是可能会经过的,所以把他们加入Open list中,同时指定其父节点为起始节点(32)。以起点格子右边方格为例,其距离起点距离为G=10,启发函数值采用曼哈顿距离则H=30,则价值函数F=G+H=40,以此类推得到其周围8个格子的价值函数,选取最小价值函数(33号节点)作为下一个目标。
Openlist=21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),31(父节点=32,f值=60),33(父节点=32,f值=40),41(父节点=32,f值=74),42(父节点=32,f值=60),43(父节点=32,f值=54)Clostlist=32Open \ list={21(父节点=32,f值=74), \\ 22(父节点=32,f值=60),23(父节点=32,f值=54),\\31(父节点=32,f值=60),33(父节点=32,f值=40),\\41(父节点=32,f值=74),42(父节点=32,f值=60),43(父节点=32,f值=54)}\\ Clost \ list ={32} Open list=21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),31(父节点=32,f值=60),33(父节点=32,f值=40),41(父节点=32,f值=74),42(父节点=32,f值=60),43(父节点=32,f值=54)Clost list=32

【第二步:以33号节点】对33号节点周围的8个节点进行判断,若是不可通过或是已经存在Clost list节点则忽略不考虑,若当前处理节点的相邻格子已经在Open List中,则检查这条路径是否更优,即计算经由当前处理节点到达那个方格是否具有更小的 G值。如果没有,不做任何操作。相反,如果G值更小,则把那个方格的父节点设为当前处理节点 ( 我们选中的方格 ) ,然后重新计算那个方格的 F 值和 G 值。

33号节点此时需要检查的点为23号、22号、42号和43号节点。23号节点目前G值14,如果经33号抵达则G值为20,因此不做更新;22号节点也无需更新,42号节点也无需更新,43号节点也无需更新。因此遍历Open list节点取f值最小的为43号节点,则加入Clost list中
Openlist=21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),31(父节点=32,f值=60),41(父节点=32,f值=74),42(父节点=32,f值=60),43(父节点=32,f值=54)Clostlist=32,33Open \ list={21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),\\31(父节点=32,f值=60),\\41(父节点=32,f值=74),42(父节点=32,f值=60),43(父节点=32,f值=54)}\\ Clost \ list ={32,33} Open list=21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),31(父节点=32,f值=60),41(父节点=32,f值=74),42(父节点=32,f值=60),43(父节点=32,f值=54)Clost list=32,33

【第三步:以43号节点】以43号节点为中心,加入其周边可选节点并计算相应的G值和H值。则选择其中价值最小的节点为42号节点。
Openlist=21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),31(父节点=32,f值=60),41(父节点=32,f值=74),42(父节点=32,f值=60)52(父节点=43,f值=88),53(父节点=43,f值=74)Clostlist=32,33,43Open \ list={21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),\\31(父节点=32,f值=60),\\41(父节点=32,f值=74),42(父节点=32,f值=60)\\ 52(父节点=43,f值=88),53(父节点=43,f值=74)} \\ Clost \ list ={32,33,43} Open list=21(父节点=32,f值=74),22(父节点=32,f值=60),23(父节点=32,f值=54),31(父节点=32,f值=60),41(父节点=32,f值=74),42(父节点=32,f值=60)52(父节点=43,f值=88),53(父节点=43,f值=74)Clost list=32,33,43

【不断重复以上操作,直到把终点加入到Open list中】最终沿着父节点从终点开始回溯到起点即时最短距离路径。

总结:A-Star最短路径距离算法通过引入启发式函数,每一步计算抵达起点和终点的估计距离从而可以更快、更省的得到最短路径,但是A-Star算法一般只能用于静态图中,对于动态图没次图形变换都需要用A-Star进行计算,计算开销很大。

A-Star(A*)算法相关推荐

  1. D* Lite(D star lite) 算法 python

    D star lite 算法的论文网址:http://idm-lab.org/bib/abstracts/papers/aaai02b.pdf 根本思想是从后往前计算,每当客观环境发生变化时就可以节省 ...

  2. 全局路径规划:图搜索算法介绍6(A star)Matlab算法实现

    本文接:全局路径规划:图搜索算法介绍2(A star) https://blog.csdn.net/gophae/article/details/103061702 % This is Yunchen ...

  3. 贪吃蛇AI算法中的A star寻路算法

    A*寻路算法 在之前的贪吃蛇游戏比赛里,计算蛇吃食物路径时要用到寻路算法,于是就去了解了一下,以下是我的算法演化过程. 1.简单寻路–按图索骥 我一开始想到的方法就是最简单的:目标在哪个方位就往哪个方 ...

  4. 图像处理中,SIFT,FAST,MSER,STAR等特征提取算法的比较与分析(利用openCV实现)

    图像处理中,SIFT,FAST,MSER,STAR等特征提取算法的比较与分析(利用openCV实现) 本文实验为自己原创,转载请注明出处. 本人为研究生,最近的研究方向是物体识别.所以就将常用的几种特 ...

  5. 「游戏」寻路算法之A Star算法原理及实现

    前言 自动寻路是在一些如MMORPG等类型游戏中常见的一种功能,其给了玩家良好的游戏体验,使得玩家在游戏过程中省去了大量游戏坐标点的记录以及长时间的键盘操作,不必记忆坐标,不必担心迷路,用最快捷的方法 ...

  6. 寻路算法实例解析:贪吃蛇AI的实现

    本文是寻路算法的实际应用篇,以贪吃蛇的实现为例子. 1.首先看下这个在微博上很火的贪吃蛇gif 这次我们尝试用代码来模拟下,说不定上面这个图就是计算机搞的. 2.讲贪吃蛇snake AI之前,我们先看 ...

  7. 路径规划之 A* 算法

    算法介绍 A*(念做:A Star)算法是一种很常用的路径查找和图形遍历算法.它有较好的性能和准确度.本文在讲解算法的同时也会提供Python语言的代码实现,并会借助matplotlib库动态的展示算 ...

  8. 路径规划—— A* 算法

    参考原文:路径规划之 A* 算法 (weibo.com) A*(念做:A Star)算法是一种很常用的路径查找和图形遍历算法.它有较好的性能和准确度. 本... 路径规划之 A* 算法 A*(念做:A ...

  9. 启发式搜索A*算法【引入及思想】

    算法介绍 A*(念做:A Star)算法是一种很常用的路径查找和图形遍历算法.它有较好的性能和准确度. A*算法最初发表于1968年,由Stanford研究院的Peter Hart, Nils Nil ...

  10. python算法完整教程专栏完整目录

    python算法完整教程专栏完整目录 专栏说明如下 专栏目录 专栏说明如下 内容:python算法完整教程 数量:692篇博文(2023年2月15日截止) 更新时间至:2023年2月15日(后续加上去 ...

最新文章

  1. 1048 数字加密 --非满分
  2. 程序员工资为什么高?
  3. CodeForces 396C 树状数组 + DFS
  4. 2. Add Two Numbers(Leetcode)
  5. linux显示文本文件指定行数的数据
  6. 丰巢回应小学生用照片“刷脸”取件;苹果明年或发布四款 5G 手机;Spring Boot 2.2.0 发布 | 极客头条...
  7. 【安装教程】 【Visio2019】(附带安装包下载)
  8. 龙果学院Elasticsearch顶尖高手系列-高手进阶篇完整版
  9. 微信视频强制分享观看源码 微信流量裂变源码吸粉变现源码
  10. “ 鸡声茅店月,人迹板桥霜” 道尽多少旅人的离愁别绪
  11. 01. Perl 简介
  12. 图像处理库Pillow的使用
  13. linux设置开机自启动网络,linux设置开机自启动
  14. LOJ.2863.[IOI2018]组合动作(交互)
  15. 矩阵的主元+秩+矩阵等价
  16. 2021-03-13 大数据课程笔记 day52
  17. PostgreSQL JIT(Just-In-Time Compilation)With LLVM 的实现原理
  18. 云队友丨中国互联网反垄断简史
  19. 人工智能导论--浙江工业大学--王万良
  20. 7.28 结构体 Day18

热门文章

  1. 12-类和对象的概念
  2. Pr:VR 沉浸式视频
  3. 正负样本不均衡的解决办法
  4. 《代码整洁之道》——(5)对象和数据结构
  5. c语言的文字游戏,C语言之文字游戏
  6. CRC-16/CRC-32 程序代码
  7. 系统性能监控工具ssar实例精选 | 龙蜥SIG
  8. 写给前端工程师的色彩常识:色彩三属性及其在CSS中的应用
  9. spark加载模型与gRPC与JSF与JDQ冲突
  10. python when函数_python help函数