相关:

python中numpy.random.seed设置随机种子是否影响子进程

============================================

代码:

from ale_python_interface import ALEInterface
import numpy as np
np.random.seed(1111)
import cv2
import time filename = "atari_roms" + "/" + "pong" + ".bin" ale_int = ALEInterface()
ale_int.setInt(b"random_seed", 1111)
ale_int.setFloat(b"repeat_action_probability", 0.0)
ale_int.setInt(b"frame_skip", 1)
ale_int.setBool(b"color_averaging", False)
ale_int.loadROM(str.encode(filename))
num_actions = len(ale_int.getMinimalActionSet())
legal_actions = ale_int.getMinimalActionSet()
h, w = ale_int.getScreenDims()
gray_screen = np.zeros((h, w, 1), dtype=np.uint8) ale_int.reset_game() pre_screen = None
for i in range(30):
ale_int.act(legal_actions[0])
ale_int.getScreenGrayscale(gray_screen) for i in range(1000):
pre_screen = np.copy(gray_screen)
ale_int.act(legal_actions[np.random.randint(len(legal_actions))])
ale_int.getScreenGrayscale(gray_screen)
# cv2.imshow("Example Image", gray_screen)
# time.sleep(0.01) # print(gray_screen)
det = np.sum(pre_screen - gray_screen)
print(det, ale_int.game_over())

运行结果:

=============================

对比代码:

from multiprocessing import Process

from ale_python_interface import ALEInterface
import numpy as np
np.random.seed(1111)
# import cv2
# import time filename = "atari_roms" + "/" + "pong" + ".bin" ale_int = ALEInterface()
ale_int.setInt(b"random_seed", 1111)
ale_int.setFloat(b"repeat_action_probability", 0.0)
ale_int.setInt(b"frame_skip", 1)
ale_int.setBool(b"color_averaging", False)
ale_int.loadROM(str.encode(filename))
num_actions = len(ale_int.getMinimalActionSet())
legal_actions = ale_int.getMinimalActionSet()
h, w = ale_int.getScreenDims()
gray_screen = np.zeros((h, w, 1), dtype=np.uint8) ale_int.reset_game() class NN(Process):
def __init__(self, id, ale):
super(NN, self).__init__()
self.id = id
self.ale = ale
def run(self):
super(NN, self).run() ale_int = self.ale num_actions = len(ale_int.getMinimalActionSet())
legal_actions = ale_int.getMinimalActionSet()
h, w = ale_int.getScreenDims()
gray_screen = np.zeros((h, w, 1), dtype=np.uint8) pre_screen = None
for i in range(30):
ale_int.act(legal_actions[0])
ale_int.getScreenGrayscale(gray_screen) for i in range(1000):
pre_screen = np.copy(gray_screen)
ale_int.act(legal_actions[np.random.randint(len(legal_actions))])
ale_int.getScreenGrayscale(gray_screen)
# cv2.imshow("Example Image", gray_screen)
# time.sleep(0.01) # print(gray_screen)
det = np.sum(pre_screen - gray_screen)
print(det, ale_int.game_over()) ps = [NN(i, ale_int) for i in range(1)]
for p in ps:
p.start() for p in ps:
p.join()

运行结果:

PS:

可以看到,在python中子进程生成时会copy父进程中的对象,哪怕是atari游戏这种调用C语言扩展模块的对象也会被copy状态给子进程,这个和其他python中对象一样;这个特点和python中numpy.random.seed设置随机种子是否影响子进程相一致。

注意,上面代码中设置numpy和atari游戏的随机种子状态的代码为:

PS:

扩展一下,正因为python在生成子进程时会copy父进程状态这一特点,所以在生成子进程时我们需要在子进程中设置随机种子,并且在子进程中设置随机种子时要保证各个子进程被传入一个不同的数值;要注意在各个子进程中time.time()的数值也都是相同的,如果不能从父进程为各个子进程传入一个不同的数值,那么各个进程运行起来所使用的随机种子会是一致的,这样会影响最终的运算结果。给出具体例子:

要注意,在不同子进程生成过程中,这个参数 actor_id 的数值是不同的,以此来保证各个子进程会有不同的随机种子。

============================================

强化学习中子进程调用atari游戏是否受父进程中设置的随机种子影响的更多相关文章

  1. 基于Keras的OpenAI-gym强化学习的车杆/FlappyBird游戏

    强化学习 课程:Q-Learning强化学习(李宏毅).深度强化学习 强化学习是一种允许你创造能从环境中交互学习的AI Agent的机器学习算法,其通过试错来学习.如上图所示,大脑代表AI Agent ...

  2. ICML论文|阿尔法狗CTO讲座: AI如何用新型强化学习玩转围棋扑克游戏

    今年8月,Demis Hassabis等人工智能技术先驱们将来到雷锋网“人工智能与机器人创新大会”.在此,我们为大家分享David Silver的论文<不完美信息游戏中的深度强化学习自我对战&g ...

  3. Linux Guard Service - 守护进程的作用、用途、父进程标识的特点

    让test2直接成为守护进程 [root@localhost 02]# cat test2.c //test2 #include<stdio.h> #include<unistd.h ...

  4. PyQt学习随笔:Model/View开发时在view数据项中设置不同角色数据的方法

    在往Model中通过QStandardItem等类插入数据项时,除了实际插入的存储数据,还可以设置不同角色(请参考<PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及 ...

  5. 强化学习论文(Scalable agent alignment via reward modeling: a research direction)

     原文地址: https://arxiv.org/pdf/1811.07871.pdf ======================================================== ...

  6. [Reinforcement Learning] 强化学习介绍

    随着AlphaGo和AlphaZero的出现,强化学习相关算法在这几年引起了学术界和工业界的重视.最近也翻了很多强化学习的资料,有时间了还是得自己动脑筋整理一下. 强化学习定义 先借用维基百科上对强化 ...

  7. 用深度强化学习玩FlappyBird

    摘要:学习玩游戏一直是当今AI研究的热门话题之一.使用博弈论/搜索算法来解决这些问题需要特别地进行周密的特性定义,使得其扩展性不强.使用深度学习算法训练的卷积神经网络模型(CNN)自提出以来在图像处理 ...

  8. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

  9. 强化学习(十)Double DQN (DDQN)

    在强化学习(九)Deep Q-Learning进阶之Nature DQN中,我们讨论了Nature DQN的算法流程,它通过使用两个相同的神经网络,以解决数据样本和网络训练之前的相关性.但是还是有其他 ...

  10. 强化学习(九)Deep Q-Learning进阶之Nature DQN

    在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...

随机推荐

  1. 增补博客 第二十三篇 python 对比Python中的列表、元组、字典、集合、字符串等之间异同

    1. 列表(List): - 异同:列表是可变(Mutable)的有序容器,使用方括号 [] 定义,可以存储任意类型的元素.可以通过索引访问和修改列表中的元素.列表支持切片操作和列表推导式. - 相同 ...

  2. 随机二次元图片API第三弹

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 随机二次元图片API第三弹 日期:2020-3-10 阿珏 ...

  3. 博客正式更换为emlog

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 博客正式更换为emlog 日期:2017-4-2 阿珏 谈 ...

  4. azure 代码管理器网址

    visual studio 团队资源管理器 azure代码管理网页 记录一下 https://dev.azure.com

  5. Unity网络通信系统设计

    Unity网络通信系统设计 Buffer报文 BufferEntity类作为报文基类的作用包括: 封装数据:BufferEntity类可以用来封装网络通信中的数据,方便在网络传输中进行处理和管理. 提 ...

  6. mysql5.7msi安装

    本文介绍的是只安装MySQL数据库的过程,并不包含各种其他附加工具.安装完成之后通常使用Navicat或SQLyog进行可视化操作. 清华的镜像网站只保存最新的几个MySQL版本,所以直链可能已经失效 ...

  7. CodeFormer一款既能图像修复、还能视频增强去码的AI软件(下载介绍)

    CodeFormer是一款强大的人工智能工具,主要用于图像和视频的修复和增强.它基于深度学习技术,特别是人脸复原模型,可以轻松修复和增强面部图像,提升照片和视频的质量和视觉效果 工作原理 1.通过自动 ...

  8. js脚本化css

    脚本化CSS 我们刚讲过如何获取和设置行内样式的值,但是我们开发不会所有样式都写在行内,同时js没法获取内嵌样式表和外部样式表中的值. 事实上DOM提供了可靠的API,得到计算后的样式. 1. 获取计 ...

  9. post基础错误注入

    Burpsuite抓取HTTP请求 Burpsuite是一款Web安全测试的利器,集成了几乎Web安全测试中所有需要用到的功能. 运行前提: 需要安装Java https://www.java.com ...

  10. 【基础计算】ESDF栅格距离图计算并行加速版

    前言与参考 这一部分仅为路径规划源码及论文GPIR的一个小部分,但是有代码实现,第一次看的时候有些懵,所以特此记录:主要是设置好了栅格地图后,添加了障碍物后,对其的欧式距离计算和梯度计算等.原代码中为 ...