如何提升游戏中机器人的表现?

作者:GWB-腾讯独立游戏孵化器
2020-07-15
10 12 0

本文主笔:Jian

其他作者:John、Booker

一、前言

FPS(第一人称射击游戏)中的 AI 实现多年来一直沿用着状态机和行为树。策划和程序员充分利用这两个工具,做出了大量玩法,创造了许多新颖而有趣的模式。但绝大多数的 FPS 类游戏都是偏竞技的。而竞技类的游戏是零和的游戏,有人赢,就必然有人输。绝大部分的玩家不可能像职业玩家那样不停地训练和比赛来不断提升自己的技术水平;基本上是技术练到一定的阶段后,就处于长期停滞状态。挑战高手会被虐得很惨,玩弄新手实在没有什么成就感。游戏高峰过去后,想要随时找到水平相当的队友和对手,都是比较困难的事情。在水平不等的情况下,游戏的乐趣会逐渐降低,逐渐地玩家开始流失。

为此,各项目都做过很多尝试。一是优化匹配算法,高峰期效果不错,但在低谷期,由于整个游戏池中的总玩家数不足,匹配到水平相当的对手很困难。二是在匹配无法平衡时,补充一些机器人到比赛房间中。常规的技术还是利用行为树来模拟玩家,策划的同学往往要写大量的行为树伪代码来实现一个模式或一张地图。然而行为树是一种基于规则的算法,即使加上一些随机扰动,这些规则都很容易被玩家发现。往往行为树版本的拟人机器人上线后会被玩家吐槽,他们会认为自己被欺骗了。

有没有新的方法来提升机器人的表现,从而提升玩家的满意度呢?我们把方向瞄准了最近几年蓬勃发展的深度学习。

近年来,随着人工智能的发展,深度学习技术已成功应用于图像、语音、自然语言等领域。比如基于 ImageNet 进行的图片分类比赛[7],基于人脸识别的智能安防系统,Google 利用深度学习技术降低 Android 系统语音识别错误率,提升机器翻译的流畅度等等。

深度学习技术应用于游戏领域,业界也有不少成功的例子,比如 DeepMind 开发的 Atari 游戏 AI 能够同时掌握 7 种游戏的玩法,并在 3 种游戏中超过人类专业玩家[1];DeepMind 开发的 StarCraft II 游戏 AI AlphaStar 在 2019 年 1 月成功挑战职业选手[2];OpenAI 开发的 Dota2 游戏 AI OpenAI Five 在 2019 年 4 月战胜职业选手[3];Tencent 开发的王者荣耀游戏 AI 绝悟在 2019 年 8 月通过电竞职业水平测试[4]。但是这些游戏中的场景都是 2D 的,而 FPS 类游戏通常都是 3D 的。FPS 类游戏与这些游戏的不同之处,以王者荣耀为例,总结如图 1。 

图 1:FPS 类游戏与 MOBA/RTS 类游戏的区别

FPS 类游戏为非完全视野,且存在多个敌人和多个队友,视野内敌人和视野外敌人如何建模?敌人从视野内短暂消失,玩家在视野外受到伤害时,敌人的特征如何表达?和队友之间如何配合?怎么在高效的表示 3D 环境信息的同时降低计算复杂度?AI 的动作空间如何设计?这些都是值得思考的问题。

业界和学术界有一些将深度学习应用于 FPS 类游戏的例子,比如由 Poznan University of Technology 举办的 Vizdoom 比赛[5],DeepMind 开发的 Quake III Arena 游戏 AI[6]。但是它们的输入都是纯图像,而且评价标准是竞技。对于 FPS 类游戏来说,如果只是追求竞技的胜利是非常容易的,只要计算好自己的枪口和敌人头部之间的一个三维向量,就可以枪枪爆头,这样 AI 就变成外挂了。因此,我们提出 FPS 类游戏 AI 的评价标准是拟人,即希望 AI 能像人一样和环境发生合理的交互,比如利用地形、障碍物,根据对手和同伴的状态决定后续操作等等。

能否将深度学习技术应用于 FPS 类游戏,来帮助策划和程序员高效地制作出不容易被玩家发现的拟人化 AI,是一个我们希望去解决的问题。

二、初步尝试

2018 年下半年,项目组和 AI 平台部基于全军出击手游开始了第一次尝试。这次尝试基于 5km * 5km 的全军出击地图进行,如图 2 所示。采用基于图像和属性特征相结合的监督学习方案。

图 2:全军出击地图

这是 AI 在 FPS 的初步尝试,实话实说,当时项目组和 AI 同学都没有明确 FPS AI 的方向是什么,根据业界的经验,大家的目标还是偏向于竞技和胜利。

采用的基于图像识别的方法需要采集从客户端的图像数据处理后得到游戏的状态,这个过程过于复杂,消耗的资源也很多,整个项目迭代很慢。加上后来业务调整,没能积累足够的数据来支撑模型的训练,以及问题复杂度确实太高 ,尝试终止。

问题复杂度高有几个方面引起:一是地图范围太大,对深度神经网络的表达与记忆能力有很大的挑战;二是环境复杂,地图中有大量动态物体,如汽车、摩托车、船、包裹等等,对环境和物体的特征表示,挑战也很大;三是巨大的动作空间,由于战术竞技复杂的游戏逻辑,真实的物理场景,需要 AI 对环境做出大量不同的反应,如开门、关门、开车、游泳、蹲、跑、爬等等。

三、新方案

2019 年春节后,项目组正式和 AI 平台部/智能 NPC 中心开始新的一轮深度学习在游戏中落地的尝试。总结了一些之前的经验。首先明确了几个规则:

  • 项目共同开发,代码开源共享;
  • 项目组开发的 FPS 游戏是基于全服务器信任的,服务器拥有所有的游戏信息,包括地图,模式,玩家的移动,开火,命中并做结果判定; 无需使用客户端图形进行间接分析和判断。这样可以大量地减少图像处理对资源的消耗。同时 AI 可以获得全局信息,而不是仅仅只有单个玩家的信息(后期会限制 AI 获得非相关信息);
  • 第一目标是拟人化,优先采用监督学习方案;
  • 基于全军出击的复杂度问题,这次确定的方案是地图由小到大,玩法从简单到复杂。因此选择了 CFM 团队模式中的运输船作为基准地图(地图大小:10m * 32m)。这是一张 5v5 小型地图,玩法相对简单,地图是一个相对封闭的空间,没有载具,在团队模式中使用率最高;
  • 由于 CFM 已经稳定运行多年,并且日常开发工作繁重,游戏玩法逻辑服务器 DS 代码接近 100w 行,如果再整合 AIServer 为一体,则无法保证系统的稳定性和可靠性。因此,决定将 AI 作为一个“客户端”接入到游戏服务器,而不是将 AI 整合到游戏服务器中。现有的游戏逻辑服务器仅仅需要做极轻微的改动就可以接入 AI。当然,我们需要开发一些附加的独立模块来支持 AI。

图 3:系统架构图

其中:

  • GameD 作为一个模拟客户端加入 DS 的房间;
  • 将 DS 发送给客户端的协议转换为 AI Server 的协议;
  • AI Server 加载训练好的模型,根据 GameD 发送的协议和自己需要的其他信息提取特征数据,预测后将结果返回给 GameD;
  • 预测的结果是 8 个方向的移动,上下左右视角变化,跳跃,蹲下,开火,换枪等基本操作;
  • GameD 把这些基本操作和地图信息一起进行物理计算后,转换为相应的协议发送给 DS。

四、第一次 5V5 的开发

项目在 2019 年 3 月初立项,设定的目标是希望在 4 月能够搭建好完整的离线流程,实现基础版 demo;5 月能够实现具有躲闪、跳跃、扔雷等高级操作的优化版 demo。

4.1 建模

我们直接基于真实的 5v5 模式进行设计、建模,搭建相关的数据处理、模型训练流程。问题的动作空间、状态空间的建模如图 4、5 所示,其中所有的子任务都建模为分类问题。 

图 4:动作空间建模

图 5:状态空间建模


4.2 业务流程的建立

在搭建模型的同时,其他配套系统也在同时并行开发,包括日志处理、 GameD 开发、客户端日构建接入、回放工具等。整个流程逐步建立。同时在 3 个月的时间内积累了 100w 对局日志。

4.3 效果不佳

5 月份,完成了第一个 5v5 版本,视野全透视,不考虑障碍物遮挡,经过策划同学的几轮体验后,总结了这个版本。

优点:

已经展现了初步的拟人功能,主要表现为:

  • 利用掩体躲闪,
  • 顺利跳上箱子,
  • 在箱子后预判穿箱开火,
  • 在高频对射点预瞄敌人,
  • 在蹲人点等待敌人。

缺点也很明显:

  • 存在透视现象
  • 对敌人尸体开火
  • 存在视野内有多个目标时来回切换

  • 对视野外的伤害感知弱

  • 敌人擦肩而过无感知等明显问题


项目组经过分析后找到问题所在:5v5 对战变量太多,直接训练 5v5 模型对于初期的拟人化目标而言还是太复杂。

五、基础的 1V1

根据 5v5 版本出现的问题,我们决定暂停 5v5,转移到更基础 1v1。着重解决单个 AI 的拟人化表现,通过 1 个真人玩家反复观察和互动,逐步解决 AI 出现的问题。同时简化了枪械,只支持步枪,暂时屏蔽狙,投掷和近战武器。

5.1 模型的调整

沿用前面对动作空间、状态空间的建模方式,同时将视野设置为考虑障碍物遮挡的 360 度可见,针对 1v1 模式,设计了如图 6 所示的模型结构。

图 6. 1v1 模型结构

对于状态空间,使用了多条 3D 实时射线来感知周围的环境,包括静态环境和动态环境(敌人),输入使用单帧输入,不考虑历史信息。

由于整个对局只存在 1 个敌人不存在多目标选择的问题,且使用了考虑障碍物遮挡的 360 度可见,AI 对视野外伤害,和擦肩而过感知等问题得到明显改善,但是也出现了新的问题。例如:徘徊问题。

基于真实玩家的 30w 对局数据进行了模型训练,存在太刚、特定情况下长时间左右徘徊的问题。对于前者,我们通过优化样本数据进行了缓解;对于后者,通过分析,我们发现是因为输入的特征出现了周期性变化,同时模型对于相同的输入只会产生相同的输出,导致视角子任务的输出无法打破循环。

AI 在同一个状态下存在多个合理的决策,如图 8 所示,在状态 A,为了绕过障碍物树,既可以通过右转到状态 B 实现,也可以通过左转到状态 C 实现。视角子任务与其类似,这种问题被称为多值问题。

图 7:多值问题示意图

对于多值问题,混合密度网络[8-10]是一个比较优雅的解决方案。通过将视角子任务的建模方式由分类任务替换为多个高斯分布建模,预测时按分布概率采样,增加 AI 行为的多样性,模型表现没有明显的问题,得到策划的认可。

随着问题的逐步解决,AI 的表现越来越好。

5.2 复杂问题逐步解决

通过 1v1 模式的解决,初步验证了问题建模的有效性,包括动作空间、状态空间等。接下来我们重新去应对 5v5 模式。与 1v1 模式相比,5v5 模式有如下明显的不同。

表 1. 5v5 模式 vs 1v1 模式

针对上面的不同,我们设计了如图 8 所示的模型结构。

图 8. 5v5 模型结构

基于百万级别的对局数据,1v1 中使用 360 度视野规避了视野外伤害无感知和敌人擦肩而过无感知的问题。在 5v5 中这种视野建模方式不再有效,主要原因有:

1)从训练数据上来看,玩家主要关注的是正前方的敌人,而非背后的敌人。

2)背后受到伤害特征只会持续一帧,AI 无法持续决策转身攻击。

3)为此,AI 视野建模改为真实玩家视野建模,同时在数据层面删除了受到伤害短时间死亡的帧,在模型层面引入了目标选择辅助任务,在特征层面加入了对历史信息的建模,基本解决了视野内有多个目标时来回切换,对视野外的伤害无感知,敌人擦肩而过无感知等问题。

模型效果在 7 月中旬得到了策划的认可。后续我们又增加了对多武器的支持,比如狙击枪、手雷等。到 7 月底,包含多武器的模型效果得到策划的认可。 

5.3 扩展和上线之路

5v5 模式的效果得到认可后,我们决定将新 AI 上线,接受更多真实玩家的体验。

经过 1 个多月的准备、测试,基于运输船开发的新 AI 于 9 月 14 日上线千人体验服。86.6%的玩家认为新 AI 比行为树 AI 的体验更好,多样化的行为让玩家比较惊喜。

图 9. 体验服玩家反馈

为了验证整套方案的扩展性,又经过将近 2 个月的开发、优化、测试,我们完成了基于中型地图恐龙博物馆(地图大小:20m * 40m)的新 AI 构建,并和运输船一起于 11 月 22 日上线正式服,全量替换行为树 AI。玩家对局次数、对局时长分别提升 34%、29%,40%左右的玩家 认为 AI 局没有 AI(真人局中有 30%的玩家认为有 AI)。

在 2020 春节版本中,我们又扩展了 4 张地图:清新椰岛、巷战 TD、沙漠对决、军事基地,而且基于沙漠对决地图构建了一个明星 AI。


玩家水平处于游戏中的 top 30%,对 AI 比较敏感,投放会面向大量中低端玩家。

5.4 工具建设

  • 对局日志回放工具,用于确认数据选取、模型表现是否有问题

  • 选点定位工具,用于进行区域数据分析,如下图

图 10. 选点定位工具
  • 标签分布工具,用于标签不平衡直观观察

图 11. 单任务标签分布

六、展望

6.1 强化方案

由于 CFM 有几十上百张地图,不是每张地图都有足够的玩家数据用来支撑监督学习的训练。基于纯玩家数据的训练时间和人力成本太高。为此,我们探索了基于强化学习,辅以少量玩家数据的方案,目前也取得了不错的效果。为后续覆盖更多地图提供了另一种选择。

6.2 更多的玩法支持

FPS 玩法众多,后续规划了爆破,生化,生存等模式。

6.3 预测性能的优化

预测目前使用的是 python 方案。Python 在线上性能不佳,单反服务器的承载非常有限。项目组和 AI 平台部团队正合作开发高性能的 Ai Server,2020 一季度可以上线。

经过近 1 年的努力,我们基于穿越火线手游,探索了一套可行的在 FPS 类游戏中构建拟人化 AI 的方案,并得到真实玩家的认可。这是业内第一个深度学习在 FPS 游戏中实际上线的案例。同时,由于技术的突破,给产品带来了更多的拓展空间。

有几点经验分享给正在或是准备进行 AI 落地的项目同学:

  • 明确 AI 在项目中的作用;
  • 选择合适的技术,不一定是最前沿或最先进的;
  • 从最简单的地方开始,逐步深入;
  • 项目组和 AI 团队开源协同,发挥各自所长;
  • 工具建设要跟上;
  • 工程落地最终还是要考虑效率和成本。

最后,欢迎大家来体验 CFM 新一代的 AI。

参考资料:


关于腾讯游戏学院专家团

如果你的游戏也富有想法充满创意,如果你的团队现在也遇到了一些开发瓶颈,那么欢迎你来联系我们。腾讯游戏学院聚集了腾讯及行业内策划、美术、程序等领域的游戏专家,我们将为全世界的创意游戏团队提供专业的技术指导和游戏调优建议,解决团队在开发过程中遇到的一系列问题。

申请专家资源请前往:https://gwb.tencent.com/cn/tutor

近期点赞的会员

 分享这篇文章

GWB-腾讯独立游戏孵化器 

腾讯游戏学堂 · 游戏扶持业务致力于为创意游戏团队提供研发指导、技术支持、资金对接和发行推广等全方位服务,帮助团队打磨游戏品质,打造精品游戏! 

您可能还会对这些文章感兴趣

参与此文章的讨论

暂无关于此文章的评论。

您需要登录或者注册后才能发表评论

登录/注册