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

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

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)

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

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
迪杰斯塔拉算法最短路径在MATLAB中可以通过以下步骤实现: 首先,你需要创建一个形对象,该对象表示你的网格场景。你可以使用MATLAB中的`graph`函数来创建这个对象。在创建形对象时,你可以指定节点之间的距离。 然后,你需要定义源点`a`和目标点`b`,以及节点之间的距离矩阵。这个距离矩阵描述了节点之间的连接关系和距离。 接下来,你可以使用MATLAB中的`shortestpath`函数来计算从源点到目标点的最短路径。这个函数将返回最短路径的节点索引。 最后,你可以使用这些节点索引来可视化最短路径。你可以使用MATLAB中的绘函数来绘制节点和边,并在中突出显示最短路径。 你可以参考引用中的MATLAB Guide界面编程来实现上述步骤。同时,你也可以使用引用中提供的MATLAB程序下载来了解更多关于迪杰斯塔拉算法的实现细节。 需要注意的是,在栅格场景下,迪杰斯塔拉算法的运行效率可能不高,因为每个节点之间的距离是固定的。引用中提到了使用迪杰斯塔拉算法的贪心策略在这种情况下基本无效,因为它等效于广度优先搜索算法。你可以考虑使用其他更适合栅格场景的最短路径算法,比如A*算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [基于MATLAB的最短路径 贝尔曼-福特 Bellman-Ford算法](https://blog.csdn.net/BaiLuQingFeng/article/details/104654322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [机器人路径规划之迪杰斯特拉算法(二)](https://blog.csdn.net/su_fei_ma_su/article/details/117535802)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喝凉白开都长肉的大胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值