使用广度优先搜索算法找到最短路径,然后绘制路径图

news2025/1/12 15:53:35

使用广度优先搜索算法找到最短路径,然后绘制路径图

from collections import deque
import matplotlib.pyplot as plt

# 定义网格环境的参数
GRID_SIZE = 5
GRID_WIDTH = 4
AGENT_SPEED = 2
START_STATE = (0, 0)
GOAL_STATE = (GRID_SIZE - 1, GRID_SIZE - 1)

# 定义动作集合:上、下、左、右
ACTIONS = ['UP', 'DOWN', 'LEFT', 'RIGHT']
NUM_ACTIONS = len(ACTIONS)

# 定义参数
EPSILON = 0.1  # 探索率

# 定义动作对应的坐标增量
ACTION_DELTA = {
    'UP': (-AGENT_SPEED, 0),
    'DOWN': (AGENT_SPEED, 0),
    'LEFT': (0, -AGENT_SPEED),
    'RIGHT': (0, AGENT_SPEED)
}

# 执行广度优先搜索(BFS)算法找到最短路径
def bfs():
    queue = deque([(START_STATE, [])])
    visited = set()
    
    while queue:
        current_state, path = queue.popleft()
        if current_state == GOAL_STATE:
            return path
        visited.add(current_state)
        for action in ACTIONS:
            next_state = take_action(current_state, action)
            if next_state not in visited and is_valid_state(next_state):
                queue.append((next_state, path + [action]))

# 检查状态是否有效(在网格范围内)
def is_valid_state(state):
    x, y = state
    return 0 <= x < GRID_SIZE and 0 <= y < GRID_SIZE

# 执行动作
def take_action(state, action):
    dx, dy = ACTION_DELTA[action]
    x, y = state
    next_state = (x + dx, y + dy)
    return next_state

# 绘制路径图
def plot_path(path):
    x_coords = [START_STATE[0]]  # 起点 x 坐标
    y_coords = [START_STATE[1]]  # 起点 y 坐标
    z_coords = [0]  # 时间轴

    for action in path:
        dx, dy = ACTION_DELTA[action]
        x_coords.append(x_coords[-1] + dx)
        y_coords.append(y_coords[-1] + dy)
        z_coords.append(len(z_coords))

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.plot(x_coords, y_coords, z_coords)
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Time Step')
    plt.title('Shortest Path of the Agent')
    plt.show()

# 执行广度优先搜索找到最短路径
shortest_path = bfs()

# 输出最短路径
print("Shortest Path:", shortest_path)

# 绘制最短路径的三维图形
plot_path(shortest_path)

寻优路线图!
在这里插入图片描述

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

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

相关文章

Excel小技巧 (4) - Sumif用法

学期末&#xff0c;根据以下表格如果要汇总学生的三门主课分数&#xff0c;如何能快速的汇总呢&#xff1f; sumif就是一个很好用的函数 SUMIF&#xff08;指定汇总的key范围&#xff0c;汇总值&#xff0c;合计范围&#xff09;

记录windiwos系统安装homestead环境的一次报错

相关软件版本 VirtualBox 7.0.14Vagrant 2.3.8 报错信息如下 Bringing machine homestead up with virtualbox provider... > homestead: Box lc/homestead could not be found. Attempting to find and install...homestead: Box Provider: virtualboxhomestead: Box Ve…

从电影《沙丘》说起——对人工智能的思考

从《沙丘》开始说起 之前看《沙丘》电影&#xff0c;里面有一类角色叫门泰特&#xff0c;这类人大脑可以飞快地运算&#xff0c;在电影设定里是替换人工智能、机器运算的存在。男主保罗也是这类型的人&#xff0c;但他可能基因更强大&#xff0c;吸食了香料后&#xff0c;他的…

力扣题目训练(22)

2024年2月15日力扣题目训练 2024年2月15日力扣题目训练563. 二叉树的坡度637. 二叉树的层平均值643. 子数组最大平均数 I304. 二维区域和检索 - 矩阵不可变154. 寻找旋转排序数组中的最小值 II 2024年2月15日力扣题目训练 2024年2月15日第二十二天编程训练&#xff0c;今天主要…

Qt for Mac阻止MacOS系统休眠

Qt开发的应用程序如果电脑休眠了会影响软件的使用&#xff0c;因此在软件的使用过程中需要防止电脑休眠&#xff0c;在Win上有专门的API进行处理&#xff0c;在Mac上也必需使用Mac平台自身的API&#xff0c;本篇介绍在Mac平台下使用Qt阻止Mac系统休眠。 要调用Mac系统的API&am…

【开发】Spring整合MyBatis、MyBatisPlus

目录 前言 Spring整合MyBatis 1. 在项目中的pom.xml中导入MyBatis和Spring相关的依赖&#xff1a; 2. 配置数据源 3. 编写实体类 4. 编写API接口 5. 编写单元测试方法&#xff08;业务&#xff09; Spring整合MyBatis-Plus 1. 在项目中导入依赖&#xff1a; 2. 配置数…

Java Virtual Machine

JVM 1、初始 JVM 简单描述一下 JVM &#xff1a;JVM 本质是一个运行在计算机上的程序&#xff0c;它的职责是运行字节码文件。 JVM 的三大功能&#xff1a; 解释和运行&#xff1a;对字节码文件中的指令&#xff0c;实时的解释成机器码&#xff0c;让计算机执行内存管理&am…

webpack5零基础入门-10babel的使用

Babel JavaScript 编译器。 主要用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法&#xff0c;以便能够运行在当前和旧版本的浏览器或其他环境中 1.安装相关包 npm install -D babel-loader babel/core babel/preset-env 2.进行相关配置 2.1第一种写法是在webp…

【C语言入门】浮点型数据在内存中的存储

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C语言 个人主页&#xff1a;Celias blog~ 目录 ​编辑 引言 引例 一、浮点型在内存中的存储方式 1.1 …

Employing Multi-Estimations for Weakly-Supervised Semantic Segmentation

eighted selective training (WST) 辅助信息 作者未提供代码

Vue+SpringBoot打造婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

解决分布式事务,Seata真香!

年IT寒冬&#xff0c;大厂都裁员或者准备裁员&#xff0c;作为开猿节流主要目标之一&#xff0c;我们更应该时刻保持竞争力。为了抱团取暖&#xff0c;林老师开通了《知识星球》&#xff0c;并邀请我阿里、快手、腾讯等的朋友加入&#xff0c;分享八股文、项目经验、管理经验等…

模型、算法、数据模型、模型结构是什么?它们之间有什么关联和区别?

模型、算法、数据模型、模型结构是什么&#xff1f;它们之间有什么关联和区别&#xff1f; 导读一、算法1、算法定义2、机器学习算法定义 二、模型1、模型定义2、数据模型定义3、机器学习模型定义 三、模型结构1、线性模型2、基于实例的模型3、决策树模型4、支持向量机5、集成方…

WebRTC:真正了解 RTP 和 RTCP

介绍 近年来&#xff0c;通过互联网进行实时通信变得越来越流行&#xff0c;而 WebRTC 已成为通过网络实现实时通信的领先技术之一。WebRTC 使用多种协议&#xff0c;包括实时传输协议 (RTP) 和实时控制协议 (RTCP)。 RTP负责通过网络传输音频和视频数据&#xff0c;而RTCP负责…

网络原理(2)——TCP协议

目录 一、TCP协议段格式 二、确认应答 三、超时重传 TCP全称为&#xff1a;"传输控制协议 Transmission Control Protocol)"。协议如其名&#xff0c;要对数据的传输进行一个详细的控制。 一、TCP协议段格式 源 / 目的端口号&#xff1a;表示数据从哪个进程来&am…

稀碎从零算法笔记Day20-LeetCode:回文链表

题型&#xff1a;链表、双指针 链接&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 234. 回文链表 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述&#xff08;红字为笔者添加&#xff09; 给你一个单链表的头节点 head &…

.rmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 近年来&#xff0c;勒索病毒的威胁日益增加&#xff0c;其中一种名为.rmallox的勒索病毒备受关注。这种病毒通过加密文件并勒索赎金来威胁受害者。本文将介绍.rmallox勒索病毒的特点&#xff0c;以及如何恢复被其加密的数据文件&#xff0c;并提供预防措施&a…

三、传输层拥塞控制、差错控制

3.1 概述和传输层服务 传输服务和协议&#xff1a; 为运行在不同主机上的应用进程提供逻辑通信&#xff1b; 传输协议运行在端系统-发送方:将应用层的报文分成报文段&#xff0c;然后传递给网络层&#xff1b;接收方&#xff1a;将报文段重组成报文&#xff0c;然后传递给应用…

【C#图解教程】笔记

文章目录 1. C#和.NET框架.NET框架的组成.NET框架的特点CLRCLICLI的重要组成部分各种缩写 2. C#编程概括标识符命名规则&#xff1a; 多重标记和值格式化数字字符串对齐说明符格式字段标准数字格式说明符标准数字格式说明符 表 3. 类型、存储和变量数据成员和函数成员预定义类型…

【图论】计算图的n-hop邻居个数,并绘制频率分布直方图

计算图的n-hop邻居个数&#xff0c;并绘制频率分布直方图 在图论中&#xff0c;n-hop邻居&#xff08;或称为K-hop邻居&#xff09;是指从某个顶点出发&#xff0c;通过最短路径&#xff08;即最少的边数&#xff09;可以到达的所有顶点的集合&#xff0c;其中n&#xff08;或…