一般DQN中的经验池类,都类似于下面这段代码。

import random
from collections import namedtuple, deque Transition = namedtuple('Transition', ('state', 'next_state', 'action', 'reward')) # 经验池类
class ReplayMemory(object): def __init__(self, capacity):
self.capacity = capacity # 容量
self.memory = []
self.position = 0 # 将四元组压入经验池
def push(self, *args):
if len(self.memory) < self.capacity:
self.memory.append(None)
self.memory[self.position] = Transition(*args)
self.position = (self.position + 1) % self.capacity # 从经验池中随机压出一个四元组
def sample(self, batch_size):
transitions = random.sample(self.memory, batch_size)
batch = Transition(*zip(*transitions))
return batch def __len__(self):
return len(self.memory)

对Python不太熟悉的我里边就有两点比较迷惑,一个是namedtuple()方法,一个是sample方法的倒数第二行,为什么要这样处理。

第一点,namedtuple()是继承自tuple的子类,namedtuple()方法能够创建一个和tuple类似的对象,而且对象拥有可访问的属性。

第二点,也就是sample方法中的倒数第二行,这里进行了一个转换, 将batch_size个四元组,转换成,四个元祖,每个元祖一共有batch_size项,这里放个程序解释一下。

import random
from collections import namedtuple if __name__ == '__main__': batch_size = 3
Transition = namedtuple('Transition', ('state', 'next_state', 'action', 'reward')) a=Transition(state=1,next_state=2,action=3,reward=4)
b=Transition(state=11,next_state=12,action=13,reward=14)
c=Transition(state=21,next_state=22,action=23,reward=24)
d=Transition(state=31,next_state=32,action=33,reward=34)
e=Transition(state=41,next_state=42,action=43,reward=44) f=[a,b,c,d,e] # 从f中随机抽取batch_size个数据
t=random.sample(f,batch_size) print("随机抽取的batch_size个四元祖是:")
for i in range(batch_size):
print(t[i])
print() # 将t进行解压操作
print("将四元组进行解压后是:")
print(*zip(*t))
print() # 将t进行解压操作,再进行Transition转换
# 将batch_size个四元组,转换成,四个元组,每个元组一共有batch_size项
print("将四元组进行解压后再进行Transition转换后是:")
batch=Transition(*zip(*t))
print(batch)

输出结果:

随机抽取的batch_size个四元祖是:
Transition(state=21, next_state=22, action=23, reward=24)
Transition(state=11, next_state=12, action=13, reward=14)
Transition(state=41, next_state=42, action=43, reward=44) 将四元组进行解压后是:
(21, 11, 41) (22, 12, 42) (23, 13, 43) (24, 14, 44) 将四元组进行解压后再进行Transition转换后是:
Transition(state=(21, 11, 41), next_state=(22, 12, 42), action=(23, 13, 43), reward=(24, 14, 44))

Reinforcement Learning (DQN) 中经验池详细解释的更多相关文章

  1. Android中时间戳的详细解释

    Android中时间戳的详细解释: (1).定义: 时间戳就是根据当前系统时间生成的一组随机数字. (2).作用: 作为对数据唯一性的一种判断依据.避免了重复修改数据所带来的错误! (3).应用: ( ...

  2. glibc中malloc的详细解释_转

    glibc中的malloc实现: The main properties of the algorithms are:* For large (>= 512 bytes) requests, i ...

  3. IOS 中得runloop 详细解释

    1.Runloop基础知识- 1.1 字面意思 a 运行循环 b 跑圈 - 1.2 基本作用(作用重大) a 保持程序的持续运行(ios程序为什么能一直活着不会死) b 处理app中的各种事件(比如触 ...

  4. 机器学习之强化学习概览(Machine Learning for Humans: Reinforcement Learning)

    声明:本文翻译自Vishal Maini在Medium平台上发布的<Machine Learning for Humans>的教程的<Part 5: Reinforcement Le ...

  5. Action的三种实现方式,struts.xml配置的详细解释及其简单执行过程(二)

    勿以恶小而为之,勿以善小而不为--------------------------刘备 劝诸君,多行善事积福报,莫作恶 上一章简单介绍了Struts2的'两个蝴蝶飞,你好' (一),如果没有看过,请观 ...

  6. 强化学习中的经验回放(The Experience Replay in Reinforcement Learning)

    一.Play it again: reactivation of waking experience and memory(Trends in Neurosciences 2010) SWR发放模式不 ...

  7. 强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!

    1. 什么是强化学习 其他许多机器学习算法中学习器都是学得怎样做,而强化学习(Reinforcement Learning, RL)是在尝试的过程中学习到在特定的情境下选择哪种行动可以得到最大的回报. ...

  8. Deep Reinforcement Learning 基础知识(DQN方面)

    Introduction 深度增强学习Deep Reinforcement Learning是将深度学习与增强学习结合起来从而实现从Perception感知到Action动作的端对端学习的一种全新的算 ...

  9. [DQN] What is Deep Reinforcement Learning

    已经成为DL中专门的一派,高大上的样子 Intro: MIT 6.S191 Lecture 6: Deep Reinforcement Learning Course: CS 294: Deep Re ...

  10. 0927-转载:SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释

    这篇文章暂时只对框架中所要用到的配置文件进行解释说明,而且是针对注解形式的,框架运转的具体流程过两天再进行总结. spring+springmvc+mybatis框架中用到了三个XML配置文件:web ...

随机推荐

  1. 闭关修炼180天----手写迷你版的tomcat-Minicat

    手写迷你版的tomcat-Minicat 小谈Tomcat Tomcat请求处理⼤致过程 Tomcat是⼀个Http服务器(能够接收并且处理http请求,所以tomcat是⼀个http服务器) 我们使 ...

  2. Mysql数据库未添加索引引发的生产事故

    最近开发的新功能主要是首页的红点提示功能,某个用户登录系统app,然后进入某一个功能模块, 在该功能下面有很多地方可以操作,新功能就是根据用户信息查询当月是否存在新的数据.总共有四五 个地方如果出现增 ...

  3. CSS Navigation - vscode 插件 - vue css 跳转

    CSS Navigation - vscode 插件 - vue css 跳转

  4. github git clone下载加速 && npm install 下载加速

    git clone https://pd.zwc365.com/seturl/< https 开头的项目地址> npm install --registry=https://registr ...

  5. 基于Python的子进程获取键盘输入

    一 概念 众所周知,python中的获取键盘输入,input函数是没办法用在子程序的,这就限制了它的用途.想要在子程序中获取键盘输入.唯有 fn=sys.stdin.fileno函数了. 二 实例解析 ...

  6. 云VR:虚拟现实专业化的下一步

    传统的VR通常需要功能强大的计算机和其他高性能设备来提供良好的用户体验.但是,如果有一种方法可以从任何设备和任何地方处理VR内容呢?这就是云VR对VR用户的承诺.随着5G和其他网络的到来,VR技术的未 ...

  7. 自己动手做一个批量doc转换为docx文件的小工具

    前言 最近遇到了一个需求,就是要把大量的doc格式文件转换为docx文件,因此就动手做了一个批量转换的小工具. 背景 doc文件是什么? "doc" 文件是一种常见的文件格式,通常 ...

  8. 记录--居中为什么要使用 transform?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 引言 居中是我们在前端布局中经常会遇到的问题,其中包括水平居中和垂直居中.居中的方法很多,比如说水平居中可以使用text-align: c ...

  9. ZYNQ学习系列之GPIO

    ZYNQ学习系列之GPIO 一.GPIO含义 general purpose IO ,通用目标的IO.所谓通用,就是采用常用的电压标准和电流标准的控制器IO接口,可以初步理解为开发板上的IO口.这种接 ...

  10. DynamicHead:基于像素级路由机制的动态FPN | NIPS 2020

    论文提出了细粒度动态detection head,能够基于路由机制动态地融合不同FPN层的像素级局部特征进行更好的特征表达.从设计的路由空间来看是一个十分耗时的操作,但是作者设计的高效路由器实际计算十 ...