Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Universe入门

Universe入门

作者头像
东心木水
修改于 2018-02-10 02:15:18
修改于 2018-02-10 02:15:18
3.1K0
举报
文章被收录于专栏:翻译翻译

Universe

Universe是一个用于衡量和训练AI的软件平台,适合世界上的所有游戏,网站和应用程序。本项目是一个universe开源库,它为 每个Universe环境提供了一个简单的Gym界面。

Universe允许任何人在任何时候,任何复杂环境中训练和评估智能体(AI agents)。

Universe可以使得任何现有的程序成为一个OpenAI Gym环境,而不需要对程序的内部,源代码或API的特殊访问。它通过将程序打包到Docker容器中,并使用直观的界面来呈现AI:包括发送键盘和鼠标事件以及读取屏幕像素。Universe的最初版本包含超过1000个可以执行任务和收集信息的智能体。

此外,一些环境给智能体发送奖赏信号,以指导强化学习。我们已经拥有几百个内置奖赏信号的环境。这些环境还可以实现自动化的键鼠操作,让您的智能体跳到环境中有趣的部分。

我们希望社区的帮助 能够增加可用环境的数量,当然也包括整合日益庞大和复杂的游戏。

以下任务类包装在公共可用的Docker容器中,现在就可以无需任何额外的工作马上运行:

  • 通过VNC玩雅达利和CartPole游戏: ,gym-core.Pong-v3gym-core.CartPole-v0等。
  • VNC上的Flash游戏:flashgames.DuskDrive-v0
  • VNC上的浏览器会话(World of Bits”):wob.mini.TicTacToe-v0

我们已经为许多游戏建立了集成,包括高质量的GTA V集成(感谢Craig Quiter和NVIDIA),不过这些都不包含在今天这文章中。

本文档的内容

  • 入门
    • 安装
    • 系统总览
    • 运行你的第一个agents
  • 测试
  • 其他文文档
  • 获得帮助
  • 下一步该做什么
    • 更新日志

入门

安装

支持系统

目前支持Python 2.7或3.5

支持Linux和OSX。

建议在开始之前设置一个conda环境,将所有与Universe相关的软件包保存在同一个地方。

安装Universe

要开始,首先安装universe

代码语言:txt
AI代码解释
复制
git clone https://github.com/openai/universe.git
cd universe
pip install -e .

如果有错误出来,可能是因为缺少一些必需的软件包。以下是所需软件包列表(如果需要安装其他软件的话,请告诉我们以帮助我们做的更好)。

Ubuntu 16.04上:

代码语言:txt
AI代码解释
复制
pip install numpy
sudo apt-get install golang libjpeg-turbo8-dev make

在Ubuntu 14.04上:

代码语言:txt
AI代码解释
复制
sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable  
sudo apt-get update
sudo apt-get install golang libjpeg-turbo8-dev make
#译者注:以上的ppa可能已经失效,可以使用下面的命令
#sudo add-apt-repository ppa:gophers/archive
#sudo apt-get update
#sudo apt-get install golang-1.9 libjpeg-turbo8-dev make
# 之后把 /usr/lib/go-1.9/bin 加入PATH

在OSX上:

首先安装命令行工具

代码语言:txt
AI代码解释
复制
xcode-select --install

以及numpylibjpeg-turboincremental包:

代码语言:txt
AI代码解释
复制
pip install numpy incremental
brew install golang libjpeg-turbo
安装Docker

Universe中的大部分环境在Docker容器中运行,所以需要安装Docker(在OSX上,推荐Docker for Mac)。

之后运行docker ps,结果如下:

代码语言:txt
AI代码解释
复制
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS    
备用配置 - 在docker中运行智能体

通过以上配置,智能体在操作系统中会作为常规python进程来运行,并根据远程需要启动docker容器。还有一种方法:为智能体构建一个docker镜像,将其作为容器来运行。这种方法适合安装了最新版本docker的任何操作系统和git客户端。

首先cloneuniverse仓库:

代码语言:txt
AI代码解释
复制
git clone https://github.com/openai/universe.git
cd universe

建立一个docker镜像,标签为“universe”,注意最后还有个.

代码语言:txt
AI代码解释
复制
docker build -t universe .
#译者注:可能需要在dockerfile中加入libffi的安装

可能需要一段时间,因为docker镜像要从docker hub中下载。

一旦构建镜像完成,就可以运行测试示例。

代码语言:txt
AI代码解释
复制
docker run --privileged --rm -e DOCKER_NET_HOST = 172.17.0.1 -v /var/run/docker.sock:/var/run/docker.sock universe pytest

命令详细解释:

  • docker run - 启动docker容器
  • --rm - 一旦启动完成,删除容器
  • -e DOCKER_NET_HOST=172.17.0.1 - 启动时告诉universe远程VNC连接到这个Docketr分配的IP
  • -v /var/run/docker.sock:/var/run/docker.sock - 使主机上的docker unix socket可用于容器。这功能常用于允许容器在其自身旁启动其他容器。
  • universe - 使用上面构建的名为“Universe”的镜像
  • pytest - 在容器中运行“pytest”,即运行所有测试

在这一点上,你会看到一堆测试运行,全部通过的话就说明上面的工作已经完成了。

实际的开发工作中,你可能想要运行universe仓库里的其他东西,可以执行以下命令:

代码语言:txt
AI代码解释
复制
docker run --privileged --rm -it -e DOCKER_NET_HOST=172.17.0.1 -v /var/run/docker.sock:/var/run/docker.sock -v (full path to cloned repo above):/usr/local/universe universe python
安装注意事项
  • 安装universe时,在安装numpy时可能会看到warning消息,正常现象。
  • 需要go 版本1.5。Ubuntu 14.04有一个较旧的Go,所以需要升级你的Golang。
  • 我们内部运行的是Python 3.5,所以Python 3.5将会进行更彻底的性能测试。如果您在2.7上看到任何问题,请告诉我们。
  • 虽然我们并非正式支持Windows,但我们希望我们的代码能够在Windows工作。我们很乐意接受完美兼容Windows的请求。同时,Windows用户运行Universe的最简单方法是使用上述备用配置。

系统总览

Universer环境与任何其他Gym环境类似:智能体提交行动并使用step() 方法接收观测。

在内部,Universe环境由两部分组成:客户端远程

  • 客户端是一个VNCEnv 实例,它和智能体在同一个进程中。它能够接收智能体的操作,将智能体代理到 远程,等待智能体的奖赏队列以及维护当前事件状态的本地视图。 -远程是运行环境的动力,通常是Docker容器内部运行的程序。它可以在任何地方运行 - 在本地,远程服务器或云中运行。(这里有一个网页,描述了如何管理远程。)
  • 客户端和远端使用VNC 远程桌面系统以及WebSocket辅助通道互相通信,以获得奖赏,诊断和控制消息。(有关客户端 - 远程通信的更多信息,请参阅Universe内部通信协议。)

这个仓库中的代码对应于Universe环境的客户端。此外,您可以随意访问远程的Docker镜像。我们将在未来发布远程部分的源码,以及使用户能够整合新环境的工具。 如果您想提前体验,请注册我们的测试版(https://docs.google.com/forms/d/e/1FAIpQLScAiW-kIS0mz6hdzzFZJJFlXlicDvQs1TX9XMEkipNwjV5VlA/viewform)。

运行你的第一个智能体

现在已经安装了universe库,确保它能正常工作,试试用python运行下面的例子。(可能需要输入一段时间来确保while循环正在执行。)

代码语言:txt
AI代码解释
复制
import gym
import universe  # 注册 universe环境

env = gym.make('flashgames.DuskDrive-v0')
env.configure(remotes=1)  # 自动创建本地 docker容器
observation_n = env.reset()

while True:
  action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]  # 智能体
  observation_n, reward_n, done_n, info = env.step(action_n)
  env.render()

该示例将在您的Python进程中初始化客户端,自动拉取quay.io/openai/universe.flashgames镜像,并将该镜像作为远程镜像启动。(在我们的远程文档页面中,介绍了其他可以运行远程的方法。)

第一次需要几分钟的时间。顺利的话会有一个窗口弹出来。一个反复向上的箭头,这就是你的智能体,可以看到它正在玩一个Flash赛车游戏Dusk Drive。这个智能体以可编程的方式控制VNC客户端,连接到在云中的Docker容器内运行的VNC服务器,从而呈现一个启用了Flash的无界面版Chrome:

如果只是为了观察或操作您的智能体,您甚至还可以将您自己的VNC客户端连接到环境。我们把flashgamesgym-core镜像捆绑在一个基于浏览器的VNC客户端,可以方便地在这里访问 http://localhost:15900/viewer/?password=openai。如果你在Mac上,连接到VNC服务器更加简单`open vnc://localhost:5900`。

(如果使用docker-machine,则需要将“localhost”替换为Docker守护进程的IP地址,密码为openai。)

例子解析

我们成功运行了一个智能体,那么这些代码是什么意思?我们将通过示例逐行解释。

  • 首先,我们导入已经构建完成的universe的gym库。同时也导入 universe注册 所有的universe环境。
代码语言:txt
AI代码解释
复制
import gym
import universe # 注册universe环境
  • 接下来,我们创建环境实例。gym 在后台搜索注册 信息flashgames.DuskDrive-v0,并实例化 已被修饰VNCEnv对象, 以添加一些实用的诊断和程序。VNCEnv对象是环境的客户端部分,且此时VNCEnv尚未连接到远程
代码语言:txt
AI代码解释
复制
env = gym.make('flashgames.DuskDrive-v0')
  • configure()将客户端连接到远程环境服务器。当调用configure(remotes=1)时,Universe将自动在计算机本地上创建一个Docker镜像。本地客户端使用VNC连接到远程。(客户端-远程通信的更多信息可以在页面中找到universe内部通信协议。更多关于配置远程的信息可查看远程)。
代码语言:txt
AI代码解释
复制
env.configure(remotes=1)
  • 调用env.reset()就可以开始一个新的环境。Universe环境实时运行,而不是与智能体的动作同步,因此reset是异步的,立即完成的。由于环境在返回之前,不会等待与VNC服务器的连接完成,所以reset后最初的观察为None,表明还没有有效的观察。 同样,即使智能体没有调用环境,环境仍在后台运行env.step()。这意味着一个从Universe环境中成功学习的智能体不能休息(thinking breaks):它必须不断地向环境发送行动。 此外,Universe还包含了矢量化的 Gym API。智能体可以控制固定大小n的环境向量,而不是一次控制单个环境。因为每个环境都有自己的远程控制,所以来自reset的返回值是观察的向量。有关更多信息,请参阅有关环境语义的单独页面 )
代码语言:txt
AI代码解释
复制
observation_n = env.reset()
  • 在每次step()的调用中,智能体都会提交一个操作向量,每个操作向量对应一个正在控制中的环境实例。每个VNC操作都是事件的列表; 每个动作就是单个事件“ ArrowUp键”。智能体可以通过提交[('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowUp', False)]事件来代替按下和释放 ArrowUp键。 事实上,只要提交('KeyEvent', 'ArrowUp', True)一次,然后再调用env.step([[] for ob in observation_n]) ,智能体就能实现与上述相同的效果,而不用使用('KeyEvent', 'ArrowUp', False)释放按键。在远程运行的浏览器将继续将方向键状态表示为被按下。发送其他按键不会中断箭头上键的状态。只有明确地释放按键才能取消它。有一个点非常微妙:当游戏重置,浏览器将重置,并将忘记按键的状态; 你在每个游戏片段开始时都需要提交新的ArrowUp
代码语言:txt
AI代码解释
复制
action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]
  • 在我们向环境提交动作和每逢渲染场景一帧后,step()都会返回一个观察的列表,一个奖赏的列表,一个表示该事件是否已经结束的“done”(布尔值)列表,最后返回列表的一个信息索引{'n':[{},...]},您可以在其中以info ['n'] [i]的形式访问环境信息。
代码语言:txt
AI代码解释
复制
observation_n,reward_n,done_n,info = env.step(action_n)
env.render()
  • 我们调用step时,看起来像是一直循环调用。实际上, 客户端上有一个Throttle修饰器,默认目标帧速率为60fps,或者每16.7ms一帧。如果你比以前更频繁地调用它, step会 在剩下的时间里休眠

测试

我们使用pytest进行测试。

代码语言:txt
AI代码解释
复制
pytest

运行pytest --help查看帮助,如pytest -s(禁用输出捕捉)或pytest -k <expression>(只运行特定的测试)。

其他文档

未包含的更多文档可以在项目库的doc文件夹中找到 。

获得帮助

如果遇到本自述文件或附加文档中未解决的问题,请尝试常见问题维基页面,如果解决方案不存在,那么欢迎添加新的解决方案。

您还可以搜索此项目的论坛问题页面,以查看是否有其他用户发布了相同的问题,或着向社区寻找帮助。

如果尝试上述所有步骤后仍无法解决问题,请在本github项目上发布问题。

下一步是什么?

更新日志

  • 2017-02-08:wrappers.SafeActionSpace的旧位置已被移至wrappers.experimental.SafeActionSpace。SoftmaxClickMouse也被转移到wrappers.experimental.SoftmaxClickMouse
  • 2017-01-08:wrappers.SafeActionSpace已被移至wrappers.experimental.SafeActionSpace。旧的位置将保持低版本警告,直到2017-02-08。
  • 2016-12-27:反向不兼容:gym监视器现在是一个修饰器。与其将启动监视器作为env.monitor.start(目录),不如将envs修饰为:env = wrappers.Monitor(env,directory)。(master 0.21.0分支)
评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RSA 加密算法与 golang 代码实现
最近参与借贷业务的开发,接口传输过程中需要使用 RSA 加密算法对请求和返回进行加密,所以写了这篇博客。主要介绍 RSA 的基础知识和 golang 使用例子
_春华秋实
2023/11/27
5140
PHP怎么使用OpenSSL生成RSA加解密所需要的公私钥?
RSA算法是现今使用最广泛的公钥密码算法,也是是号称地球上最安全的加密算法,与 md5 和 sha1 不同,到目前为止,也只有极短的RSA加密被破解
沈唁
2018/08/21
1.6K0
PHP怎么使用OpenSSL生成RSA加解密所需要的公私钥?
php中的公钥和私钥
最近公司业务需要用到公钥和私钥,之前接触的很少,不是很了解,刚刚上网了解了下.发现很多地方都要用到加密.有对称加密算法( DES,AES)[加密和解密都使用一个密钥]和不对称加密算法(RSA).这里说的是RSA(非对称加密算法). RSA就涉及到公钥和私钥.
仇诺伊
2018/09/12
1.6K0
php中的公钥和私钥
20.2 OpenSSL 非对称RSA加解密算法
RSA算法是一种非对称加密算法,由三位数学家Rivest、Shamir和Adleman共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。
王 瑞
2023/10/29
5350
20.2 OpenSSL 非对称RSA加解密算法
Golang RSA 生成密钥、加密、解密、签名与验签
RSA 是最常用的非对称加密算法,由 Ron Rivest、Adi Shamir、Leonard Adleman 于1977 年在麻省理工学院工作时提出,RSA 是三者姓氏首字母的拼接。
恋喵大鲤鱼
2023/10/12
2.6K0
Golang RSA 生成密钥、加密、解密、签名与验签
关于公钥与私钥,以及利用它们进行加密和认证
下一篇,我即将详细分析windows vista下的EFS加密技术。在这之前,先分析一下相关的公钥与私钥、以及相关的加密与认证技术。
williamwong
2018/07/24
1.9K0
关于公钥与私钥,以及利用它们进行加密和认证
加密工具类,提供RSA & AES & DES 等加密解密方法工具类介绍加密解密概念使用方法公钥、私钥生成
github项目地址 https://github.com/XHTeng/XHCryptorTools 工具类介绍 框架从 CryptoExercise(苹果3.0时的包)进行提取扩展 iOS 系统自带相关函数说明,框架主要使用前两种: SecKeyEncrypt 使用公钥对数据加密 SecKeyDecrypt 使用私钥对数据解密 SecKeyRawVerify 使用公钥对数字签名进行验证 SecKeyRawSign 使用私钥生成数字签名 普遍的加密方法:客户端用RSA的公钥加密AES的秘钥
用户2141756
2018/05/18
2.3K0
RSA的公钥私钥
非对称加密使用的是RSA算法,所谓的非对称,指的是,加密时使用的秘钥和解密时使用的秘钥是不一样的。也就是说RSA有一对秘钥,其中一个是公钥,另一个是私钥,一个用于加密,一个用于解密。
赵哥窟
2022/04/02
2.8K0
RSA的公钥私钥
公钥私钥的那点事儿
生成秘钥参考官网:https://docs.open.alipay.com/291/105971
IT茂茂
2020/03/05
3.9K1
公钥私钥的那点事儿
为什么用公钥加密却不能用公钥解密?
小学上课的时候,都传过小纸条吧?传纸条的时候每个拿到纸条的同学都会忍不住看一眼,毫无隐私可言。
小白debug
2023/02/17
1.2K0
为什么用公钥加密却不能用公钥解密?
AES,RSA公私钥加解密
密钥是成对存在的,加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,使用公钥进行加密操作,使用私钥进行解密操作。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。密码学里面博大精深,下面的实例仅供参考
kl博主
2023/11/18
4580
非对称加密的应用
估计有人看到这篇文章标题的时候会有很多的疑惑,非对称加密是干什么的,"非对称"大致很好理解,意思和对称相反,加密也能理解,但是非对称加密是个什么玩意儿。这东西有什么应用呢?
挥刀北上
2019/09/02
2.1K0
非对称加密的应用
Go语言中实现RSA加解密、签名验证算法
随着互联网的高速发展,人们对安全的要求也越来越高。密码学中两大经典算法,一个是对称加解密,另一个是非对称加解密,这里就来分享一下非对称加密算法的代表:RSA加解密。
技术圈
2024/06/12
3390
harmony-utils之RSA,RSA加解密
harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON等一系列的功能和操作,能够满足各种不同的开发需求。 picker_utils 是harmony-utils拆分出来的一个子库,包含PickerUtil、PhotoHelper、ScanUtil。
童长老
2025/06/29
920
RSA初探,聊聊怎么破解HTTPS
这篇文章跟大家讨论一个比较有意思的问题:怎么破解https?大家都知道,现在几乎整个互联网都采用了https,不是https的网站某些浏览器还会给出警告。面试中也经常问到https,本文会深入https原理,一直讲到https破解思路。
蒋鹏飞
2020/10/15
1.6K0
使用hutool的非对称加密工具进行加密解密
RSA是最流行的非对称加密算法之一。也被称为公钥加密。它是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
JQ实验室
2023/01/13
5.1K0
AES加密和RSA加密
最近项目需要用到前端加密,某些特定的数据需要前端加密之后再传输到后端,然后后端再按照与前端约定好的方式进行解密。
epoos
2022/06/06
2.6K0
AES加密和RSA加密
​谁再问我加密算法、签名算法、我上去就是一jio
上面的例子只是用来说明网络环境下的数据安全问题,现实中应该没有这么蠢的黑客吧 哈哈。而且像美团、QQ这种软件都有较为完善的机制。
敲得码黛
2021/02/22
5631
​谁再问我加密算法、签名算法、我上去就是一jio
详解 RSA 非对称加密
随着互联网越来越渗透入我们生活的方方面面,各种私密信息在网络中传播,为了保证信息的真实可靠,在我们对其安全性的要求也越来越高,对此,加密是一个永远不过时的话题。非对称加密,全站HTTPS等,深入了解,总会遇到RSA加密算法。在一些特殊行业,如博主工作的互联网金融,RSA加密算法的重要性更是非同一般。
BUG弄潮儿
2022/12/05
1.8K0
对称加密和非对称加密
对称加密指的就是加密和解密使用同一个秘钥,所以叫对称加密。 对称加密只有一个秘钥,作为私钥。
小吕
2022/09/26
2.9K0
推荐阅读
相关推荐
RSA 加密算法与 golang 代码实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档