A星寻路优化方案

1.存储常用位置间的路径信息(此优化方案一般用于地图较大,且起始点离终点较远情况下)

对于地图信息已知且各障碍位置固定的情况下,可以将常用的位置及其之间的路径信息保存,然后寻路时分别找到离开始点,结束点较近的位置,分别进行寻路,再将路径组合得到最终路径,不过此路径可能较正常寻路出的路径较远但寻路用时较少。

2.启发函数优化

2.1离终点距离公式优化

简单寻路中启发函数公式:

f(寻路消耗)= g(实际消耗也可以说离起点距离)+ h(预计消耗也可以说离终点距离)

一般情况下,h距离使用欧几里得距离公式,即h=\sqrt{(x1-x)^{2}+(y1-y)^{2}}

但是对于四方向寻路时(只能前后左右寻路,不能斜角寻路),

h可以使用曼哈顿距离公式,即h = | x1 - x | + | y1 - y |

当对于八方向寻路时,h可以使用切比雪夫距离公式,即h = max(| x1 - x |, | y1 - y |)

2.2增加权重值

简单情况下,寻路消耗是由实际消耗与预计消耗1:1相加得到,但是实际情况是预计消耗是预计值,它不等于真实的距离终点的值,此时可以增加一个系数w,将寻路消耗公式变为

f = g + w * h

此时可以通过修改w的值来改变实际消耗与预计消耗的混合比,比如当w > 1时,寻路消耗会更优先考虑当前路径预计造成的代价,当w < 1时,寻路会更优先考虑当前路径已造成的代价。

2.3寻路消耗比较时启发函数的优化

在开启列表中寻找寻路消耗最小点时,一般情况下避免不了寻路消耗一样的点的出现,此时就需要对这些点进行取舍,而取舍的方式就是为预估函数增加一个微小的偏移量p,这个偏移量p能起作用的原因是:当某两个节点的启发函数值相同时,我们希望优先判断那个距离终点更近的节点,而距离终点近也就意味着其预估函数值更小,所以,如果我们为预估函数增加一个小偏移量p(p甚至可取0.1%左右),就会使得距终点近的的节点的启发函数值更小,就会被优先选择。因此,我们可以将启发函数进一步优化为如下形式

f = g + w * h + p * h = g + (w + p) * h

2.4减少拐点

寻路有时会出现频繁转向的路径,虽然该路径确实是消耗最小的路径,但是也会存在其他消耗一样的路径且没有过多转向。结合实际,其实转向也是有消耗的,所以可以增加一个值e用来表示转向消耗,当没有转向时e = 0,当转向时e = 1,此时启发函数变为

f = g + (w + p) * h + e

3.开启列表优化

开启列表在寻路中是一个会被频繁插入数据并排序的一个列表,若每次都插入数据再排序会十分消耗性能,所以在插入数据时可以先进行数据比较,再插入数据,就能一定程度上优化开启列表。

4.遍历相邻点优化

寻路是一个重复计算一个点周围所有点距离起点和终点距离的过程,但有时并不需要将周围所有点都纳入计算,比如终点在起点右上方时,起点左下角的个别点其实可以不进行计算,因为它们的消耗一般情况下都会更大,此时循环对这些点进行计算会浪费很多时间,所有在计算时可以舍弃部分点。

但有时舍弃相邻的部分点也会导致寻路得到的路径并不是最优路径,比如起点被障碍包围,只在被舍弃的周围点附近留有缺口时,寻找到的路径就会绕路,这时旧还需优化(但本人没找到好的优化方案^_^)

下面是使用unity实现的可视化A星寻路优化工程

unity工程-A星寻路优化

除了上述几点外,A星寻路还有其他的优化方案,但我在工程中只实现上述几种,并没有实现存储常用位置间的路径信息的优化,而且A星寻路有时就是找不到最优路径,尤其在障碍点较复杂时比如在我工程中的情况,所以还有待优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/133510.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axios 封装

请注意以下文件夹&#xff1a; utils下的setToken.js 是token封装&#xff08;封装 Token-CSDN博客&#xff09;,service.js 是axios封装。 Axios封装&#xff1a; 1.安装axios 在项目终端下 输入&#xff1a; npm install axios --save 2.在main.js全局引入axios import…

「五度情报站」网罗全量企业情报,找客户、查竞品、寻商机!

在当下严峻的市场经济环境下&#xff0c;准确、及时的情报信息&#xff0c;就如同指引企业前行的明灯&#xff0c;能够让企业在风起云涌的市场大潮中保持敏锐的洞察力&#xff0c;掌握最新的市场动态&#xff0c;洞悉竞争对手的一举一动&#xff0c;先知先动&#xff0c;保持竞…

数字化转型背景下,MES管理系统的新特征是什么

近年来&#xff0c;随着智能制造的快速发展&#xff0c;MES管理系统作为生产过程中的重要管理系统&#xff0c;也越来越受到企业的关注和应用。在实现MES系统的过程中&#xff0c;需要将JIT思想融入其中&#xff0c;实现业务流程管理的自动化&#xff1b;同时&#xff0c;也需要…

苍穹外卖(三) 员工分页及技术实现细节

2. 员工分页查询 2.1 需求分析和设计 2.1.1 产品原型 2.1.2 接口设计 2.2 代码开发 2.2.1 设计DTO类 根据请求参数进行封装 2.2.2 封装PageResult 后面所有的分页查询&#xff0c;统一都封装为PageResult对象。 员工信息分页查询后端返回的对象类型为: Result 2.…

如何在Ubuntu 20.04.6 LTS系统上运行Playwright自动化测试

写在前面 这里以 Ubuntu 20.04.6 LTS为例。示例代码&#xff1a;自动化测试代码。 如果过程中遇到其他非文本中提到的错误&#xff0c;可以使用搜索引擎搜索错误&#xff0c;找出解决方案&#xff0c;再逐步往下进行。 一、 环境准备 1.1 安装python3 1.1.1 使用APT安装Py…

一种用于肽图分析的烷化剂,Desthiobiotin-Iodoacetamide

中文名&#xff1a;脱硫生物素-碘乙酰胺 英文名&#xff1a;Desthiobiotin-Iodoacetamide 化学式&#xff1a;C14H25IN4O3 分子量&#xff1a;424.28 外观&#xff1a;固体/粉末 规格&#xff1a;10mg、25mg、50mg等&#xff08;接受各种规格的定制服务&#xff0c;具体可…

源码部署lamt架构

源码部署lamt架构 lamt由apache&#xff0c;mysql&#xff0c;tomcat三者组成 文章目录 源码部署lamt架构1.准备工作1.1.配置yum源&#xff0c;关闭防火墙和selinux1.2.拉取相应源码包 2.安装apache3.安装mariadb4.安装tomcat 1.准备工作 1.1.配置yum源&#xff0c;关闭防火墙…

Linux上安装Redis教程

本篇文章是基于CentOS7&#xff0c;安装Redis版本为redis-6.2.6。 一、下载并解压Redis 1、执行下面的命令下载redis&#xff1a; wget https://download.redis.io/releases/redis-6.2.6.tar.gz 2、解压redis&#xff1a; tar xzf redis-6.2.6.tar.gz 3、移动redis目录&a…

android之TextView自由选择复制

文章目录 前言一、效果图二、实现步骤1.OnSelectListener2.SelectionInfo类3.TextLayoutUtil类4.复制弹框的xml布局5.弹框背景Drawable6.倒三角Drawable7.复制工具类8.调用 总结 前言 根据时代进步&#xff0c;那些干产品的也叼砖起来了&#xff0c;今天就遇到一个需求&#x…

第一次汇报相关问题

深度学习现在已经学习到了Mini-Batch&#xff0c;early-stop等针对特定场景优化的算法了。 代码已经实现了一个L层的神经网络的构建了 论文看了一些综述 主要思考的两个方向&#xff1a;云计算和嵌入式 云计算&#xff1a;分布式机器学习、联邦学习、服务器负载均衡等 嵌入式&…

前端axios下载导出文件工具封装

使用示例&#xff1a; import { fileDownload } from /utils/fileDownloadfileDownload({ url: process.env.VUE_APP_BASE_URL /statistic/pageList/export, method: post, data: data })工具类&#xff1a; import store from ../store/index import {getAccessToken } fro…

【大数据】HBase入门指南

原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 HBase特性Hadoop的限制基本概念NameSpaceTableRowKeyColumnTimeStampCell 存储结构HBase 数据访问形式架构体系HBase组件HBase读写流程读流程写流程 MemStore Flush参数说明 StoreFile Compaction参数说明触…