用 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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