feat: 添加DQN强化学习项目框架和核心实现

实现完整的DQN算法框架,用于Atari Space Invaders游戏训练。包括:
- QNetwork和DuelingQNetwork神经网络架构
- 经验回放缓冲区(标准和优先级版本)
- DQN智能体实现ε-greedy策略和Double DQN
- 环境包装器(灰度化、调整大小、帧堆叠等)
- 训练器、评估脚本和图表生成工具
- 详细的项目文档和依赖配置
This commit is contained in:
2026-05-01 10:01:12 +08:00
parent cdec40a7c7
commit e8b51240f9
13 changed files with 1561 additions and 84 deletions
@@ -0,0 +1,119 @@
# DQN for Space Invaders
从零实现的DQNDeep Q-Network)算法,用于Atari Space Invaders游戏。不使用Stable-Baselines等强化学习库。
## 项目特点
- **算法**: DQN / Double DQN / Dueling DQN
- **游戏**: Space Invaders (ALE/SpaceInvaders-v5)
- **框架**: PyTorch
- **环境**: Gymnasium + ALE
## 项目结构
```
├── src/
│ ├── __init__.py
│ ├── network.py # Q-Network架构(标准DQN和Dueling DQN
│ ├── replay_buffer.py # 经验回放缓冲区(标准和优先级)
│ ├── agent.py # DQN智能体
│ ├── trainer.py # 训练器
│ ├── utils.py # 环境包装器和工具函数
│ └── evaluate.py # 评估脚本
├── train.py # 主训练脚本
├── generate_plots.py # 图表生成脚本
├── requirements.txt # 依赖列表
└── README.md # 项目说明
```
## 环境配置
```bash
# 创建虚拟环境
conda activate my_env
# 安装依赖
pip install -r requirements.txt
# 安装Atari ROM
AutoROM --accept-license
```
## 训练
```bash
# 标准DQN训练
python train.py --steps 2000000
# 使用Double DQN
python train.py --steps 2000000 --double-dqn
# 使用Dueling DQN
python train.py --steps 2000000 --dueling
# 自定义参数
python train.py \
--steps 2000000 \
--lr 1e-4 \
--gamma 0.99 \
--batch-size 32 \
--buffer-size 100000 \
--epsilon-decay 1000000 \
--target-update 1000
```
## 评估
```bash
# 评估训练好的模型
python src/evaluate.py --model models/dqn_best.pt --episodes 10
# 带渲染的评估
python src/evaluate.py --model models/dqn_best.pt --episodes 5 --render
```
## 生成图表
```bash
# 生成示例图表
python generate_plots.py --sample
# 从训练日志生成图表
python generate_plots.py --log-file logs/training_log.json
```
## 超参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| lr | 1e-4 | 学习率 |
| gamma | 0.99 | 折扣因子 |
| epsilon-start | 1.0 | ε初始值 |
| epsilon-end | 0.01 | ε最终值 |
| epsilon-decay | 1,000,000 | ε衰减步数 |
| buffer-size | 100,000 | 经验回放大小 |
| batch-size | 32 | 批次大小 |
| target-update | 1,000 | 目标网络更新频率 |
| double-dqn | True | 使用Double DQN |
| dueling | False | 使用Dueling DQN |
## 算法说明
### DQN (Deep Q-Network)
- 使用深度神经网络近似Q函数
- 经验回放打破数据相关性
- 目标网络稳定训练
### Double DQN
- 解决Q值过估计问题
- 用Q网络选择动作,用目标网络评估
### Dueling DQN
- 分离状态价值和优势函数
- 更好地学习状态价值
## 参考文献
1. Mnih, V., et al. (2015). Human-level control through deep reinforcement learning. Nature.
2. Van Hasselt, H., et al. (2016). Deep Reinforcement Learning with Double Q-learning. AAAI.
3. Wang, Z., et al. (2016). Dueling Network Architectures for Deep Reinforcement Learning. ICML.