软件价值3-A*算法寻路

A*算法(A-star算法)是一种启发式搜索算法,主要用于在图或网络中找到从起始节点到目标节点的最佳路径。它结合了Dijkstra算法的广度优先搜索和贪婪最优优先搜索的特点,通过估算从起始节点到目标节点的代价来指导搜索方向。

A*算法的核心思想是维护一个开放列表(open list)和一个关闭列表(closed list)。算法在每一步选择开放列表中代价最小的节点进行拓展,同时更新与该节点相邻的节点的代价估计和路径信息。算法通过两个函数来评估每个节点的优先级:

1. g(n):表示从起始节点到节点n的实际代价,即起点到当前节点的路径长度。
2. h(n):表示从节点n到目标节点的启发式估计代价,即当前节点到目标节点的最短可能路径的估计长度(启发式函数)。

A*算法通过计算 f(n) = g(n) + h(n) 来评估每个节点的优先级,然后选择具有最小f(n)值的节点进行拓展。这样,A*算法能够在搜索过程中综合考虑实际代价和启发式估计,以找到一条最优的路径

A*算法的优点在于它在搜索空间中能够更加智能地选择节点,减小搜索范围,从而提高搜索效率。但需要注意,启发式函数的选择对算法的性能有很大影响,不同的启发式函数可能导致不同的搜索结果。

详情可以看博文:

A* 寻路算法

演示:

Matt Yanos实现的A*寻路

绿色为起点,红色是终点,黑色是结果路径,黄色是搜索路径范围,由图可见A*算法在迷宫里搜索效率还是比较高的。

其中一种启发式函数 Manhattan 的实现:

package astargazer.map.heuristic;

import astargazer.map.WeightedPoint;

/**
 * Manhattan distance heuristic
 * 
 * @author Matt Yanos
 */
public class HeuristicManhattan extends HeuristicScheme
{
    @Override
    public float distance(WeightedPoint one, WeightedPoint two)
    {
        return Math.abs(two.getCol() - one.getCol()) + Math.abs(two.getRow() - one.getRow());
    }

    @Override
    public String getLabel()
    {
        return "Manhattan";
    }

    @Override
    public String getExplanation()
    {
        return "Manhattan (or Taxicab) distance only permits travelling along " + 
               "the x and y axes, so the distance between (0, 0) and (1, 1) is " + 
               "2 from travelling along the X axis 1 unit and then up the Y " + 
               "axis 1 unit, and not the hypotenuse, which would be sqrt(2)/2. " + 
               "It's so named because in a city you're bound to the streets. " + 
               "You can't cut diagonally through a building to go north/south " + 
               "one block and east/west one block.";
    }
}

曼哈顿距离(Manhattan distance)是一种启发式函数,常用于A*算法等路径搜索算法中。它也被称为城市街区距离、L1距离或曼哈顿长度。

对于在二维平面上的两点P(x1, y1)和Q(x2, y2),它们之间的曼哈顿距离定义为它们在水平和垂直方向上的坐标差的绝对值之和:

\text{Manhattan Distance}(P, Q) = |x1 - x2| + |y1 - y2| 

在路径搜索问题中,曼哈顿距离常被用作启发式函数,特别是在网格状结构(如棋盘格)中。对于这种结构,每一步只能在水平或垂直方向上移动一个单位,因此曼哈顿距离提供了一种很好的启发式方法来估计两点之间的实际路径代价。

在A*算法中,曼哈顿距离作为启发式函数 h(n) 的一部分,用于估计从当前节点到目标节点的最短可能路径的长度。曼哈顿距离的选择通常能够提高A*算法的搜索效率,特别是在图或网络结构中的路径搜索问题中。

结论:

A*算法可以应用于障碍寻路。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据恢复之道:DevicData-P-XXXXXXXX勒索病毒的预防与恢复攻略

尊敬的读者: 随着科技的发展,网络安全问题愈发突出,而勒索病毒作为其中的一种恶意软件,正不断演进成为威胁用户数据安全的严重问题。本文将深入介绍.DevicData-P-XXXXXXXX勒索病毒的特征,提供被感染文件的恢复方法&am…

【Latex】 最全的Latex公式常用符号和文本颜色用法汇总

每次在CSDN写latex公式都没有一个很全的博客能完全覆盖,本文争取汇总Latex使用过程中用到的所有符号和技巧,包括:二元运算与关系符号、大型运算符、数学符号、特殊字符、希腊字母、各种括号和矩阵的编码等。 注意,其他排版主要用…

ov通配符ssl证书申请时间长吗

通配符SSL证书是SSL数字证书的一种,可以同时保护主域名以及同一个域名下的所有子域名。用户在申请通配符SSL证书时需要CA认证机构对提交的信息进行审核,审核时间根据证书的品牌、类型而变化。今天就随SSL盾小编了解OV通配符SSL证书申请时间。 1.通配符S…

深入Pyecharts:桑基图绘制与炫酷效果实战【第38篇—python:桑基图】

文章目录 深入Pyecharts:桑基图绘制与炫酷效果实战桑基图简介安装 Pyecharts简单桑基图的绘制自定义桑基图的炫酷效果高级样式定制 多组数据桑基图的展示动态桑基图的绘制结合真实数据的桑基图案例导出和分享进阶应用:桑基图与其他图表的组合总结 深入Py…

知识点积累系列(四)Kubernetes篇【持续更新】

云原生学习路线导航页(持续更新中) 本文是 知识点积累 系列文章的第四篇,记录日常学习中遇到的 Kubernetes 相关的知识点 1.Kubernetes琐碎知识点 1.1.为什么要有annotations annotation中除了能够记录一些额外信息,还可以解决k…

几种常见的vcruntime140_1.dll无法继续执行代码弹窗错误解决办法

vcruntime140_1.dll是Windows操作系统中的一个动态链接库文件,用于支持C程序和应用程序的运行,有时可能会遇到以下错误信息:“vcruntime140_1.dll无法继续执行代码”。本文将详细介绍这个常见问题的原因,并提供相应的解决办法。 一…

安装 vant-ui 实现底部导航栏 Tabbar

本例子使用vue3 介绍 vant-ui 地址:介绍 - Vant 4 (vant-ui.github.io) Vant 是一个轻量、可定制的移动端组件库 安装 通过 npm 安装: # Vue 3 项目,安装最新版 Vant npm i vant # Vue 2 项目,安装 Vant 2 npm i vantlatest-v…

Linux服务器根据服务端口号杀死对应服务

获取服务pid 输入命令 ss -tulnp | grep :16522输出 tcp 表示连接的类型是TCP。LISTEN 表示端口正在监听连接。第一个数字 0 是 Recv-Q(接收队列),表示当前接收队列中已由网络接收但还未被进程读取的数据的数量。第二个数字 128 是 Send-Q&…

使用moment实现数字转秒数和递进分钟和小时

使用moment实现数字转秒数和递进分钟和小时 效果图引用包js 功能:不满一分钟展示秒数,满一分钟展示分秒,满一小时展示时分秒 效果图 引用包 "moment": "^2.24.0", "moment-duration-format": "^2.3.2&q…

springboot+AOP+自定义注解+RBAC自定义操作权限管理01

springbootAOP自定义注解RBAC自定义操作权限管理01!今天 做了内容是该自定义权限管理系统的前奏。第一小节内容。搭建了一个基础的springboot项目,和数据库的三张表。 tb_user;tb_role;tb_roel_user。实现了一个基础的,用户和角色表的联动查询。为了后续…

uniapp如何安装uview

1.下载并导入插件 打开链接 uView2.0重磅发布,利剑出鞘,一统江湖 - DCloud 插件市场 没有的登录的就先登录 导入成功后,可见 2. 添加配置 main.js import uView from /uni_modules/uview-ui Vue.use(uView) uni.scss import /uni_module…

(M)UNITY三段攻击制作

三段攻击逻辑 基本逻辑: 人物点击攻击按钮进入攻击状态(bool isAttack) 在攻击状态下, 一旦设置的触发器(trigger attack)被触发,设置的计数器(int combo)查看目前攻击…

Mastercam 2024 下载安装教程,流程简单,小白也能轻松搞定,附安装包和工具

前言 Mastercam是一款高效专业的实用型CAD/CAM设计辅助工具,集二维绘图、三维实体造型、曲面设计、体素拼合、数控编程、刀具路径模拟及真实感模拟等多种功能于一身,能够帮助用户轻松设计各种复杂的曲线、曲面零件、刀具路径等。 准备工作 1、Win10及…

小米笔记本电脑共享屏幕到苹果手机,这里有两个方法

相信大家都知道苹果手机投屏到小米笔记本电脑的方法,今天分享一下将电脑投屏到苹果手机的操作。 你可以选择安装软件或不安装软件。 安装软件的方法: 第一步,在小米笔记本电脑和苹果手机都安装AirDroid Cast,两台设备连接同一个网…

Linux/ScriptKiddie

Enumeration nmap 第一次扫描发现系统对外开放了22和5000端口,端口详细信息如下 22端口运行着openssh,5000端口则是werkzeug的httpd,tittle是kids hacker tools TCP/5000 首先从5000端口开始,先访问站点,站点是一个…

码多多ChatAI智能聊天系统:打造智能营销

产品介绍: 码多多ChatAI智能聊天系统是一款基于人工智能技术的聊天机器人,具备自然语言处理、情感识别和多轮对话能力。该系统可应用于客户服务、营销推广和市场调查等领域,提供实时、高效的人工智能交互体验。同时,码多多ChatAI支持个性化定…

2024美赛数学建模C题思路+代码

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间:北京时间2024年2月2日(周五&#xff…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏3(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言库存系统素材绘制简单的库存UI控制库存开关实现物品拖拽功能拾取物品添加更多物品 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏…

Linux实验记录:远程控制服务

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: SSH(Secure Shell&…

【Python基础018】在程序中怎么实现自定义抛出异常

在上一节中,我们讲了如何对程序中的异常进行处理,但这是针对程序在运行过程中系统自动抛出的异常,而让程序被动的抛出异常在实践中也具有重要作用。 1、raise语句抛出异常 raise 语句可以使用一个类(必须是 Exception 或者 Excep…