强化学习系列案例 | 训练智能体玩Flappy Bird游戏

2020-04-24 18:09:10 浏览数 (1)

Flappy Bird是一款简单操作的手机游戏,在游戏中有一只飞翔的小鸟,在飞行中会遇到管道障碍物,玩家需要操控小鸟往上飞,飞行过程中不能坠地也不能触碰障碍物,不断的实行动作会飞的越来越高;如果不采取飞行动作,则会快速下降。因此玩家要使用合适的策略控制小鸟飞行,使小鸟不会坠地同时能顺利地穿越障碍物。本案例使用强化学习算法DQN训练智能体,使其最终学会玩Flappy Bird游戏。

目录

  1. Flappy Bird介绍
  2. 将Flappy Bird转化为MDP问题
  3. DQN算法简介   3.1 值函数近似   3.2 DQN核心思想   3.3 DQN算法伪代码
  4. 训练DQN玩Flappy Bird游戏   4.1 导入需要的库   4.2 设置加载函数   4.3 定义获取图片边界函数   4.4 设置常量   4.5 设置随机生成新管道函数   4.6 定义判定碰撞状态函数   4.7 检查像素点是否有碰撞(重合)   4.8 定义游戏状态   4.9 设置训练网络中需要的参数以及经验池的大小   4.10 定义训练过程   4.11 主函数
  5. 总结
  6. 需要的资源

1.Flappy Bird介绍

Flappy Bird是一款火热一时的手机游戏,游戏中玩家需要操控一只小鸟飞行,使小鸟跨越管道所组成的障碍,执行Flappy会使小鸟飞得越来越高,不进行任何动作,则会快速下降。游戏的目标是使小鸟顺利地通过管道,不触碰管道或地面。

2.将Flappy Bird转化为MDP问题

通过定义四元组即可将上述问题转化为MDP问题,MDP四元组包括:状态空间S,动作空间A,奖励R以及转移关系P。在Flappy Bird中四元组的具体含义如下:

(1)状态空间:

80×80×4的RGB图像,因为状态空间过大,用Q表决策会占用大量空间,因此需要采用值函数近似法。

(2)动作空间:

小鸟可执行的动作有两个,即向上飞或不操作,因此可定义动作空间为2维,[1,0]表示不进行向上飞动作,小鸟自由下坠;[0,1]表示小鸟向上运动。

(3)奖励:

奖励分为三种:

第一种是通过一对管道,奖励为1; 第二种是碰到管道或落地,此时奖励为-1; 第三种是在通过管道之前的飞行,此时每帧奖励为0.1。

3. DQN算法简介

3.1 值函数近似

在普通的Q-learning算法中,状态和动作空间是离散且维数不高,此时可使用Q表储存每个状态-动作对的Q值。然而当状态和动作空间是高维且连续时,状态或动作数量很大,使用Q表会占用大量的内存与计算空间,这样效率非常低甚至会出现计算力不够的情况。因此我们可以通过函数

0 人点赞