用 TensorFlow 训练 Doom 机器人

用 TensorFlow 训练 Doom 机器人

作者:Mark Litwintschik
本文地址:http://tech.marksblogg.com/tensorflow-vizdoom-bots.html

ViZDoom 是一个 AI 研究平台,允许你训练机器人来玩 Doom,这是 1993 年最初由 id Software 发布的经典第一人称视角射击游戏。ViZDoom 使用一款开源 Doom 引擎 ZDoom 与游戏进行交互。

ViZDoom 包含了一系列用 C ++,Java,Lua 和 Python 编写的示例机器人。在许多情况下,模型本身依赖于各种潜在的深度学习库,如 TensorFlowTheano

使用 ViZDoom,机器人将针对场景进行训练。ViZDoom 在发布源代码中包含几种场景。场景定义了 Doom 地图,机器人可用的控件(如左转,攻击等),玩家模式和技能水平。

在这篇博文中,我将通过设置 ViZDoom 和 TensorFlow,并训练机器人在 Doom 中扮演恶魔。

ViZDoom 启动运行

以下是在全新安装的 Ubuntu Desktop 14.04.4 上运行。通常我使用了分布式服务器,但是我想看到机器人在完成训练后玩游戏。

我将使用 Google 的深度学习框架 TensorFlow 进行机器人培训。为了方便起见,我将描述如何使用 CPU 运行所有内容,但是如果要使用 GPU 进行训练,那么请进一步了解参阅基于 GTX 1080 的 TensorFlow 博客,以 GPU 为中心的安装说明。在许多情况下,TensorFlow 将在 GPU 上比常规桌面 CPU 快一至二个数量级。

我正在使用的机器配置 Intel Core i5 4670K,频率为 3.4 GHz,32 GB DDR3 内存,SanDisk SDSSDHII960G 960 GB SSD 驱动器和 Nvidia GeForce GTX 1080 显卡。
首先,我将安装各种包依赖。

$ sudo apt-get update
$ sudo apt-get install \
      build-essential \
      cmake \
      gfortran \
      git \
      libatlas-base-dev \
      libblas-dev \
      libboost-all-dev \
      libbz2-dev \
      libfluidsynth-dev \
      libgme-dev \
      libgtk2.0-dev \
      libjpeg-dev \
      liblapack-dev \
      liblua5.1-dev \
      libopenal-dev \
      libsdl2-dev \
      libwildmidi-dev  \
      nasm \
      openjdk-7-jdk \
      python-dev \
      python-pip \
      python-virtualenv \
      tar \
      timidity \
      zlib1g-dev

然后我将设置 Java 的主文件夹。

$ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

ViZDoom 是用 Python 编写的,所以我将创建一个虚拟环境并激活它。

$ virtualenv vz
$ source vz / bin / activate

然后我将安装五个基于 Python 的依赖。其中包括 TensorFlow 的分布式 CPU 驱动的 wheel。如果要使用 CUDA 支持的 GPU 加速版本,有一个单独的分布式。

$ pip install \
      cython \
      numpy
$ pip install \
      scikit-image \
      https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.0.0-cp27-none-linux_x86_64.whl \
      tqdm

然后,我将克隆 ViZDoom git 存储库,构建 Python 模块并进行安装。

$ git clone https://github.com/mwydmuch/ViZDoom.git
$ cd ViZDoom

$ cmake -DCMAKE_BUILD_TYPE=Release \
        -DBUILD_PYTHON=ON \
        -DBUILD_JAVA=ON \
        -DBUILD_LUA=ON
$ make

$ pip install.

基于 TensorFlow 的模型通常与 CPU 和 GPU 无关,但如果你使用 CPU 驱动的分布式 TensorFlow 进行训练,则可能会看到警告:所使用的 wheel 没有为你的 CPU 进行优化编译。如果你正在运行第四代或更高版本的 Intel Core i5 CPU,则将缺乏对 SSE3,SSE4.1,SSE4.2,AVX 和 FMA 指令的支持。

训练 Doom 机器人

有一个示例模型 「learning_tensorflow.py」 位于 examples/python 文件夹中,该文件夹将加载机器人在空房间的场景,一个敌人在另一端。机器人有能力左右移动攻击。机器人基于在比赛时间结束之前能够快速杀死对手的得分。

以下是此方案的配置文件:

$ cat scenarios/simpler_basic.cfg

doom_scenario_path = simpler_basic.wad

# Rewards
living_reward = -1

# Rendering options
screen_resolution = RES_640X480
screen_format = GRAY8

render_hud = true
render_crosshair = false
render_weapon = true
render_decals = false
render_particles = false

# make episodes start after 20 tics (after unholstering the gun)
episode_start_time = 14

# make episodes finish after 300 actions (tics)
episode_timeout = 300

# Available buttons
available_buttons =
    {
        MOVE_LEFT
        MOVE_RIGHT
        ATTACK
    }

下面花了 14 分钟训练机器人。

$ cd examples/python
$ python learning_tensorflow.py

一旦训练完成,底层的开源 Doom 引擎 ZDoom 开始并且可以看到机器人在 10 局不同的游戏中对付敌人。

机器人每回合拥有 50 发弹药,并给予 300 个游戏动作来杀死单个恶魔。在这种情况下,恶魔并没有反抗,也没有太大的动作。不幸的是,即使有这么好的设置,在超过 20% 的游戏中,机器人很少杀死恶魔。以下是10场比赛的得分。

Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  -404.0
Total score:  56.0
Total score:  -404.0
Total score:  -1.0
Total score:  -404.0

保卫中心

ViZDoom 附带的其他场景是「保卫中心」场景,其中机器人在一个竞技场中是静止的,只允许左右转动并进行攻击。有一列的敌人会稳定地接近机器人,在敌人攻击之前有时间杀死他们。ViZDoom 的主要开发者之一,Michał Kempka 上传了这种情况下视频的到 YouTube。

在我的 GTX 1080 上使用 GPU 加速 TensorFlow 分布式来训练机器人之前,我修改了以下五行代码的示例 /python/ learning_tensorflow.py。训练了41分钟才能完成。

learning_rate = 0.002
epochs = 5
learning_steps_per_epoch = 4000
test_episodes_per_epoch = 1000
config_file_path = "../../scenarios/defend_the_center.cfg"

每杀死一个敌人,机器人获得一分,并且如果死亡,它会失去一分。每轮有 26 发弹药。在这过程中,我注意到机器人开始非常乱开枪,它的弹药库消耗有一点太快,遗漏一些恶魔。它值得在射击时瞄准目标。

十次运行后,机器人死亡前平均每场杀死 5.9 名恶魔,

Total score:  5.0
Total score:  3.0
Total score:  5.0
Total score:  5.0
Total score:  4.0
Total score:  5.0
Total score:  6.0
Total score:  5.0
Total score:  7.0
Total score:  4.0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • 1. 介绍 首先让我们来看看TensorFlow! 但是在我们开始之前,我们先来看看Python API中的Ten...
    JasonJe阅读 11,731评论 1 32
  • 这是心灵自由写作群第三期第十一次作业。 我的失败感已转向无力感。什么也改变不了,也不知道该如何改变。生活还是如此,...
    灰菠萝阅读 149评论 1 2
  • 其实,我以前从来没有想过好女人和泼妇的关系,甚至我和大多数的人一样,是不喜欢泼妇、排斥泼妇甚至有些鄙视泼妇...
    記二十一阅读 1,209评论 0 1
  • 第一次接触《岛上书店》时,我完全不知道这是一本多么畅销的小说,直至看到腰封,竟然席卷《出版人周刊》、《纽约时报》、...
    青梅149阅读 530评论 7 2
  • 今天新安装了mysql5.7,配置完环境变量后,想启动它时却出现了以下异常: 网上查了下,解决方法如下: 删除my...
    柳轻言阅读 2,764评论 0 0