Udacity DRL DQN project

  1. 使用namedtuple创建 (s, a, s', r)的存储,可以根据名称作为索引。
    (命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。)

    然后在使用batch_SGD训练的时候,可以依次按照名称进行打包,返回batch。(当然在这里用索引也是可以的,但代码可读性稍差)

  2. 创建replay buffer用deque

    • 线程安全:可以同时从deque集合的左边和右边进行操作而不会有影响。

    • 自动pop out满溢数据:当buffer容量满时,再添加新数据,可以自动pop out列表中最后的数据。

      deque文档

  3. 在backpropagation时,由target net得到的Q值需要固定,不用求导,因此该网络计算出来的tensor可以detach,减少下面使用loss.backward()的memory消耗并且提高运算速度。

  4. 用tensor.gather提取batch中每个state对应的Max Q。
    gather函数提取输入action的Q值,1表示按列操作,因为输入的states是列,所以网络输出的是一个Q table的矩阵形式,因此需要提取每一列的对应的action值(action是index)。

  5. 选择action与环境互动时,由于只是为了用网络得到一个action,不用求导,可以关掉网络的求导功能,加快运算

猜你喜欢

转载自www.cnblogs.com/bourne_lin/p/Udacity-DRL-DQN-project.html
drl
DQN