掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

如何用OpenAI公司的Gym工具库和Universe平台为游戏创建人工智能机器人(AI Game Bot)

本文由chaussen 在众成翻译平台翻译。

Universe平台上的霓虹赛车Flash游戏环境

面对现实吧,人工智能已经无处不在了。Elon Musk和Mark Zuckerberg之间正在展开一场关于人工智能未来的对决。有的人妖魔化人工智能;有的人理想化人工智能,认为它可以像神一样帮助人类。不管你倾向哪种观点,人工智能是不会消失了。

> “拥有人工智能就像在召唤恶魔。” —— Elon Musk > > “害怕杀手机器人的崛起,就像担心火星上人口过剩一样。”—— Andrew Ng

如果对人工智能有兴趣,正想朝这个方向发展,想先摆弄一下人工智能,那做游戏是一个很好的起点,因为游戏一直是最适合人工智能的试验台。但先别急,开始前要讲一点游戏编程的历史,说说它从过去到现在是如何演化的。

游戏编程的历史

游戏程序员过去用探试法制作游戏。游戏中做出的每个决定都是基于if-then-else语句的,是一种有根据的猜测。像乒乓(Pong)和吃豆人(PacMan)之类最早的街机游戏上就可以看到这种方法,它长期以来一直是规范作法。可是游戏开发人员能预估到的情形有限,还要考虑极端情况,这样游戏机器人才不会无头苍蝇一样乱转。

于是游戏开发人员试图模拟人类玩游戏的方式,为人类智能建模,融入到游戏机器人中去。

DeepMind公司团队就是这样做的。他们把智能行为归纳并建模,所有投给他们的Atari游戏都用这个方法解决。他们的游戏机器人使用深度学习神经网络,并不存在任何关于游戏的具体知识。游戏通关靠的是屏幕上看到的像素,以及对于游戏控制的理解。然而,DeepMind公司项目里仍有部分是不开源的,因为母公司Google要利用DeepMind赢得市场竞争。

人工智能民主化

人工智能有着惊人力量,为了不使这种力量集中在少数人手中,Elon Musk创立了开放人工智能(OpenAI)公司。这个公司寻求人工智能的民主化,让所有人都能接触人工智能。今天我们就要探索一下OpenAI公司的Gym工具库,以及最近刚发布的以这个工具库为基础的Universe平台。

OpenAI Gym工具库提供了一个很简单的接口,无论什么任意的动态环境都能通过接口与其进行互动并管理。OpenAI Universe是一个平台,大家能在平台上创建机器人并进行测试。

游戏环境成千上万。从经典的Atari游戏、我的世界、侠盗猎车手到用来治疗癌症的蛋白质折叠模拟游戏(protein fold simulations)。只用几行Python代码就可以创建一个游戏机器人,并能够在任何环境里运行,真是妙极了,绝对不容错过!

项目(耗时一个小时)

我们要使用“强化学习(Reinforcement Learning)”技术创建一个人工智能游戏机器人,这个等会再解释。这个机器人在游戏中能自行对战并能通关Atari游戏,霓虹赛车。当然想要别的什么游戏也可以。我们要用OpenAI的Gym工具库和Universe平台来创建这个游戏机器人。

第一步:安装

确保Python安装好了,没有的话用Homebrew安装。可以下载一个Python专用的IDE编辑器,比如PyCharm或iPython notebook。我喜欢简洁点的,所以用Sublime编辑器。最后用pip安装Gym工具库,Universe平台和其它必需的库。

// 用brew安装python
brew install python3
// 安装必需的OpenAI库
pip3 install gym
pip3 install numpy incremental
brew install golang libjpeg-turbo 
pip install universe

Universe平台环境里的所有部分都是作为Docker里面的容器来运行的。如果还没装Docer,到这里安装并运行。

第二步:编写游戏机器人

游戏机器人是用Python语言编写的,这个项目必需的只有两个库:Gym工具库和Universe平台,所以一开始先导入。

import gym
import universe

这个游戏机器人就用我小时候最喜欢的游戏——霓虹赛车作为测试环境。其它可用环境或游戏都列在这里了,可以自己选择。

Universe平台能使多个环境并排运行,需要多少就可以有多少。但这个项目里我们只用一个。

env = gym.make(‘flashgames.NeonRace-v0’)
env.configure(remotes=1) # 创建一个本地的docker容器

强化学习(Reinforcement Learning)

现在我们用强化学习技术给游戏机器人加入游戏逻辑。这个技术原理是观察游戏前一个状态与奖励情况,比如屏幕上看到的像素或游戏分数,然后得出这个环境中要采取的行动。

这个行动的目的是使下一次观察到的结果比前一次好。在我们的这个例子里,就是要得尽可能多的分数。为了得最高分,游戏媒介也就是游戏机器人会选择并实施行动,然后施加在环境上。环境根据行动是否有利,比如游戏是否胜利,来记录下这个行动造成的新状态和奖励情况。

现在,每个初始化过的环境中获取的观察结果我们都可以用env.reset()方法列出来。

observation_n = env.reset()

这里的观察结果是当前环境独有的对象。它代表了被观察到的信息,如屏幕上的原始像素数据或游戏状态、分数等。

下一步是用一个无限循环创建一个游戏媒介,让这个媒介基于观察结果持续不断地采取某些行动。让我们在机器人里设置一个单一的行动,就是反复按向上箭头键,有点傻,所以改造就改造,做个复杂些的机器人吧。这里的行动是由事件类型,即按键事件(KeyEvent)与控制键,即向上箭头(Up Arrow)共同定义的。不管媒介观察到什么,这个值都设成真。

while True:
action_n = [[('KeyEvent', 'ArrowUp', True)] for ob in observation_n]

然后我们用env.step()方法操纵行动每次向前移动一步。这就实现了非常基本的强化学习技术。

 observation_n, reward_n, done_n, info = env.step(action_n)

这个行走方法返回四个变量:

  1. observation_n:对环境的观察结果

  2. reward_n:行动是否有利,结果为+1或-1

  3. done_n:显示游戏是否结束,结果为是或不是(Yes/No)

  4. info:其它信息,如性能、延迟等,用以调试进程

要训练机器人,所有的环境都可以同时运行这个行动。使用env.render()方法来开始机器人。

env.render()

现在游戏机器人就做好了,可以在环境中对战了。这个机器人基本版的与高级版的完整代码,都在我的Github库站上,请看这里

第三步:运行游戏机器人

现在就是好玩的地方了:确保Docker运行中,然后启动机器人。看机器人在行动,要么打败别的赛车,要么没成功。输了的话就再对机器人进行微调,让它突破智能!

python [gamebot.py](http://gamebot.py)

撞毁着火! #基本版

Image

摆弄人工智能不要停,最终能解锁上帝模式! #100DaysOfCode

原文来自:众成翻译

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 营运车判定查询

    输入车牌号码或车架号,判定是否属于营运车辆。

    输入车牌号码或车架号,判定是否属于营运车辆。

  • 名下车辆数量查询

    根据身份证号码/统一社会信用代码查询名下车辆数量。

    根据身份证号码/统一社会信用代码查询名下车辆数量。

  • 车辆理赔情况查询

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

    根据身份证号码/社会统一信用代码/车架号/车牌号,查询车辆是否有理赔情况。

  • 车辆过户次数查询

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

    根据身份证号码/社会统一信用代码/车牌号/车架号,查询车辆的过户次数信息。

  • 风险人员分值

    根据姓名和身份证查询风险人员分值。

    根据姓名和身份证查询风险人员分值。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future