台湾省军事演习路径规划:A*算法在复杂地形中的应用

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣!

  • 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注
    在这里插入图片描述

  • 导航

    • LeetCode解锁1000题: 打怪升级之旅:每题都包括3-5种算法,以及详细的代码实现,刷题面试跳槽必备
    • 漫画版算法详解:通过漫画的形式和动态GIF图片把复杂的算法每一步进行详细可视解读,看一遍就掌握
    • python源码解读:解读python的源代码与调用关系,快速提升代码质量
    • python数据分析可视化:企业实战案例:企业级数据分析案例与可视化,提升数据分析思维和可视化能力
    • 程序员必备的数学知识与应用:全面详细的介绍了工程师都必备的数学知识

期待与您一起探索技术、持续学习、一步步打怪升级 欢迎订阅本专栏❤️❤️

引言

在近期台湾附近的军事演习中,部队的调动和战术安排需要精确的路径规划,以确保各单位能够迅速、高效地到达指定位置。类似地,在计算机科学中,路径规划算法被广泛应用于导航、机器人控制和游戏开发等领域。今天,我们将通过军事演习的视角,解析一种经典的路径规划算法——A*算法。

军演背景

在一次模拟军演中,指挥官需要安排部队从多个起点移动到指定的战略位置。这些位置可能位于岛屿的不同角落,途中还有各种障碍物,如山地、河流和敌方防御工事。为了在复杂地形中找到最优路径,指挥官决定使用A*算法。
在这里插入图片描述

A*算法的原理

A算法是一种启发式搜索算法,它结合了广度优先搜索(BFS)和深度优先搜索(DFS)的优点,通过评估当前路径的代价和预估的剩余路径代价来找到最优路径。A算法使用一个优先级队列来选择下一步移动的节点。

关键概念
  1. 起点(Start):部队的出发位置。
  2. 终点(Goal):部队的目标位置。
  3. 开放列表(Open List):包含待评估的节点。
  4. 关闭列表(Closed List):包含已评估的节点。
  5. 代价函数(f(n)):用于评估节点的优先级,计算公式为 f(n) = g(n) + h(n),其中:
    • g(n):从起点到当前节点的实际代价。
    • h(n):从当前节点到终点的预估代价(启发式函数)。

军事演习中的A*算法应用

步骤
  1. 初始化

    • 将起点添加到开放列表,设定 g(start) = 0h(start) 为起点到终点的预估代价。
  2. 选择节点

    • 从开放列表中选择 f(n) 最小的节点作为当前节点。
  3. 生成后继节点

    • 为当前节点生成所有可能的后继节点,并计算它们的 g 值和 h 值。
    • 如果某个后继节点已经在关闭列表中,跳过它。
    • 如果某个后继节点不在开放列表中或新的 g 值更低,更新它的 g 值和 f 值,并将其父节点设为当前节点。
  4. 终止条件

    • 如果当前节点是终点,算法结束,并通过回溯父节点链得到最优路径。
    • 如果开放列表为空,表示没有找到路径。
示例

假设部队需要从A点福州移动到B点台州,地图如下:

A . . X . . . . . .
X X . X . X X X . .
. . . X . . . X . .
. X . . . X . . . .
. X X X . X X X X B

其中,. 表示可通行区域,X 表示障碍物。

  1. 初始化
    开放列表:[(A, f(A))]
    关闭列表:[]
    
  2. 选择节点
    • 选择A作为当前节点。
    • 生成A的后继节点。
  3. 更新列表
    开放列表:[(A1, f(A1)), (A2, f(A2)), ...]
    关闭列表:[A]
    
  4. 重复
    • 持续选择开放列表中 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*算法的工作原理及其在实际中的应用。

🌹🌹如果觉得这篇文对你有帮助的话,记得一键三连关注、赞👍🏻、收藏是对作者最大的鼓励,非常感谢 ❥(^_-)

❤️❤️关注公众号 数据分析螺丝钉 回复 学习资料 领取高价值免费学习资料❥(^_-)
在这里插入图片描述

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

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

相关文章

【全开源】分类记账小程序系统源码(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniAppvk-uView-uiVue3.0开发的一款支持多人协作的记账本小程序&#xff0c;可用于家庭&#xff0c;团队&#xff0c;组织以及个人的日常收支情况记录&#xff0c;支持周月年度统计。 &#xff1a;智能管理您的财务生活 一、引言&#xff1a;财务智能化…

代码的命名规则

单词简写 单词超长的可简写、代码内常见的可简写 方法 均小写&#xff0c;用下划线分割&#xff0c;文件名_动作_属性_子属性_子属性的子属性 例如&#xff1a;uart_open、uart_write、uart_read_remaining、uart_change_baudrate、uart_get_xxx、uart_is_xxx、uart_wait_do…

HTTP 错误 404.3 - Not Found 问题处理

问题描述 HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本&#xff0c;请添加处理程序。如果应下载文件&#xff0c;请添加 MIME 映射。 解决对策

如何网页在线编辑 Office word 文档,并支域功能:创建域/插入域/替换域等

在日常在线办公场景中&#xff0c;我们经常会遇到一些复杂的文档编辑需求&#xff0c;特别是我们经常会遇到一些复杂的数学公式&#xff0c;会用到“域”功能&#xff0c;“域”功能便是一个高级且实用的工具。通过设置域&#xff0c;用户可以实现文档的自动化处理&#xff0c;…

【QT实战】汇总导航

✨Welcome 大家好&#xff0c;欢迎来到瑾芳玉洁的博客&#xff01; &#x1f611;励志开源分享诗和代码&#xff0c;三餐却无汤&#xff0c;顿顿都被噎。 &#x1f62d;有幸结识那个值得被认真、被珍惜、被捧在手掌心的女孩&#xff0c;不出意外被敷衍、被唾弃、被埋在了垃圾堆…

捕捉二氧化碳也能赚钱?深入探索CCUS技术与商业前景

引言 随着全球变暖和气候变化的加剧&#xff0c;如何有效减少二氧化碳&#xff08;CO2&#xff09;排放成为各国亟待解决的问题。近日&#xff0c;全球最大的二氧化碳捕集工厂在冰岛正式运营&#xff0c;这一消息引起了广泛关注。本文将深入探讨捕集二氧化碳技术&#xff08;C…

【负载均衡在线OJ项目日记】引入网络库和客户端用户路由功能

目录 引入cpp-httplib库 将编译与运行服务打包 代码 客户端用户路由功能 采用MVC结构进行设计 用户路由功能 路由功能代码 引入cpp-httplib库 对于后端编译与运行模块基本已经设计完成&#xff0c;最后用户是通过网络传递代码等信息&#xff1b;我们就要将这个模块引入…

跟TED演讲学英文:Bring on the learning revolution! by Sir Ken Robinson

Bring on the learning revolution! Link: https://www.ted.com/talks/sir_ken_robinson_bring_on_the_learning_revolution Speaker: Sir Ken Robinson Date: February 2010 文章目录 Bring on the learning revolution!IntroductionVocabularySummaryTranscriptAfterword I…

基于 BERT 对 IMDB 电影评论进行情感分类

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

# AI产品经理的自我修养:既懂用户,更懂技术!

今天上班的时候&#xff0c;发现很多AI社群都在讨论一篇播客《一个顶级AI产品经理的自我修养&#xff0c;对谈光年之外产品负责人Hidecloud》&#xff0c;这篇播客的嘉宾是光年之外的产品负责人——Hidecloud&#xff08;张涛&#xff09;&#xff0c;聊了许多关于他在做AI产品…

MySQL多表关联查询习题

一、素材 -- Active: 1714203732007127.0.0.13306db_stu -- 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); -- 创建…

Springboot中的微服务架构实践

Spring Boot中的微服务架构实践 在本文中&#xff0c;我们将分析微服务架构的关键概念及其在Spring Boot中的应用。然后&#xff0c;我们将演示如何构建微服务并将它们部署到云端或本地服务器。最后&#xff0c;我们将探索使用Spring Cloud和Netflix Eureka进行服务发现和配置…

Android遇到未处理的异常时干掉自己然后重新启动

Android遇到未处理的异常时干掉自己然后重新启动 安卓主线程遇到异常会死掉表现为直接闪退&#xff0c;如果只是添加了全局异常处理&#xff0c;主线程异常会表现为卡死此时则需要对活动进行重启处理* override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(sa…

【机器学习】机器学习基础概念与初步探索

❀机器学习 &#x1f4d2;1. 引言&#x1f4d2;2. 机器学习概述&#x1f4d2;3. 机器学习基础概念&#x1f389;2.1 机器学习的分类&#x1f389;2.2 数据预处理&#x1f308;数据清洗与整合&#x1f308; 特征选择和特征工程&#x1f308;数据标准化与归一化 &#x1f4d2;4. …

c#从数据库读取数据到datagridview

从已有的数据库读取数据显示到winform的datagridview控件&#xff0c;具体代码如下&#xff1a; //判断有无表 if (sqliteConn.State ConnectionState.Closed) sqliteConn.Open(); SQLiteCommand mDbCmd sqliteConn.CreateCommand(); m…

精通Burpsuite:SQL注入测试的实验操作步骤详解

引言 在网络安全领域&#xff0c;SQL注入是一种常见的攻击手段&#xff0c;它允许攻击者通过注入恶意SQL代码来操纵后端数据库。Burpsuite作为一款领先的Web安全测试工具&#xff0c;提供了一系列的功能来帮助安全专家发现和防御这类漏洞。本文将详细介绍如何使用Burpsuite进行…

探数API统计分享-2017年-2021年中国各省人均消费支出统计

根据2017年至2021年的统计数据&#xff0c;我国各省&#xff08;市、区&#xff09;的人均消费支出情况各不相同。其中&#xff0c;上海的人均消费支出最高&#xff0c;达到了2021年的48879元&#xff0c;位居全国之首。紧随其后的是北京&#xff0c;人均消费支出为43640元。 …

类和对象(下篇)(未完结)!

文章目录 在谈构造函数1.构造函数体赋值2.初始化列表尽量使用初始化列表&#xff1f;初始化列表的初始化顺序&#xff1f;成员变量声明处的缺省值构造函数支持类型转换3.explicit关键字 static成员 在谈构造函数 1.构造函数体赋值 class Date{public:Date(int year, int mont…

其它高阶数据结构⑦_Skiplist跳表_概念+实现+对比

目录 1. Skiplist跳表的概念 2. Skiplist跳表的效率 3. Skiplist跳表的实现 3.1 力扣1206. 设计跳表 3.2 Skiplist的初始化和查找 3.3 Skiplist的增加和删除 3.4 Skiplist的源码和OJ测试 4. 跳表和平衡搜索树/哈希表的对比 本篇完。 1. Skiplist跳表的概念 skiplist是…

麻省理工出品!这个自动化神器让你的电脑自己工作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…