Skip to content

Yorkxzm/GluttonousSnake-RL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GluttonousSnake-RL

这是一个使用强化学习玩贪吃蛇的项目。 贪吃蛇环境基于pygame,实现参考了: https://www.cnblogs.com/dengfaheng/p/9241267.html
该环境允许游戏设置为变速模式:
当设置 speedchange=True时 随着时间的推移蛇的速度会逐渐增加。

本文共实现了两种强化学习算法。PPO(在线学习)与SAC(离线学习),并对比了他们的训练效果。

环境的状态参考了https://github.com/ZYunfeii/DRL4SnakeGame。
环境有一个状态参数state_dim
当设置为6时,state共有六维 1.蛇头与食物的相对x与y坐标(2维) 2.蛇头上下左右是否有边界(4维)
设置为10时会额外补充身体的四个状态。

这里仅采用6维状态就可以得到一个较好的模型。策略和价值网络仅由三层全连接网络组成,训练可以在最多4小时内完成。

最终训练结果:(见train.ipynb)
PPO在1000次迭代后就可以达到收敛,但是可能会出现若干过拟合阶段(在某些episode中reward骤降)。
SAC达到较好回报的速度更慢一些。但曲线整体走势稳定。

在充分训练后进行测试:
PPO
ppo
可以看到PPO的策略是求稳。在纵向移动时会来回摆动,而不是直接向着食物。而这一策略非常有益于后期生存。
在后期身体过长且速度加快时,通过来回的摆动可以有效避免撞到身体。除非身体长到来回摆动也无法缓解。

SAC
sac
而SAC的策略更为直接一些,它会直接奔着食物去,这样做的坏处就是很容易在吃食物时撞到自己的身体,甚至把自己包围,因此一般SAC的得分会低于PPO。
如果在状态中加入自己的身体信息应该能改善这一状况。

About

Play the Gluttonous Snake using RL implemented by pytorch

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors