PyTorch迷宫探索系统 🗺️ 强化学习与传统算法的完美融合

Dueling Double DQN Q-Learning A* / BFS / DFS PyTorch

一个完整的迷宫探索系统,集成深度强化学习(DQN)、经典Q-learning和传统路径规划算法,提供可视化界面和超参数调优功能。

100%
DQN最终成功率
153
最优路径步数
45
理论最短路径
101
收敛轮次

📖 系统概述

PyTorch迷宫探索系统 是一个基于深度强化学习的智能体训练平台,让AI学会在迷宫中自主导航并找到最短路径。系统实现了多种算法,包括Dueling Double DQN、Q-Learning、A*、BFS和DFS,并提供完整的可视化界面和超参数调优功能。

🎯 设计目标

训练AI智能体在复杂迷宫中找到从起点到终点的最优路径,同时比较强化学习与传统算法的性能差异。

🧠 核心能力

Dueling Double DQN、优先经验回放、势能奖励设计、多算法对比、实时可视化。

📊 应用场景

强化学习研究、路径规划教学、算法对比实验、智能体训练平台。

🏗️ 系统架构

🤖 算法详解

🧠 DQN

深度强化学习

Dueling Double DQN

📊 Q-Learning

表格强化学习

ε-greedy探索

🎯 A*

启发式搜索

曼哈顿距离

算法性能对比

算法类型路径长度训练时间泛化能力
DQN (Dueling Double)深度强化学习153步101轮⭐⭐⭐⭐
Q-Learning表格强化学习~200步300轮⭐⭐⭐
A*启发式搜索45步(最优)即时⭐⭐⭐⭐⭐
BFS盲目搜索45步(最优)即时⭐⭐⭐⭐⭐

⚡ 快速开始

环境要求

Python 3.8+
PyTorch 1.10+
PyQt5 5.15+
NumPy 1.21+
Matplotlib 3.5+

安装与运行

# 克隆仓库
git clone https://github.com/example/maze-exploration.git
cd maze-exploration

# 安装依赖
pip install -r requirements.txt

# 运行系统
python main.py

# 访问图形界面

基本使用示例

from core import MazeEnvironment, DQNAgent, QLearningAgent
from core import AStarAgent, BFSAgent, DFSAgent

# 创建迷宫环境
env = MazeEnvironment(width=30, height=20, maze_type="PRIM")

# 创建DQN智能体
dqn_agent = DQNAgent(env, learning_rate=0.0005, batch_size=128)

# 训练智能体
dqn_agent.train(episodes=500)

# 获取最优路径
optimal_path = dqn_agent.get_optimal_path()
print(f"路径长度: {len(optimal_path)}")

🧠 DQN深度强化学习

DQNAgent 实现了Dueling Double DQN架构,结合优先经验回放和软更新机制。

网络架构

class DuelingDQNNetwork(nn.Module):
    def __init__(self, input_size=2, hidden_size=256, output_size=4):
        # 共享特征层
        self.fc1 = nn.Linear(2, 256)
        self.fc2 = nn.Linear(256, 256)
        self.fc3 = nn.Linear(256, 128)
        
        # 价值流 V(s)
        self.value = nn.Linear(128, 1)
        
        # 优势流 A(s,a)
        self.advantage = nn.Linear(128, 4)
    
    def forward(self, x):
        # Q(s,a) = V(s) + (A(s,a) - mean(A(s,a)))
        value = self.value(features)
        advantage = self.advantage(features)
        return value + (advantage - advantage.mean(dim=1, keepdim=True))

核心算法特性

超参数配置

参数说明
学习率0.0005Adam优化器学习率
折扣因子γ0.99未来奖励折扣率
批大小128每次训练采样数
探索率衰减轮数200ε从1衰减到0.05
目标网络更新频率500步软更新间隔
软更新系数τ0.01目标网络更新速度

🎁 奖励函数设计

精心设计的势能奖励函数是DQN成功的关键:

奖励公式

def step(state, action):
    # 距离变化奖励
    if new_dist < old_dist:
        distance_reward = 5.0 * (old_dist - new_dist)  # 靠近: +5/步
    elif new_dist > old_dist:
        distance_reward = -3.0 * (new_dist - old_dist)  # 远离: -3/步
    
    # 探索新格子奖励
    exploration_reward = 0.5 if new_pos not in visited else 0
    
    # 步数小惩罚
    step_penalty = -0.1
    
    # 终点附近额外奖励 (距离≤5)
    endpoint_bonus = (6 - new_dist) * 2 if new_dist ≤ 5 else 0
    
    reward = distance_reward + exploration_reward + step_penalty + endpoint_bonus
    reward = max(-3, min(10, reward))  # 限制范围
💡 设计要点:靠近终点的奖励远大于步数惩罚,确保智能体有强烈的正向激励向终点移动。

🏰 迷宫生成算法

支持多种经典迷宫生成算法:

Prim算法

1. 随机选择一个起始单元格
2. 将该单元格的相邻墙加入列表
3. 随机选择一面墙
4. 如果墙对面的单元格未被访问:
   - 打通墙
   - 将该单元格的相邻墙加入列表
5. 重复直到所有单元格都被访问

递归分割算法

1. 在矩形区域内随机选择水平和垂直分割线
2. 在分割线上随机开三个孔洞
3. 递归处理四个子区域

DFS深度优先生成

1. 从起点开始深度优先遍历
2. 随机选择未访问的邻居
3. 打通墙壁,递归访问
4. 回溯直到所有单元格被访问

🖥️ 可视化界面

基于PyQt5的完整图形界面:

功能模块

颜色编码

颜色含义
墙壁
可通行路径
起点
终点
DQN路径
Q-Learning路径
A*路径

⚙️ 超参数调优指南

DQN关键参数

参数推荐范围调优建议
学习率0.0001-0.001过高导致震荡,过低收敛慢
批大小32-256越大梯度估计越稳定
探索率衰减轮数100-500迷宫复杂时增加衰减轮数
折扣因子γ0.95-0.99越大越注重长期收益
软更新系数τ0.001-0.01越小更新越平滑
⚠️ 调优经验:成功率低时增加探索率衰减轮数;训练不稳定时降低学习率;路径过长时增加距离奖励系数。

📈 实验结果

DQN训练过程

第36轮: 首次成功 (355步)
第46-47轮: 连续成功
第62-82轮: 成功频率显著增加
第82轮: 最佳路径 154步, 奖励 +283.2
第90-101轮: 几乎每轮成功
第101轮: 提前终止 (最近17轮成功率100%)

性能对比

算法最优路径长度平均训练轮次成功率
DQN (最终)153步101轮100%
Q-Learning~200步300轮85%
A*45步-100%
BFS45步-100%
🎉 成功案例:DQN在101轮训练后达到100%成功率,最佳路径长度153步(理论最优45步),证明深度强化学习能有效学习迷宫导航策略。

📚 API参考

MazeEnvironment

class MazeEnvironment:
    def __init__(width, height, maze_type, obstacle_density)
    def reset() -> tuple  # 返回起点坐标
    def step(state, action) -> (next_state, reward, done)
    def set_reward_params(goal_reward, wall_penalty, step_penalty)

DQNAgent

class DQNAgent(BaseAgent):
    def __init__(env, **kwargs)
    def choose_action(state) -> int
    def train_step(state, action, reward, next_state, done)
    def train(episodes, progress_callback)
    def get_optimal_path() -> list
    def save_model(path)
    def load_model(path)

BaseAgent

class BaseAgent(ABC):
    @abstractmethod
    def choose_action(self, state) -> int
    
    @abstractmethod
    def train_step(self, state, action, reward, next_state, done)
    
    @abstractmethod
    def get_optimal_path(self) -> list
    
    def train(self, episodes=500, progress_callback=None)

⚖️ 许可证

MIT License

Copyright (c) 2025 PyTorch迷宫探索系统 Contributors

特此免费授予任何获得本软件及相关文档文件副本的人无限制使用本软件的权利,包括但不限于使用、复制、修改、合并、出版、分发、再许可和/或销售本软件副本的权利。

本软件按"原样"提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。

🗺️ PyTorch迷宫探索系统 · 深度强化学习与路径规划算法融合平台

从DQN到A* — 探索智能体学习迷宫导航的奥秘