台湾省军事演习路径规划:A*算法在复杂地形中的应用
❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!
推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
导航:
- LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
- 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
- python源码解读:解读python的源代码与调用关系,快速提升代码质量
- python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
- 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识
期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️
引言
在近期台湾附近的军事演习中,部队的调动和战术安排需要精确的路径规划,以确保各单位能够迅速、高效地到达指定位置。类似地,在计算机科学中,路径规划算法被广泛应用于导航、机器人控制和游戏开发等领域。今天,我们将通过军事演习的视角,解析一种经典的路径规划算法——A*算法。
军演背景
在一次模拟军演中,指挥官需要安排部队从多个起点移动到指定的战略位置。这些位置可能位于岛屿的不同角落,途中还有各种障碍物,如山地、河流和敌方防御工事。为了在复杂地形中找到最优路径,指挥官决定使用A*算法。

A*算法的原理
A算法是一种启发式搜索算法,它结合了广度优先搜索(BFS)和深度优先搜索(DFS)的优点,通过评估当前路径的代价和预估的剩余路径代价来找到最优路径。A算法使用一个优先级队列来选择下一步移动的节点。
关键概念
- 起点(Start):部队的出发位置。
- 终点(Goal):部队的目标位置。
- 开放列表(Open List):包含待评估的节点。
- 关闭列表(Closed List):包含已评估的节点。
- 代价函数(f(n)):用于评估节点的优先级,计算公式为
f(n) = g(n) + h(n),其中:g(n):从起点到当前节点的实际代价。h(n):从当前节点到终点的预估代价(启发式函数)。
军事演习中的A*算法应用
步骤
-
初始化:
- 将起点添加到开放列表,设定
g(start) = 0,h(start)为起点到终点的预估代价。
- 将起点添加到开放列表,设定
-
选择节点:
- 从开放列表中选择
f(n)最小的节点作为当前节点。
- 从开放列表中选择
-
生成后继节点:
- 为当前节点生成所有可能的后继节点,并计算它们的
g值和h值。 - 如果某个后继节点已经在关闭列表中,跳过它。
- 如果某个后继节点不在开放列表中或新的
g值更低,更新它的g值和f值,并将其父节点设为当前节点。
- 为当前节点生成所有可能的后继节点,并计算它们的
-
终止条件:
- 如果当前节点是终点,算法结束,并通过回溯父节点链得到最优路径。
- 如果开放列表为空,表示没有找到路径。
示例
假设部队需要从A点福州移动到B点台州,地图如下:
A . . X . . . . . .
X X . X . X X X . .
. . . X . . . X . .
. X . . . X . . . .
. X X X . X X X X B
其中,. 表示可通行区域,X 表示障碍物。
- 初始化:
开放列表:[(A, f(A))] 关闭列表:[] - 选择节点:
- 选择A作为当前节点。
- 生成A的后继节点。
- 更新列表:
开放列表:[(A1, f(A1)), (A2, f(A2)), ...] 关闭列表:[A] - 重复:
- 持续选择开放列表中
f(n)最小的节点,生成后继节点,更新开放和关闭列表,直到找到B或开放列表为空。
- 持续选择开放列表中
A*算法的代码实现
import heapqdef heuristic(a, b):"""启发式函数,计算从节点a到节点b的曼哈顿距离"""return abs(a[0] - b[0]) + abs(a[1] - b[1])def a_star_search(start, goal, grid):"""使用A*算法在给定的网格(grid)中查找从start到goal的最优路径"""# 初始化开放列表并将起点添加到其中open_list = []heapq.heappush(open_list, (0, start))# 初始化记录路径的字典came_from = {}# 初始化g_score和f_score字典g_score = {start: 0}f_score = {start: heuristic(start, goal)}while open_list:# 从开放列表中取出f值最小的节点current = heapq.heappop(open_list)[1]# 如果当前节点是目标节点,回溯路径并返回if current == goal:path = []while current in came_from:path.append(current)current = came_from[current]path.append(start)path.reverse()return path# 生成当前节点的所有相邻节点for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:neighbor = (current[0] + dx, current[1] + dy)# 检查邻居节点是否在网格范围内且不是障碍物if 0 <= neighbor[0] < len(grid) and 0 <= neighbor[1] < len(grid[0]) and grid[neighbor[0]][neighbor[1]] == '.':tentative_g_score = g_score[current] + 1# 如果邻居节点不在g_score中或新的g值更低,更新路径和分数if neighbor not in g_score or tentative_g_score < g_score[neighbor]:came_from[neighbor] = currentg_score[neighbor] = tentative_g_scoref_score[neighbor] = g_score[neighbor] + heuristic(neighbor, goal)heapq.heappush(open_list, (f_score[neighbor], neighbor))# 如果开放列表为空且未找到目标节点,返回Nonereturn None# 示例地图
grid = [['A', '.', '.', 'X', '.', '.', '.', '.', '.', '.'],['X', 'X', '.', 'X', '.', 'X', 'X', 'X', '.', '.'],['.', '.', '.', 'X', '.', '.', '.', 'X', '.', '.'],['.', 'X', '.', '.', '.', 'X', '.', '.', '.', '.'],['.', 'X', 'X', 'X', '.', 'X', 'X', 'X', 'X', 'B']
]start = (0, 0) # A点的位置(福州)
goal = (4, 9) # B点的位置(台州)# 执行A*搜索算法并打印找到的路径
path = a_star_search(start, goal, grid)
print("找到的路径:", path)
总结
通过军事演习的视角,我们了解了A算法在路径规划中的应用。A算法通过结合实际代价和预估代价,能够高效地找到最优路径,适用于复杂的地形和障碍物环境。希望这个故事和示例能够帮助你更好地理解A*算法的工作原理及其在实际中的应用。
🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)
❤️❤️关注公众号 数据分析螺丝钉 回复 学习资料 领取高价值免费学习资料❥(^_-)
相关文章:
台湾省军事演习路径规划:A*算法在复杂地形中的应用
❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…...
OpenHarmony鸿蒙软总线使用mbedtls数据加密详解
OpenHarmony鸿蒙软总线子系统中使用了多种的加密技术,本篇介绍调用mbedtls的数据加密。 调用mbedtls加密的源码位于: foundation/communication/dsoftbus/adapter/common/mbedtls/softbus_adapter_crypto.c 这个源码单元,调用mbedTLS库实现了各种加密功能,包括AES-GCM加密…...
【JavaEE】Servlet
文章目录 一、Servlet 是什么二、如何创建Servlet程序1、创建项目2、引入依赖3、创建目录4、编写代码5、打包程序6、部署程序7、验证程序 一、Servlet 是什么 二、如何创建Servlet程序 1、创建项目 2、引入依赖 Maven 项目创建完后,会自动生成一个 pom.xml 的文…...
SpringBoot——整合Redis
目录 Redis 创建Commodity表 启动MySQL和Redis 新建一个SpringBoot项目 pom.xml application.properties Commodity实体类 ComMapper接口 ComService业务层接口 ComServiceImpl业务接口的实现类 ComController控制器 RedisConfig配置类 SpringbootRdisApplication启…...
2024全新Langchain大模型AI应用与多智能体实战开发
2024全新Langchain大模型AI应用与多智能体实战开发 LangChain 就是一个 LLM 编程框架,你想开发一个基于 LLM 应用,需要什么组件它都有,直接使用就行;甚至针对常规的应用流程,它利用链(LangChain中Chain的由来)这个概念…...
【JavaEE 初阶(十)】JVM
❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多进阶知识 目录 1.前言2.JVM内存区域划分3.类加载3.1双亲委派模型 4.垃圾回收(GC࿰…...
【Flutter】AspectRatio组件Card组件按钮组件Wrap组件
🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Flutter学习 🌠 首发时间:2024年5月25日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 目…...
【IDEA软件应用篇】IDEA基础开发设置和开发快捷键
IDEA是一种集成开发环境,可以运行java代码。 本篇文章你将收获到下面的知识: (1)IDEA如何设置字体大小快捷键 (2)如何解决每次进IDEA时,进去的页面都是上次使用完时的那个页面 (3&am…...
机器学习--数学部分笔记
前言 因为周三要考试,所以数学部分写一下笔记 正文 随机事件和随机实验 条件概率 • 在已知事件 𝐵 发生的条件下,事件𝐴发生的概率称为事件 𝐴 的条件概率,记为𝑃(𝐴|𝐵) 全概率…...
基于springboot的在线宠物用品交易网站源码数据库
基于springboot的在线宠物用品交易网站源码数据库 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了在线宠物用品交易网站的开发全过程。通过分析在线宠物用品交易网站管理的不足,创建了一个计算机管理在…...
【Pytorch】13.搭建完整的CIFAR10模型
项目源码 已上传至githubCIFAR10Model,如果有帮助可以点个star 简介 在前文【Pytorch】10.CIFAR10模型搭建我们学习了用Module来模拟搭建CIFAR10的训练流程 本节将会加入损失函数,梯度下降,TensorBoard来完整搭建一个训练的模型 基本步骤 搭建…...
护目镜佩戴自动识别预警摄像机
护目镜佩戴自动识别预警摄像机是一种智能监测设备,专门用于佩戴护目镜的工人进行作业时,能够自动识别有潜在风险的场景,并及时发出预警信号。该摄像机配备人脸识别和智能预警系统,可以检测危险情况并为工人提供实时安全保护&#…...
keep-alive的使用
Vue中的<keep-alive>组件是前端开发中的一个宝藏功能,它如同时光胶囊般保留组件的状态,让组件在切换时仿佛按下暂停键,再次回来时还能继续播放,极大地优化了用户体验和性能。🚀✨ 作用 状态保留:当包…...
【Linux】中的常见的重要指令(中)
目录 一、man指令 二、cp指令 三、cat指令 四、mv指令 五、more指令 六、less指令 七、head指令 八、tail指令 一、man指令 Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: m…...
营收净利双降、股东减持,大降价也救不了良品铺子
号称“高端零食第一股”的良品铺子(603719.SH),正遭遇部分股东的“用脚投票”。 5月17日晚间,良品铺子连发两份减持公告,其控股股东宁波汉意创业投资合伙企业、持股5%以上股东达永有限公司,两者均计划减持。 其中,宁…...
【设计模式】设计模式的分类
通常设计模式的分类有创建型、行为型和结构型。 创建型 常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。 不常用的有:原型模式。 创建型模式涉及到将对象实例化,这类模式都提供一个方法,将…...
TCP/UDP的连接机制
TCP/UDP的连接机制 TCP的连接机制 TCP(Transmission Control Protocol)是一种面向连接的协议,提供可靠的、按顺序的数据传输服务。TCP的连接机制包括连接建立、数据传输和连接终止。 1. 连接建立(三次握手) TCP通过…...
供应链金融模式学习资料
目录 产生背景 供应链金融的诞生 供应链金额的六大特征...
代码随想录-算法训练营day50【动态规划12:最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费、股票问题总结】
代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part12● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费 ●总结309.最佳买卖股票时机含冷冻期 本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰…...
Dilworth 定理
这是一个关于偏序集的定理,事实上它也可以扩展到图论,dp等中,是一个很有意思的东西 偏序集 偏序集是由集合 S S S以及其上的一个偏序关系 R R R定义的,记为 ( S , R ) (S,R) (S,R) 偏序关系: 对于一个二元关系 R ⊂…...
从单片机思维到FPGA思维:我用Xilinx Ego1做循迹小车踩过的那些‘坑’
从单片机思维到FPGA思维:Xilinx Ego1循迹小车开发实战避坑指南 第一次用FPGA做循迹小车时,我盯着Vivado里密密麻麻的时序报告发呆了半小时——这和我熟悉的单片机开发完全是两个世界。作为有三年STM32开发经验的工程师,本以为凭借Verilog语法…...
3PEAK思瑞浦 TPT1051V-SO1R SOP8 CAN收发器
特性 符合IS011898标准支持CAN FD和最高达5 Mbps的数据速率典型环路延迟:110纳秒5V电源供应,3.0V~5.5VI0接口接收器共模输入电压:士30V总线故障保护:42VCAN网络最多支持110个节点结温范围从-40C到150C闩锁性能超过500mA总线引脚ESD保护:-8kV人体模型 -1.5kV充电设备…...
从make clean到build.prop:揭秘Android系统属性生成的完整链条
从make clean到build.prop:揭秘Android系统属性生成的完整链条 当你通过adb shell getprop ro.build.display.id查看设备版本号时,是否好奇过这个字符串背后的生成逻辑?在Android编译系统中,从Makefile执行到最终生成build.prop文…...
把openEuler当微服务跑:Docker Compose编排实战,管理Nginx+MySQL多容器应用
微服务架构下的openEuler容器化实践:NginxMySQL多容器编排指南 1. 云原生时代的轻量级操作系统选择 在容器化技术席卷全球的今天,开发者们越来越倾向于将操作系统本身也视为可编排的服务单元。openEuler作为一款专为云原生场景优化的Linux发行版…...
基于大数据 Spark+Hadoop+Hive的中国不同城市奶茶品牌的影响力分析
前言现如今在中国市场中,奶茶行业以其别具一格的魅力和庞大的年轻消费群体,具备一些研究价值。伴随着消费者需求的日益多样化和市场竞争的逐步激烈,奶茶品牌在中国不同城市的影响力呈现出显著的差异。本研究基于这一背景,以中国不…...
电路设计与漫画艺术的跨界融合
1. 当电路遇见漫画:工程师的艺术表达在大多数人眼中,电路设计是冰冷的数据和复杂的公式,而漫画则是天马行空的创意表达。但作为一名从业十年的硬件工程师,我发现这两者其实有着惊人的相似之处——它们都需要严谨的结构设计&#x…...
三种主流技术方案,实现文本差异并排对比与可视化
1. 文本差异对比的技术需求与场景分析 在代码审查、文档修订或数据比对等场景中,文本差异对比功能就像给内容做"CT扫描",能快速定位修改痕迹。我经历过多次团队协作时找不到修改点的尴尬,直到系统化地测试了三种主流技术方案。**并…...
【独家首发】基于eBPF+Java Agent+Istio Telemetry V2的零侵入式调试框架(已落地金融级生产环境,QPS>50K场景验证)
第一章:零侵入式调试框架的演进逻辑与金融级落地价值传统调试方式依赖代码埋点、日志增强或代理注入,不仅增加系统耦合度,更在高敏感、强一致性的金融核心系统中引入不可控风险。零侵入式调试框架应运而生——它不修改业务字节码、不依赖特定…...
SAP BAPI实战指南:核心模块高频接口速查与应用解析
1. SAP BAPI入门:为什么开发者需要这份速查手册 第一次接触SAP BAPI时,我盯着满屏的接口文档差点崩溃——光是FICO模块就有二十多个常用BAPI,每个接口的参数列表长得像毕业论文。后来在项目上踩过几次坑才明白,BAPI的难点不在于技…...
Sora全面下线,AI界背后的商业逻辑是什么?
你敢相信吗?那个曾以一己之力震撼全球影视圈、让无数视频创作者彻夜难眠、被视为AI视频生成之王的Sora,被它的亲生父母OpenAI,亲手按下了停止键。一觉醒来,没有降级,没有合并,Sora独立App的API接口直接下线…...

