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))
核心算法特性
- Dueling网络 — 分离价值函数和优势函数,提高Q值估计稳定性
- Double DQN — 用policy网络选择动作,target网络评估价值,减少过估计
- 优先经验回放 — 优先学习TD误差大的经验,成功经验采样概率+30%
- 软更新 — 目标网络缓慢更新,τ=0.01,提高稳定性
- 势能奖励 — 基于曼哈顿距离的启发式奖励设计
超参数配置
| 参数 | 值 | 说明 |
|---|---|---|
| 学习率 | 0.0005 | Adam优化器学习率 |
| 折扣因子γ | 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参数
- 模型管理 — 保存/加载训练好的模型
- 日志输出 — 实时显示训练进度和结果
颜色编码
| 颜色 | 含义 |
|---|---|
| ■ | 墙壁 |
| ■ | 可通行路径 |
| ■ | 起点 |
| ■ | 终点 |
| ■ | 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% |
| BFS | 45步 | - | 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* — 探索智能体学习迷宫导航的奥秘