# 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.