首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工欲善其事必先利其器 : 游戏 AI 环境对比

工欲善其事必先利其器 : 游戏 AI 环境对比

原创
作者头像
AlgorithmDog
修改2017-11-14 11:46:12
1.1K0
修改2017-11-14 11:46:12
举报

前言

DeepMind 发表 DQN 算法在 Atari 游戏上超过人类之后,游戏 AI 研究迅速成为了研究热点。游戏 AI 研究火热的一个侧面是游戏 AI 环境推陈出新,层出不穷。OpenAI Gym/Universe、ELF 和 SC2LE 等高水准的游戏 AI 环境相继问世。

1. 游戏 AI 环境简介

游戏 AI 环境包括游戏和适应 AI 调用的 API 接口。现在的游戏 AI 环境可以分为两类:单一游戏 AI 环境和集成游戏 AI 环境。单一游戏 AI 环境是指针对一个游戏构建的游戏 AI 环境。因为针对星际争霸的实在太有名了,我将之单独作为一类。其中 TorchCraft 是 FaceBook 基于星际争霸 I 的做的,后来阿里在上面加了 Python 接口推出了 TorchCraft-py。SC2LE 则是 DeepMind 和暴雪合作,基于星际争霸 II 推出的。另外 Malmo 是基于 MineCraft,ViDoom 是第一人称射击类,Maze 是一个简单的即时策略游戏 (RTS),TorCS 是赛车模拟游戏。集成游戏 AI 环境则是指游戏 AI 环境拥有多款游戏,比较有名的集成游戏 AI 环境有 OpenAI Gym/Universe 和 ELF。

[1510124796507_4163_1510124842037.png]
[1510124796507_4163_1510124842037.png]

除了这种划分标准,我们还有一种划分标准——游戏目的。1)大部分游戏 AI 环境是对现有游戏进行改造;这些现有游戏是专业游戏团队建立的,游戏目的是人们的娱乐。2)但是也有少部分研究者认为,现有游戏并不适合做 AI 训练,因此自己设计和实现游戏从而建立游戏 AI 环境;Maze 和 ELF 就是这种思路的代表;游戏目的是研究。

2. OpenAI Gym/Universe

OpenAI Gym 是 OpenAI 发布的对比测试深度强化学习的框架,其框架是标准强化学习的框架,如下所示。

[1510124825240_6447_1510124870659.png]
[1510124825240_6447_1510124870659.png]

OpenAI Gym 的用法简单明了。

[1510124839507_6213_1510124884967.jpg]
[1510124839507_6213_1510124884967.jpg]
  

后来 OpenAI 又发布了一套工具,方便开发人员将世界上的游戏移植到 OpenAI Gym 上,并使用这套工具移植超过 1 千款游戏。这便是 Universe。OpenAI 的官博宣称:Universe 是一个能在世界上所有的游戏、网站和其他应用中,衡量和训练 AI 通用智能的软件平台。这样宣称是基于有了这套工具,就有了将世界上所有游戏移植到 OpenAI Gym 的潜力。。。

OpenAI Gym/Universe 有一些问题。其中一个就是现有算法能够在大部分 OpenAI Gym/Universe 游戏超过人类。换而言之,OpenAI Gym/Universe 大部分游戏在学术上处于 Solved 状态。这让 OpenAI Gym/Universe 的学术价值没有那么大了。不过,OpenAI Gym/Universe 游戏依然能够为新算法提供测试场景。毕竟新算法在 Solved 的问题上比旧算法高效很多,也很有学术价值。但游戏 AI 研究的两大重镇:DeepMind 和 FaceBook 都自己搞一套,没在 OpenAI Gym/Universe 做实验。

3. ELF

ELF 是 FaceBook 推出的游戏 AI 环境,包括围棋和 ALF(一个 Atari 游戏集)。除此之外,ELF 还实现了一个 RTS 游戏引擎,在这个引擎的基础上实现了一个夺旗游戏、一个塔防游戏和一个 mini-RTS。围棋和 ALF 是点缀,ELF 的重心是 RTS 游戏引擎上的 mini-RTS。

[1510124912446_4575_1510124958004.png]
[1510124912446_4575_1510124958004.png]

ELF 用 C++ 将许多并行的游戏线程和每个线程的历史数据封装进去,每次 Python 循环时都可以得到一批次的游戏状态。这样做有两个好处:Python 操作简便,不需要考虑分布式多线程的问题;同时 C ++ 实现的游戏引擎效率高。

[1510124929823_8887_1510124975271.jpg]
[1510124929823_8887_1510124975271.jpg]

在 ELF 的 mini-RTS 中,作者内置了一款基于规则的 AI, 同时实现了基于 A3C 强化学习的算法基线。从下面的对比图,我们可以看出 A3C 的效果要比基于规则的 AI。

[1510124950076_3101_1510124995533.jpg]
[1510124950076_3101_1510124995533.jpg]

ELF 作者关心重点是 ELF 的效率,强调高速的游戏 AI 环境对提升游戏 AI 研究的迭代有重要意义。从下面对比图来看,ELF 的效率非常高,速度比其他游戏 AI 环境高了不少。ELF 为了研究去设计和实现游戏,可以控制游戏复杂,并且做很多框架和实现上的优化,从而实现极高的运行效率。

[1510124964911_7073_1510125010368.jpg]
[1510124964911_7073_1510125010368.jpg]

4. SC2LE

2017 年 8 月 10 号,DeepMind 联合暴雪发布了星际争霸 II 游戏 AI 环境 SC2LE, 其框架如下所示。

[1510124994055_9813_1510125039524.png]
[1510124994055_9813_1510125039524.png]

这是标准的游戏 AI 环境的框架。对于一个复杂的游戏 AI 环境框架来说,三个问题需要得到解决:怎么抽象状态,怎么处理奖励和怎么抽象动作。对于怎么处理状态,SC2LE 使用三个部分的信息,分别是小地图、全地图和非空间信息。所谓非空间信息包括资源拥有量、科技树和建造队列等信息。

[1510125009968_2733_1510125055423.jpg]
[1510125009968_2733_1510125055423.jpg]

SC2LE 有两种奖励函数。一种是依照最终结果(1/胜,0/平,-1/负);另一种是基于暴雪给的 Bllizzard 分(资源采集量、科技树升级、单位、建筑的加权和),通过API可以实时获取。显而易见,第一种奖励和我们的目标一致,但太稀疏了;第二种则反之。

因为星际争霸的动作实在太多太杂,怎么抽象动作是 SC2LE 的一个重点。SC2LE 将星际争霸的动作空间整理成近 300 个动作函数,每个函数有相应的参数,参数一共有 13 种类型。比如在下图中,圈选一部分单位的函数为 select_rect, 两个整数参数表示选择矩阵的两个坐标点。

[1510125034382_8149_1510125079830.png]
[1510125034382_8149_1510125079830.png]

游戏 AI 打星际争霸是非常难的任务,因此除了完整 1v1 游戏之外,SC2LE 还很贴心地提供了 7 种迷你游戏,包括指定位置移动、两个机枪兵收集水晶矿碎片、击败小狗、击败小狗和爆虫、收集资源、造机枪兵。虽然这种贴心到最后除了进一步证明了现有算法的渣,并没有什么卵用。。。

为了验证 SC2LE 的效果并提供基线,SC2LE 提供了三个基于深度强化学习的基线方法。其中两个方法的网络结构分别是 Atari-net 和 FullyConv,第三个方法是 FullyConv 加 LSTM。

[1510125120977_9817_1510125166511.png]
[1510125120977_9817_1510125166511.png]

我们可以看到三种方法都被人打成狗了。。

[1510125134006_9997_1510125179458.png]
[1510125134006_9997_1510125179458.png]
  

完整游戏打不过人,那试一试迷你游戏模式。从下图可以看出,稍微复杂一点的迷你游戏上,这三种方法被人远远地超越了。图中 DeepMind Human Player 是 DeepMind 的一位员工,而 StarCraft Grand Master 是一名专业选手。

[1510125147709_1203_1510125193204.png]
[1510125147709_1203_1510125193204.png]

从上面的结果来看,现有算法对于 RTS 无解,RTS 游戏是学术上 Un-Solved 的问题。在这里,我们可以看出 “为了研究设计和实现游戏” 做法的缺陷了:ELF 论文里面有实现基于规则和基于 A3C 的游戏 AI, 并报告了实验对比;但我们还是会困惑现有算法到底达到什么水平,和人类相比怎么样; ELF 中的 mini-RTS 本身比较简单同时没有大量人类玩的经验和技巧,因此无法给我们解答这些困惑。但 SC2LE 不一样,星际争霸 II 是被广泛接受,并有大量人类体验的实际游戏。在星际争霸上,算法和人类对弈,人们对算法的水平立马就有一个直观的感知。

5. 总结

游戏 AI 环境推陈出新,层出不穷,得利于如火如荼的游戏 AI 研究。现在游戏 AI 环境极大丰富,就看游戏 AI 算法是在短期突破,还是长久守望了。

最后有一点私货:目前我在和小伙伴们开发非完美信息游戏 AI 环境:RoomAI ( https://github.com/roomai/RoomAI )。RoomAI 的目标是提供一些非完美信息游戏环境和一些基线模型算法,方便 AI 开发人员快速地构建、测试和对比自己的非完美信息游戏 AI 算法。目前 RoomAI 已经支持德州、梭哈和七鬼,基本流程如下所示:玩家 AI 获得游戏环境给出的信息,当前玩家 AI 选择合适的动作,游戏环境根据该动作推进游戏逻辑;重复上述过程,直到分出胜负。

[1510125176405_1571_1510125221853.png]
[1510125176405_1571_1510125221853.png]

RoomAI 的用法也是简单明了,下面是一个随机玩家的示例。

from roomai.kuhn import *;
import roomai.common
import random
#### Define your player Bot ####
class KuhnPokerExamplePlayer(roomai.common.AbstractPlayer):
    def receive_info(self, info):
        if info.person_state.available_actions is not None:
            self.actions = info.person_state.available_actions  
         
    def take_action(self):
        idx = int(random.random() * len(self.actions))
        return self.available_actions.values()[idx]
        
    def reset(self):
        pass

if __name__ == "__main__":
    #### init ####
    env     = KuhnPokerEnv()
    players = [KuhnPokerExamplePlayer() for i in range(2)]

    #### playing ####
    scores = KuhnPokerEnv.compete(env, players) 
    print (scores)      

如果对 RoomAI ( https://github.com/roomai/RoomAI )项目有兴趣,欢迎同学们关注并 Star。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. 游戏 AI 环境简介
  • 2. OpenAI Gym/Universe
  • 3. ELF
  • 4. SC2LE
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档