跳转到主要内容

宇宙:一个用于测量和训练人工智能在游戏、网站和其他应用中的通用智能的平台。

项目描述

https://travis-ci.org/openai/universe.svg?branch=master

宇宙是一个用于测量和训练人工智能在游戏、网站和其他应用中的通用智能的平台。这是宇宙开源库,它为每个宇宙环境提供了一个简单的Gym接口。

宇宙允许任何人在极其广泛的实时、复杂环境中训练和评估AI代理。

宇宙使得任何现有程序都可以成为OpenAI Gym环境,无需访问程序的内部、源代码或API。这是通过将程序打包到Docker容器中实现的,并将AI与人类使用的相同界面呈现给AI:发送键盘和鼠标事件,接收屏幕像素。我们的初始版本包含1000多个环境,AI代理可以在这些环境中采取行动和收集观察。

此外,一些环境还包括发送给代理的奖励信号,以指导强化学习。我们包括了几百个带有奖励信号的环境。这些环境还包括自动开始菜单点击,允许您的代理跳转到环境中的有趣部分。

我们希望社区的帮助能够增加可用环境的数量,包括集成越来越大、越来越复杂的游戏。

以下类别的任务已打包在公开可用的Docker容器中,并且无需您进行任何操作即可运行

  • 通过VNC的Atari和CartPole环境:gym-core.Pong-v3gym-core.CartPole-v0等。

  • 通过VNC的Flash游戏:flashgames.DuskDrive-v0等。

  • 通过VNC的浏览器任务(“比特世界”):wob.mini.TicTacToe-v0等。

我们已经规划了与其他许多游戏的集成,包括完成高质量的GTA V集成(感谢Craig Quiter和NVIDIA),但这些并未包含在今天的版本中。

入门指南

安装

支持的系统

我们目前支持运行Python 2.7或3.5的Linux和OSX。

在开始之前,我们建议设置一个conda环境,以便将所有与Universe相关的包放在同一个地方。

安装Universe

要开始,首先安装universe

git clone https://github.com/openai/universe.git
cd universe
pip install -e .

如果出现错误,您可能缺少一些必需的包。以下是迄今为止我们所知的必需包列表(如果需要安装其他包,请告诉我们)。

在Ubuntu 16.04上

pip install numpy
sudo apt-get install golang libjpeg-turbo8-dev make

在Ubuntu 14.04上

sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable  # for newer golang
sudo apt-get update
sudo apt-get install golang libjpeg-turbo8-dev make

在OSX上

您可能需要通过运行以下命令来安装命令行工具

xcode-select --install

或者安装numpylibjpeg-turboincremental

pip install numpy incremental
brew install golang libjpeg-turbo

安装Docker

Universe中的大多数环境都运行在Docker容器中,因此您需要安装Docker(在OSX上,我们推荐Docker for Mac)。您应该能够运行docker ps并得到类似以下的结果

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

安装说明

  • 在安装universe时,您可能会看到警告消息。这些行是在安装numpy时发生的,这是正常的。

  • 您需要一个至少为1.5的go version。Ubuntu 14.04有一个较旧的Go版本,因此您需要升级您的Go安装。

  • 我们内部运行Python 3.5,因此Python 3.5的变体将进行更彻底的性能测试。如果您在2.7上看到任何问题,请告诉我们。

  • 虽然我们官方不支持Windows,但我们预计我们的代码在Windows上几乎可以正常工作。我们很高兴接受将我们的Windows兼容性提高到100%的拉取请求。

系统概述

宇宙环境与其他Gym环境类似:代理通过step()方法提交动作并接收观察。

内部,宇宙环境由两部分组成:一个客户端和一个远程

  • 客户端是一个与代理位于同一进程中的VNCEnv实例。它执行接收代理的动作、将这些动作代理到远程、为代理排队奖励以及维护当前局状态本地视图等功能。

  • 远程是运行环境动态,通常是运行在Docker容器内的程序。它可以在任何地方运行——本地、远程服务器或云端。(我们有一个单独的页面介绍如何管理远程。)

  • 客户端和远程通过VNC远程桌面系统以及用于奖励、诊断和控制消息的辅助WebSocket通道进行通信。(有关客户端-远程通信的更多信息,请参阅Universe内部通信协议的单独页面。)

此存储库中的代码对应于宇宙环境的客户端端。此外,您可以自由访问远程的Docker镜像。如果您想提前访问,请注册我们的beta

运行您的第一个代理

现在您已经安装了universe库,请确保它确实可以工作。您可以将下面的示例粘贴到您的python REPL中。(您可能需要多按一次Enter键以确保while循环正在执行。)

import gym
import universe  # register the universe environments

env = gym.make('flashgames.DuskDrive-v0')
env.configure(remotes=1)  # automatically creates a local docker container
observation_n = env.reset()

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

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

第一次拉取镜像需要几分钟。之后,如果一切顺利,像下面的窗口很快就会弹出。您的代理现在正在玩一个名为Dusk Drive的Flash赛车游戏。您的代理正在通过VNC客户端程序控制,该客户端连接到一个在云端的Docker容器中运行的VNC服务器,并渲染了一个启用Flash的无头Chrome浏览器。

https://github.com/openai/universe/blob/master/doc/dusk-drive.png?raw=true

您甚至可以将自己的VNC客户端连接到环境,既可以观察,也可以干扰您的代理。我们的flashgamesgym-core镜像方便地捆绑了一个基于浏览器的VNC客户端,您可以通过http://localhost:15900/viewer/?password=openai访问它。如果您在Mac上,连接到VNC服务器就像运行:open vnc://localhost:5900一样简单。

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

分析示例

所以我们成功运行了一个代理,所有这些代码实际上意味着什么?我们将逐行分析示例。

  • 首先,我们导入gym库,它是Universe构建的基础。我们还导入了universe,它注册了所有Universe环境。

import gym
import universe # register the universe environments
  • 接下来,我们创建环境实例。在幕后,gym查找flashgames.DuskDrive-v0注册信息,并实例化一个已经被包装VNCEnv对象,该对象添加了一些有用的诊断和工具。VNCEnv对象是环境的客户端部分,它尚未连接到远程

env = gym.make('flashgames.DuskDrive-v0')
  • 调用configure()将客户端连接到远程环境服务器。当使用configure(remotes=1)时,Universe将自动在您的计算机上创建一个运行Docker镜像。本地客户端通过VNC连接到远程。(关于客户端-远程通信的更多信息,请参阅Universe内部通信协议页面。有关远程配置的更多信息,请参阅远程。)

env.configure(remotes=1)
  • 在启动新环境时,您调用env.reset()。Universe环境以实时方式运行,而不是与代理的动作同步步进,因此reset是异步的并立即返回。由于环境在返回之前不会等待完成连接到VNC服务器,因此reset的初始观察结果是None,以表示尚未有有效的观察。

    同样,即使代理没有调用env.step(),环境也会在后台继续运行。这意味着从Universe环境成功学习的代理不能“思考休息”:它必须始终向环境发送动作。

    此外,Universe引入了向量化的Gym API。代理不仅可以一次控制单个环境,还可以控制固定大小的n个环境的向量,每个环境都有自己的远程。因此,reset的返回值是一个向量观察。有关更多信息,请参阅单独的环境语义页面)

observation_n = env.reset()
  • 在每次step()调用中,代理提交一个动作向量;每个环境实例一个。每个VNC动作是一个事件列表;上面,每个动作是单个事件“按下ArrowUp键”。代理可以通过提交[('KeyEvent', 'ArrowUp', True), ('KeyEvent', 'ArrowUp', False)]为每个观察结果来在一次动作中按下和释放键。

    事实上,代理只需提交一次('KeyEvent', 'ArrowUp', True)并随后调用env.step([[] for ob in observation_n]),而不使用('KeyEvent', 'ArrowUp', False)释放键,就可以在很大程度上达到相同的效果。远程内部运行的浏览器会继续状态性地表示箭头键被按下。发送其他无关的按键不会干扰上箭头键的按下;只有明确释放键才能取消它。有一点微妙之处:当剧集重置时,浏览器也会重置,并忘记按键;您需要在每个剧集的开始提交一个新的ArrowUp

action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]
  • 在将操作提交给环境并渲染一帧后,step() 返回一个 观察 列表,一个 奖励 列表,一个表示是否结束的 “完成”布尔值 列表,以及最后是一个形式为 {'n': [ {}, ... ]}信息字典,您可以通过 info['n'][i] 访问环境 i 的信息。

    每个环境的 info 消息包含有用的诊断信息,包括延迟数据、客户端和远程计时、VNC 更新次数和奖励消息计数。

observation_n, reward_n, done_n, info = env.step(action_n)
env.render()
  • 我们在一个看起来很忙的循环中调用 step。实际上,客户端有一个 Throttle 包装器,默认目标帧率为 60fps,即每 16.7ms 一帧。如果您调用它的频率高于此,step 将使用任何剩余的时间 sleep

测试

我们使用 pytest 进行测试。您可以通过

pytest

运行 pytest --help 获取有用的选项,例如 pytest -s(禁用输出捕获)或 pytest -k <expression>(仅运行特定测试)。

其他文档

更多未在本 README 中涵盖的文档可以在本存储库的 doc 文件夹中找到。

获取帮助

如果您在本 README 页面或 额外文档 中遇到未解决的问题,请尝试查看我们的 常见问题解决方案 页面 - 如果您的解决方案不在其中,请添加它!

您还可以在此存储库的 问题 和我们的 讨论板 上搜索,看看是否有其他用户发布了相同的问题或请求社区帮助。

如果您在尝试了所有上述步骤后仍然无法解决问题,请在本存储库上提交一个问题。

下一步是什么?

  • 开始训练强化学习算法!您可以尝试 Universe Starter Agent,它是 A3C 算法 的实现,可以解决多个 VNC 环境。

  • 有关如何管理远程的更多信息,请参阅单独的 remotes 文档页面。

  • 注册 beta 计划,以获取即将推出的 Universe 版本的早期访问权限,例如集成新 Universe 环境的工具或记录的人类演示数据集。

变更日志

  • 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(directory),现在将 envs 包装如下:env = wrappers.Monitor(env, directory)。此更改在 master 上,并将与 0.21.0 一起发布。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

universe-0.21.3.tar.gz (137.0 kB 查看哈希值)

上传时间 源码

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面