e8b51240f9
实现完整的DQN算法框架,用于Atari Space Invaders游戏训练。包括: - QNetwork和DuelingQNetwork神经网络架构 - 经验回放缓冲区(标准和优先级版本) - DQN智能体实现ε-greedy策略和Double DQN - 环境包装器(灰度化、调整大小、帧堆叠等) - 训练器、评估脚本和图表生成工具 - 详细的项目文档和依赖配置
119 lines
3.0 KiB
Markdown
119 lines
3.0 KiB
Markdown
# DQN for Space Invaders
|
||
|
||
从零实现的DQN(Deep 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. |