(9.2)A*搜索算法

2023-10-29

A*算法是在Dijstra算法上进行改进,知道起点和终点位置Dijstra算法是四面八方全部寻找,而A*算法则可以往一个最优方向寻找,即启发式的搜索,在提高算法效率的同时,保证找到一条最优路径。

一、原理:

A*算法的核心在于估价函数的设计上,如下式:

 其中:称为耗散函数,为起始节点到节点n的实际代价(距离);称为启发函数,表示节点n到目标节点的估计代价;表示从起始节点经由节点n到目标节点的估计代价。

 同Dijstra算法类似,A*算法也维持一个Open表。Open表中节点的优先级是依据的大小排列的,值越小,被搜索到的优先级越高。为保证能搜索到最优解启发函数不能太大,不能大于节点n到目标节点的实际代价。如果等于0则A*算法退化为Dijstra算法,虽然能保证得到最优路径,但算法效率低。如果恰好等于节点n到目标节点的实际代价,则A*算法探索的节点恰好就是最优路径上的节点。所以的取值直接影响算法的速度和精度。常见的取值有两点之间的欧几里得距离(Euclidean Distance)和曼哈顿距离(Manhattan)等。

 

 如上图每个方格左上角是,左下角是,右下角是

 如果不高于实际到目标顶点的距离,则一定可以求出最优解,而且越小,需要计算的节点越多,算法效率越低,常见的评估函数有欧几里得距离、曼哈顿距离、切比雪夫距离,评估函数就是告诉算法往哪个方向进行搜索。

①、曼哈顿距离

正方向网格的标准试探法是曼哈顿距离,如网格大小为D则:

 这里没有区别考虑对角线移动,或者认为没有对角线移动;

②、切比雪夫距离

如果地图允许对角线移动,则需要一个不同的启发函数。这里增加一个D2为对角线移动的成本;

 当D=1,且D2=1,这称为切比雪夫距离。当D=1,且D2=sqrt(2)这称为八分位数距离

③、欧几里得距离

如果地图可以在任何角度移动,则应该使用直线距离:

二、相关概念和搜索流程:

1、A*算法中涉及到的相关概念:

1)开放表(openlist):

openlist中存放待搜索的节点,初始只有起点A,然后将A放入closelist,将A的相邻节点放入openlist中;

2)封闭表(closelist):

closelist中存放的是已经搜索过的节点;

3)父节点

当前节点的上一个节点;

2、A*算法的流程步骤:

1)把起点加入openlist表中;

2)重复下面的过程:

a、遍历openlist,查找F值最小的节点,把它当作当前要处理的节点;

b、把这个节点移入closelist;

c、对当前方格的8个相邻方格(二维环境是8个方格,三维环境是26个方格)的每一个方格处理如下:

  1. 如果它是障碍点或不可达点(边界点)或在closelist中则忽略它;
  2. 如果它不在openlist中,把它加入openlist中,并且把当前方格设置为它的父节点,记录该方格的F、G、H值;
  3. 如果它已经在openlist中,检测当前的这条路径是否更好(如果节点已经在方格中则说明已经有一个父节点到达了这个方格,那么现在要看当前节点到这个方格是不是路径更优),这里比较G值,更小的G值表示路径更好。如果更好,则将它的父节点改为当前节点,并重新计算它的G和F值。如果openlist中是按F值排序的话,则此时需要重新排序;
  4. 停止:如果终点加入了openlist中;或者查找失败;或者openlist表为空,此时没有了路径;
  5. 保存路径,从终点开始,每个方格沿着父节点移动到起点,如果得到的便是路径。

三、一个二维例程:

参照网上资料验证了一下二维的:就不贴代码了

上图,起点在绿色方格,黑色方格是障碍点,蓝色的方格表示已经搜索过了;黄色方格表示得到的最优路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(9.2)A*搜索算法 的相关文章

随机推荐

  • 几十条业务线日志系统如何收集处理?

    在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息 甚至包括点击的位置 我们也经常发现自己刚搜完一个东西 再打开网页时每个小广告都会出现与之相关联的商品或信息 在感叹智能的同时不惊想 什么时候泄露的行踪 许多公司的业务平台每天
  • 关于Xshell7无法连接虚拟机的解决方案

    当我们在使用Xshell时 无法连接虚拟机 解决方法1 1 打开网络和Internet设置 2 点击更改适配器设置 3 如果发现是禁用则右键启动 解决方法二 1 如果都启动仍然连接不上 我们双击打开后 点击详细信息 发现是自动配置IPv4地
  • AR/MR技术作业

    1 图片识别与建模 环境配置 首先 在官网上注册账号 在Download页面下载相应的SDK安装到unity安装目录获取Vuforia支持 如下 然后 打开Develop页面 点击Get Development Key 然后 注册一个Lic
  • Python3------NumPy学习(一)

    NumPy学习 1 NumPy介绍 Numpy Numerical Python 是一个开源的Python科学计算库 用于快速处理任意维度的数组 Numpy支持常见的数组和矩阵操作 对于同样的数值计算任务 使用Numpy比直接使用Pytho
  • react使用++或者--改变state状态值问题和Useless constructor no-useless-constructor

    写了一个点击事件 点击一下值加一 但是点击事件如下书写无效 并未改变状态值 add this setState likes this state likes 这里应该如下书写 add this setState likes this sta
  • go interface 坑 (判空)

    interface 本质 interface 实际上是有两个字段组成 一个是类型 是一个值 在判空时 只有同时是nil 才能得到true 实际案例 在doSomething中 err是等于空的 但是传递给error这个接口后 确又不等于空了
  • 初识:梯度下降算法 (Gradient Descent) ----直线拟合散点

    我的第一个机器学习算法 梯度下降算法解决散点拟合问题 在直角坐标系中给出若干个点作为训练集 Training Set 使用梯度下降算法给出最合适的拟合直线 1 大体思路 我个人的理解 对于许多散步在直角坐标系中的点 首先给出一个初始的拟合直
  • 【Python】SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

    一 问题描述 我在运行一段Python代码的时候 train data sales chan name train data sales chan name astype int 遇到了下面的警告 C Users XiaoWang AppD
  • 从规模优先到效益优先,产业互联网正打造新的模式

    以规模优先为主导的时代正在渐行渐远 这一点 我们可以从当下OpenAI为代表的新公司的崛起看出一丝端倪 在未来的时代 规模早已不再是决定自身价值的主要指标 效率早已不再是衡量一种商业模式是否先进的标准 效益优先 以小博大 正在开始大行其道
  • 树莓派 python3.9降级为python3.7

    今天烧录了一个官方烧录器中的最新的镜像 打开之后python的版本是3 9的 之前做的一些东西都是基于python3 7的 再重新架构十分麻烦 于是干脆就把python3 9进行降级 降为python3 7 这个镜像不像之前的一些镜像 同时
  • sql 插入一条记录并查询出记录的id值

    String sql SET NOCOUNT ON insert into yaComVehicle plateNum deComId values plateNum deComId select ident current yaComVe
  • 160825、互联网架构,如何进行容量设计?

    一 需求缘起 互联网公司 这样的场景是否似曾相识 场景一 pm要做一个很大的运营活动 技术老大杀过来 问了两个问题 1 机器能抗住么 2 如果扛不住 需要加多少台机器 场景二 系统设计阶段 技术老大杀过来 又问了两个问题 1 数据库需要分库
  • 1156 十个成绩排序(运用sort函数倒序排出)

    题目描述 期末考试结束了 陈老师找到集训队的同学 希望帮忙开发一个成绩排序的系统 这个应该难不倒集训队员的 先做一个内部小测试吧 随意输入10个学生的成绩 按从高到低的序列显示 输入要求 输入10个学生的成绩 输出要求 输出从高到低的排序结
  • “此Flash Player 与您的地区不相容”,谷歌高版本,亲测2019-2-28可以解决

    这是原地址 解决方法如下 翻墙后才是打开的正确的Adobe的官网下载地址 https get adobe com cn flashplayer 这里下载的Flash Player版本经过安装后问题得到圆满解决 不再出现地区不兼容的提示 由于
  • 代理导致安装依赖失败 vue-admin connect ETIMEDOUT 104.16.21.35:443

    今天在安装百度地图依赖时 报了下面这个错误 翻译过来的意思大概是 npm犯错 代码ETIMEDOUT npm犯错 系统调用连接 npm犯错 errno ETIMEDOUT npm犯错 网络请求https registry npmjs org
  • 「ML 实践篇」模型训练

    在训练不同机器学习算法模型时 遇到的各类训练算法大多对用户都是一个黑匣子 而理解它们实际怎么工作 对用户是很有帮助的 快速定位到合适的模型与正确的训练算法 找到一套适当的超参数等 更高效的执行错误调试 错误分析等 有助于理解 构建和训练神经
  • Openwrt添加python3 package出现错误:提示缺少对libssl的依赖

    在Openwrt中添加python3 package时出现错误 Package python3 light is missing dependencies for the following libraries libcrypto so 1
  • AES加密解密

    import javax crypto Cipher import javax crypto spec SecretKeySpec 功能 加密解密工具类 日期 2022 5 5 author lf public class AesUtil2
  • 2023华为OD机试真题【星际篮球争霸赛/动态规划】

    题目描述 在星球争霸篮球赛对抗赛中 最大的宇宙战队希望每个人都能拿到MVP MVP的条件是单场最高分得分获得者 可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场 并且让所有得分的选手得分都相同 然而比赛过程中的每1分钟的得分都只能由某一
  • (9.2)A*搜索算法

    A 算法是在Dijstra算法上进行改进 知道起点和终点位置Dijstra算法是四面八方全部寻找 而A 算法则可以往一个最优方向寻找 即启发式的搜索 在提高算法效率的同时 保证找到一条最优路径 一 原理 A 算法的核心在于估价函数的设计上