feat: 添加DQN强化学习项目框架和核心实现
实现完整的DQN算法框架,用于Atari Space Invaders游戏训练。包括: - QNetwork和DuelingQNetwork神经网络架构 - 经验回放缓冲区(标准和优先级版本) - DQN智能体实现ε-greedy策略和Double DQN - 环境包装器(灰度化、调整大小、帧堆叠等) - 训练器、评估脚本和图表生成工具 - 详细的项目文档和依赖配置
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user