首页 > 编程语言 >路径规划算法 - 求解最短路径 - A*(A-Star)算法

路径规划算法 - 求解最短路径 - A*(A-Star)算法

时间:2023-12-08 12:44:36浏览次数:33  
标签:Star 探索 路径 网格 最短 算法 搜索

Dijkstra(迪杰斯特拉)算法

A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。

  • A* 算法是一个“搜索算法”,实质上是广度优先搜索算法(BFS)的优化
  • A* 算法的作用是“求解最短路径”,如在一张有障碍物的图上移动到目标点,以及八数码问题(从一个状态到另一个状态的最短途径)
  • A* 算法的思路类似图的Dijkstra算法,采用贪心的策略,即“若A到C的最短路径经过B,则A到B的那一段必须取最短”,找出起点到每个可能到达的点的最短路径并记录。
  • A* 算法与Dijkstra算法的不同之处在于,A算法是一个“启发式”算法,它已经有了一些我们告诉它的先验知识,如“朝着终点的方向走更可能走到”。它不仅关注已走过的路径,还会对未走过的点或状态进行预测。因此A算法相交与Dijkstra而言调整了进行BFS的顺序,少搜索了哪些“不太可能经过的点”,更快地找到目标点的最短路径。另外一点,由于H选取的不同,A*算法找到的路径可能并不是最短的,但是牺牲准确率带来的是效率的提升。

广度优先算法

会从起点开始,向上、下、左、右四个方向的网格探索,如果没有找到终点的话,又会在这四个网格的基础上继续朝着四周向外探索,被探索过的网格不会被重复探索,但是会留下一个回溯标记,它指向了该网格,是由哪一个网格探索而来,这个算法会一直往外扩散,直到搜索到终点后,根据每一个网格的回溯标记,找到最短路径,
image
image

缺点:但是这个算法的局限性也很明显,就是搜索的时候没有方向性,在最差的情况下,需要检测完所有的网格才能找到路径,当网络很多时,计算量会很大
image

A* 算法 (A-star Algorithm)

路径规划、游戏开发等场景中十分常见的一种算法,
A* 算法的不同之处在于,它在检索周围网格时,记录了三个不同的数据

  • 从起点到这个网格的实际距离(左上角)
  • 网络到终点的直线距离(右上角)
  • 两个距离之和(下面数字)
    image
    A* 算法会计算边界上所有网格的总花费,并找到花费最小的点,作为下一步的起始点
    image
    在下一轮的搜索中,以这个点为基础继续向外探索,并找到新的花费最少的点,如此往复,直到终点
    image
    image
    image

A* 算法,碰到障碍物

当探索遇到障碍物时,则不会探索这个网格
image
下面这个点,不是总花费最少的点,因为总花费是由从起点到该点的实际路径,和该点到终点的直线距离之和
image
所以在起点下方的点,才是下一步要探索的点
image
但这并不影响找到最短路径,也是 A* 算法的巧妙之处
image
image

模拟地图导航,每个路口,当成一个点
image
image

https://www.bilibili.com/video/BV1894y1V75p

标签:Star,探索,路径,网格,最短,算法,搜索
From: https://www.cnblogs.com/vipsoft/p/17880122.html

相关文章

  • 【Lidar】Python实现点云CSF布料滤波算法&提取地面点
    ​    这两天会持续更新一下Python处理点云数据的教程,大家可以点个关注。今天给大家分享一下点云的经典算法:CSF布料模拟算法。1CSF算法简介        CSF算法,全称为ClothSimulationFiltering,是一种基于欧几里得空间中最小生成树思想的聚类算法,它可以很好地......
  • 【Docker】更改docker镜像的存储路径
    1.查看Docker存储路径dockerinfo|grep"DockerRootDir"2.关闭所有运行的容器···dockerps|awk'{print$1}'|xargsdockerstop···3.停止docker服务systemctlstopdocker4.新增的磁盘挂载点上新建目录,并将原有的docker容器和镜像全部拷贝过来,比如这里新增......
  • 【算法】【线性表】搜索旋转排序数组(无重复数据)
    1 题目给定一个有序数组,但是数组以某个元素作为支点进行了旋转(比如,0124567 可能成为4567012)。给定一个目标值target进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。你可以假设数组中不存在重复的元素。样例1:输入:数组=[4,5,1,2,3]......
  • 文心一言 VS 讯飞星火 VS chatgpt (152)-- 算法导论12.2 8题
    八、用go语言,证明:在一棵高度为h的二叉搜索树中,不论从哪个结点开始,k次连续的TREE-SUCCESSOR调用所需时间为O(k+h)。文心一言:要证明在一棵高度为h的二叉搜索树中,不论从哪个结点开始,k次连续的TREE-SUCCESSOR调用所需时间为O(k+h),我们可以采用数学归纳法来进行证明。首先,我......
  • 【教3妹学编程-算法题】购买水果需要的最少金币数
    3妹:“你不是真正的快乐,你的笑只是你穿的保护色”2哥 :3妹还在唱五月天的歌啊,你不知道五月天假唱,现在全网都在骂呢。3妹:知道啊,可是关我什么事,这个歌的确好听啊。2哥 :嗯嗯,不错,还以为你是脑残粉,无论黑白都只管追星呢。3妹:我是只管追歌的,歌好听就行啦。2哥 :追哥?追哪个哥,难......
  • 算法【快速排序】
    算法【快速排序】快速排序。选择一个作为比较的元素,这里我们选择首元素,这个元素我叫他‘比较元素’;前后两个指针(其实是索引变量)同时往后和往前进行遍历,开头的指针遇到比‘比较元素’大的元素停下来(空循环体的循环即可实现),末尾的指针往前遍历,遇到比‘比较元素’小的元素停下来;两个......
  • Kosaraju 算法学习笔记(求强连通分量)
    写起来简单无比,不比Tarjan香?方法按照[1...n]的顺序在反图(边方向相反)上dfs一遍,出栈时将节点存入数组q[1...n]中按照q[n...1]的顺序在原图上dfs一遍,每次遍历就是一个新的强联通分量为什么是正确的?核心在于封死连通分量往外走的路。如果原图u-->v有一条边,且u和v不在同一个......
  • 11K+ Star!图解计算机网络、操作系统、计算机组成、数据库!
    大家好,我是Java陈序员。俗话说得好,面试造火箭,入职拧螺丝。我们在工作中,其实很少用到一些计算机底层知识,往往只要编码完事。但是,知其然还要知其所以然,我们不仅要做一个合格的“CV工程师”,更是要掌握一些底层原理!计算机基础知识,作为计算机的底层原理,往往是晦涩难懂,如果没用心的......
  • Технология Huawei StarLight
    «Технологиязвездныхвспышек»,которуюмыпредставляемнаэтотраз,неотноситсяктехнологии,связаннойсявлениемзвездныхвспышеквастро......
  • 【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法BeautifulPrompt
    近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型,可以从简单的图片描述中生成高质量的提示词,从而使文生图模型能够生成更美观的图像。BeautifulPrompt通过对低质量和高质量的提示进行微调,并进一步......