首页 AI学术青年与开发者社区

用DQN玩Atari游戏——Flappy bird

状态空间连续的任务

通过深度Q学习神经网络使我们设计的agent能独自玩这个游戏

游戏的动作空间维度为2(跳与不跳)

Reward 设置条件为游戏是否终止(即玩家是否死亡)

目标是值函数近似的Q值最大化,值函数又神经网络l2-loss学习

import 随机数是作episode归类的

deque存储return memory,有容量,放满后老的去掉,放进新的元组

γ折扣因子,frame_per_action折扣因子

observe 经过交互才可以学习,前100次不进行学习,只进行放样本,探索一定次数后边探索边学习,

EPSILON固定

 

UPDATE_TIME Q网络和Qtarget网络,一个更新时
另一个先不更新,这是迭代次数更新的频率

 deque() #把他看成一个list 里面存放了S,A,R集合

如果收敛了,Epsilon设为1

Q网络

三层卷积,两层全连接

输入层设置为placeholder

第一个卷积 relu初始化参数,然后maxpool,max pooling 整个图片被不重叠的分割成若干个同样大小的小块(pooling size)。每个小块内只取最大的数字,再舍弃其他节点后,保持原有的平面结构得出 output。

 reshape 变成向量,摊平;然后全连接两次

输出 Q值和参数,return stateInput,QValue,W_conv1,b_conv1,W_conv2,b_conv2,W_conv3,b_conv3,W_fc1,b_fc1,W_fc2,b_fc2

训练设置

Q-action 选取要执行的

观察平均q值区域平缓则收敛,

adam优化器优化,把图存到log中,用来看曲线;若有checkpoint 加载,否则从头开始训练

训练:采样一个batch数据,分开状态动作 reward

计算y y_batch永远先计算下一个状态Q值,

如果终止是reward,否则是Q值最大的动作+reward

run 写到输入,

Q_value_avg, loss, loss_sum, Q_sum = self.session.run([self.avg_q, self.cost, self.loss_sum, \
                                        self.qvalue_summary], {self.stateInput : state_batch,\
                                        self.yInput : y_batch, self.actionInput : action_batch})

 

 主函数 预处理 preprocess

灰度化处理并变成我们想要的尺寸

然后开始gamestate,然后得到游戏环境和动作,setInitState 把observervation拼接起来,

setPerception 设置下一个perception

[展开全文]

授课教师

暂无教师
微信扫码分享课程