这是一个简单的强化学习入门项目,基于Pytorch框架实现了DQN和PPO的2048游戏项目。本项目的游戏本体来源于项目 https://github.com/evenboos/2048-rainbowDQN.git
- 克隆项目到本地:
git clone https://github.com/He-JiYe/RL_2048
cd RL_2048- 安装依赖:
pip install torch numpy tkinter matplotlib - 训练模式:
python main.py --mode train --agent dqn --episodes 2000
python main.py --mode train --agent ppo --episodes 2000- AI游玩模式:
python main.py --mode play --agent dqn
python main.py --mode play --agent ppo- 人类游玩模式:
python main.py --mode human- 查看指令帮助:
python main.py --help
"""
usage: main.py [-h] --mode {train,play,human} [--agent {dqn,ppo}] [--epochs EPOCHS] [--episodes EPISODES]
2048游戏AI代理训练和游玩
options:
-h, --help show this help message and exit
--mode {train,play,human}
选择模式: train(训练), play(游玩), human(人类游玩)
--agent {dqn,ppo} 选择AI代理: dqn 或 ppo (仅在train和play模式需要)
--epochs EPOCHS 训练轮数 (仅在train模式需要)
--episodes EPISODES 每轮训练次数 (仅在train模式需要)
"""main.py: 主程序入口,处理命令行参数和游戏模式选择game.py: 2048游戏核心逻辑visualization.py: 游戏界面和训练过程可视化constants.py: 常量定义logic.py: 游戏逻辑辅助函数puzzle.py: 人类玩家界面实现rainbow_DQN.py: rainbow_DQN代理实现PPO.py: PPO代理实现utils.py: DQN和PPO所需要的神经网络和相关函数部分
Rainbow DQN: 在普通DQN的基础上实现了:
- 优先级经验回放
- Double DQN
- Dueling DQN
- Distribution DQN
- n-step trace
- Noisy Net 并且采用CNN进行特征提取,效果比MLP更好。
PPO: 使用masked PPO,重要性采样时记得考虑mask后的动作分布,开始因为忽略了这点导致调了很久。不过PPO的策略会快速收敛,最后表现类似于一种贪心的墙角策略。
奖励设置:
- 对状态作对数化预处理
- 当前最大数字奖励(奖励随着局面难度增加而增加)
- 空格奖励
- 平滑性奖励
- 最大值角落奖励
- 合并奖励
欢迎大家使用这份代码进行实验和改进,奖励函数在文件game.py中, 网络结构在utils.py中。