Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么要研究游戏AI呢?

为什么要研究游戏AI呢?

作者头像
Datawhale
发布于 2021-11-23 07:30:38
发布于 2021-11-23 07:30:38
9120
举报
文章被收录于专栏:Datawhale专栏Datawhale专栏

AI作为时下计算机算法的超级巨星,在例如CV、NLP、语音、机器人等诸多领域都有广泛的应用。而在游戏领域,AI的应用往往被认为只是把游戏角色拟人化,算法的第一印象也通常是强化学习。但实际当中,AI在游戏中的应用却不止于此。本文就来介绍一下游戏领域的AI应用与算法。

首先摆在我们面前的是,为什么要研究游戏AI呢?

游戏可以看做现实问题的折射,研究它可以为解决现实问题提供有价值的样本;同时,游戏的算法永远不会被单单的几种算法所束缚,多种形式的AI方法可以分别或结合在不同的游戏中。更重要的,当然是因为它很有趣~!!!!:P

引用《AI与游戏》 中的话:

自 AI 的想法诞生以来,游戏一直为 AI 的研究过程提供助力。游戏不仅提出有趣且复杂的问题来供AI解决————例如去精通一个游戏;它们也为(人类,甚至机器)用户能够体验到的创意以及表达提供了一个画布。因此可以说,游戏是罕见的,是科学(解决问题)与艺术相碰撞并相互作用的领域,而这些因素也让游戏对于AI的研究来说成为一个独特并且优秀的环境。然而不仅是AI在游戏中提升,游戏也在AI研究中得到了发展。 ——《Artificial Intelligence and Games》

01 从游戏环节看AI应用

在游戏领域中,AI的应用其实并不仅仅是人们印象中的玩家型战斗AI。传统意义上的游戏制作融入了AI的方法之后在各个环节都催生了相应的应用与算法。如果我们将一款游戏拆开来看他的各个环节,这些AI的应用就变得直观起来。

1.1 游戏画面

在游戏制作的环节里,开发者需要制作相应角色的动画模型,来满足使用者在游戏内视觉上的需求,在传统的游戏制作上,通常需要一名专门游戏原画师来制作相应的内容,但是聚焦到游戏内角色们的表情与动作这些细节上时,动画的设计通常变得吃力不讨好起来,应用视觉AI可以将人们的动作投影到角色身上,生成相应的动作表情;而在环境的设计中,AI也可以起到相似的效果,通过输入现实的图片来得到相应的游戏画面。在这个问题上,CV中的机器学习方法例如姿态识别,表情识别,GAN等起到了关键性的作用。下面几个例子带你一窥AI是如何创造游戏画面的。

动作识别
动作识别
表情识别
表情识别
深度强化学习
深度强化学习
AlphaGo中基于蒙特卡洛搜索树的深度强化学习
AlphaGo中基于蒙特卡洛搜索树的深度强化学习
演化算法
演化算法

1.2 玩家型AI

该类型应该是最被大众所熟知的游戏AI类型,2017年AlphaGo击败世界围棋冠军李世石,2019年OpenAI Five击败DOTA2世界冠军OG证明了AI在游戏上的表现可以超越人类。而此类AI问题本质上可以看成是路径规划问题,即根据当前的游戏状态生成相应的动作序列。典型的以强化学习、深度强化学习为代表的游戏AI目前在国内的游戏工业界已被大量研究,在某些游戏类型例如棋牌类、回合制策略游戏中,蒙特卡洛搜索树(行为树)、演化算法、A*等在线学习算法也具有一定优势。

1.3 游戏内容

在这一方面的AI应用常常不为人所知,通常被称为Procedural Content Generation(PCG)。在游戏内容(地图)的产出上,以魔兽争霸3为例,一方面依赖于游戏本体制作时开发者制作的地图;另一方面依赖于社区玩家的自定义地图,而社区玩家内容又更是由玩家数量所决定,丰富且可行的游戏内容是吸引玩家入坑的重要保障。利用AI去生成可行的游戏内容是非常值得研究的方向。目前该方向的主流算法包括演化算法、GAN等

 AI生成游戏内容
AI生成游戏内容
 GAN的应用
GAN的应用

1.4 游戏初始化平衡

目前在卡牌类游戏中,为了初始化得到的卡牌或是环境相对平衡,在PVE游戏中体现为玩家可以战胜Bot,PVP游戏例如炉石传说、自走棋,防止出现双方卡牌差距过大导致输掉,可以利用AI来设计发牌的策略。该方向的主要算法为演化算法

 炉石中的演化算法平衡牌组
炉石中的演化算法平衡牌组

1.5 游戏测试

在游戏制作完成后,开发者们需要测试游戏内存在的bug,这毫无疑问是重要的,如果一款游戏存在大量的bug,对该游戏的评价和收益都会造成巨大的影响。而测试游戏需要大量的时间,在这一方面,测试专用的agent可以被设计来面对这一挑战,目前这一块的算法主要为蒙特卡洛搜索树、强化学习、深度强化学习等。

深度强化学习自动测试agent
深度强化学习自动测试agent

1.6 用户画像

在游戏的运营过程中,玩家在游戏内的行为会产生丰富且复杂的数据,这些数据内折射了玩家的行为,分析并合理利用这些数据可以提炼出有价值的信息,这些信息可以用作促进游戏更新更多玩家喜欢的内容,预测玩家的行为和喜好,检测作弊外挂等。这一种游戏中的数据分析问题被称为用户画像问题,利用合理的机器学习算法可以极大提升玩家的游戏体验。

用户画像分析
用户画像分析

02 AI应用在游戏中的详细分类

【硬核预警】下面将参考开篇提到的的《Artificial Intelligence and Games》,对游戏领域的AI从应用方法两方面做汇总介绍,在方法部分会涉及大量AI技术。

根据上图,AI在游戏中的具体应用可以大致划分为三个方向:

  • 利用AI玩游戏
  • 利用AI为玩家建模
  • 利用AI生成游戏内容

2.1 利用AI玩游戏

在游戏中建立bot。

(1)应用为导向

a.与玩家对抗/协作 依据数据和预算产生不同水平的agent,可以与玩家共同匹配作为PVE的NPC等提高玩家体验水平,由此引申的功能可以有动态难度调节,游戏自动平衡

b.游戏bug测试 在投入运行前,可以通过投入大量的有测试行为的agent进入游戏,根据其行动期间的log异常来得到一些bug,或是通过bot间的对战,依据一定的判定方法来得到版本数值平衡性分析

c.合成数据收集 在游戏投入运行得到一定的玩家数据前,可以使用agent的行动来得到仿真的玩家数据,例如阵型识别,胜率预测等数据。

d.产生更强力的agent 根据共同演化的方法,一系列基础的agent可以通过参数演化或者agent间对抗性的方法来催生性能更好的agent

e.寻路(Pathfinding) 寻路规划可以被视为AI动作序列输出的一种特例。在某些游戏例如马里奥中,寻路算法本身就构成了AI player。

(2)方法为导向

根据是否使用了游戏提供的仿真模型(即可根据目前的游戏状态以及可执行动作得到后续的帧的游戏状态可以将其分为Model-based与Model-free的agent。

a.Model Based(基于模型的agent)

  • Planning-based:最佳优先搜索(例如 ),蒙特卡洛树搜索,演化规划
  • 基于模型的强化学习

b.Model Free(无模型方法)

  • 静态类方法:状态机,行为树,基于效用(启发式)函数的AI方法
  • planning-based:STRIPS(符号化表示规划)

c.学习类方法

  • 强化学习:需要高度表格化表示。
  • 深度强化学习:基于游戏图像,不需要标记数据,但需要有游戏实时的奖励设置。
  • 演化算法:通过演化算法来更新神经网络结构和权重来达到最优化。
  • 模仿学习:根据玩家的数据来学习游戏的策略,基于游戏图像,需要玩家数据。
  • 逆强化学习:根据策略来学习游戏中的奖励分布。

2.2 利用AI生成游戏内容

就是PCG(Procedural content generation),利用AI的方法去协助设计游戏系统,前置要求是需要比较好的数据(包括数据的质量,数据的代表方式,数据的数量)和有代表性的评估方法(包括美学,可玩性,新奇性)。具体的应用方法需要进一步查阅资料。

(1)应用为导向

a.(辅助)生成游戏中的内容(影响规则):关卡、地图、物品、武器、任务、人物、规则等。

b.(辅助)生成游戏中的外观(不影响规则):人物外观,表情,武器外观,音效等。

c.辅助设计

d.修复地图bug:对无法抵达的死角做检测与替换等。

e.数据压缩:将游戏数据压缩到更小的尺寸。

(2)方法为导向

a.元胞自动机 使用领域规则根据随机初始状态生成大量不规则图形,可用于热量、雨水、液体流动、压力爆炸等环境系统建模,也可以生成洞窟等小型地图,但无法保证可控性

b.基于文法方法 定义一系列文法规则来生成内容。

c.基于搜索方法(通常为Evolutionary Algorithms,EA): 相较于机器学习的方法,搜索方法可以大大减少所需求的数据量,关键问题有例如需要确定较好的内容表示形式,需要有一种较好的评估手段。有以下几种分类:

  • EA类算法:遗传算法,演化策略,演化编程
  • EA like 算法:粒子群演算法,差分进化算法
  • content representation
  • 评估方法
    • 直接评估是通过某种函数去约束评估生成的内容,包括Theory-driven和Data-driven,区别在于评估函数是基于理论还是经验模型的。
    • 基于仿真是利用bot AI去进行游戏来评估游戏的内容。包括静态评估和动态评估,区别是评估函数是否会随着时间改变。
    • 互动评估属于实时评估,通过人类玩家的体验进行评价。包括隐式评估-通过玩家玩游戏产生的数据来分析内容好坏,以及显式评估- 玩家直接评分

d.机器学习方法 PCG研究的一个新方向是在现有内容上训练生成器,以便能够产生更多相同类型和风格的内容。这是受最近的深度神经网络研究结果的启发,其中生成式对抗网络和变异自动编码器等网络架构在学习生成卧室、猫或人脸等图像方面取得了很好的效果,同时也受到了早期研究结果的启发,其中较简单的学习机制如马尔科夫链和较复杂的架构如递归神经网络都在一些语料库的训练后学习生成文本和音乐。

  • 神经网络,包括GAN,AutoEncoder和NeuroEvolution等等。
  • 概率模型,包括决策树等

大致的PCGML数据代表方式与训练方法总结如下: 1.数据representation: - Sqquences: 利用顺序的向量来作为输入(输出)数据 - Grid: 使用2D的网格结构来作为输入(输出)数据 - Graph:使用原始图像作为输入(输出)数据 2.PCGML训练方法: - Backpropagation: 利用反向传播作为训练NN的方法来 - Evolution: 使用演化计算方法来训练NN或是直接生成结果 - Frequency Count:使用统计学与马尔科夫链变种来计算概率 - Expectation Maximization: 利用EA算法来训练无监督学习模型 - Matrix Factorization:矩阵因子化是一种数学方法来将输入的矩阵分解到更低维度的方法

e.将游戏生成内容与玩家体验结合(EDPCG,Expierience-driven PCG),它包括了三个核心方面: 情绪激发、情绪检测和情绪表达

  • 情绪激发: 游戏为激发情感提供了出色的背景构件,因为刺激是变化的,来自不同的来源,如图像、声音、故事等等。
  • 情绪检测: 游戏用户(玩家)通常更愿意提供更多的多模态性质的输入(通过传感器),只要这将导致体验的增强。从某种意义上说,玩家是情感计算和多模态交互研究的最佳用户。
  • 情绪表达: 用户在游戏中自愿经历一系列的体验:这些体验从非常积极的到非常消极的都有。同时,游戏中的情感体验是受玩家影响的! 因此,玩家习惯于并在很大程度上对基于情感的表达持开放态度!

2.3 利用AI为玩家建模

利用游戏产生的数据来为玩家建立体验行为模型(包括其消费预测,游戏性行为预测,体验感预测)或是进一步利用该数据来更新与描述游戏(例如平衡性分析,游戏流派,提供给Agent更多的训练数据)

以潜行恐怖游戏《Hello Neighbor》中的玩家建模例子。在这款游戏中,AI打造的领居会一直跟踪玩家,并从过去的错误中吸取教训,致力于打败玩家。

(1)应用为导向

a.理解玩家在游戏中的体验。AI可以根据玩家的体验感来评测游戏各个组件与系统; 辅助更新新的游戏活动; 辅助更新前两个AI系统。 b.理解玩家在游戏中的行为。AI辅助分析游戏行为,例如发掘一些新的游戏玩法;可以根据异常数据来判定外挂等作弊系统;形成可观的游戏数据来支持新的游戏AI迭代;辅助设计更具有公平性的匹配系统;预测玩家的行为;对玩家社交群体分类;分析玩家的性格

(2)方法为导向

a.经验VS行为(Experience vs Behavior)

  • Experience: 玩家在游戏过程中的感受,包括:一系列(合成的)感受、认知、行为状态,或是其他的用户状态,情绪和认知等
  • Behavior:玩家在游戏过程中的行为。

b.高级概念分类

  • model-based(理论驱动):从一些列玩家心理学、认知学的研究中得到一些玩家对应游戏的模型,来自上而下的设计游戏
  • model-free(数据驱动):不利用之前的学科研究来对玩家进行自下而上的建模,其中包括可视化,例如热力图来衡量玩家的活动频率。

c.监督学习 玩家建模包括寻找一个函数,将玩家的一组可测量的属性映射到特定的玩家状态。按照监督学习的方法,这是通过机器学习或自动调整模型的参数来实现的,以适应包含一组输入样本的数据集,每个样本与目标输出配对。输入样本对应于可测量的属性(或特征)列表,而目标输出对应于我们有兴趣学习预测的每个输入样本的玩家状态的注释。如前所述,注释可以从行为特征,如关卡或玩家原型的完成时间,到玩家经验的估计,如玩家的挫折感等。

d.无监督学习 很多时候,我们面临的数据集是没有关于玩家行为或经验状态的目标输出。在这种情况下,玩家的建模必须依靠无监督学习。无监督学习的重点是通过发现输入的关联,在没有获得目标输出的情况下,将模型与观察结果相匹配。输入通常被视为一组随机变量,通过观察输入向量之间的关联来建立模型。应用于玩家建模的无监督学习包括聚类和关联挖掘等任务。

参考

[1]Georgios N. Yannakakis and Julian Togelius. Lecture. Slide 3. Playing Games. [Online].http://gameaibook.org/lectures/

[2]Georgios N. Yannakakis and Julian Togelius. Lecture. Slide 4. Generating Content. [Online].http://gameaibook.org/lectures/

[3]Summerville, Adam, Sam Snodgrass, Matthew Guzdial, Christoffer Holmgård, Amy K. Hoover, Aaron Isaksen, Andy Nealen, and Julian Togelius. "Procedural content generation via machine learning (PCGML)." IEEE Transactions on Games 10, no. 3 (2018): 257-270. [pdf]

[4]Georgios N. Yannakakis and Julian Togelius. Lecture. Slide 5. Modeling Players. [Online].http://gameaibook.org/lectures/

GitHub: https://github.com/ls361664056

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Datawhale 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MongoDB GridFS
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。
为为为什么
2024/08/14
1130
MongoDB GridFS
MongoDB GridFS 怎么用
本文为2020年MongoDB应用案例与解决方案征集活动优秀应用案例:MongoDB在京东的应用,作者王勇。
MongoDB中文社区
2021/02/26
4.6K0
MongoDB实战(3)固定集合与Gri
capped collections 是性能出色的有着固定大小的集合,以 LRU(Least Recently Used 最近最少使用)规则和插入顺序进行 age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时要预先指定大小。如果空间用完,新添加的对象将会取代集合中最旧的对象。 可以插入及更新,但更新不能超出 collection 的大小,否则更新失败。不允许删除,但是可以调用 drop() 删除集合中的所有行,但是 drop 后需要显式地重建集合。
py3study
2020/01/15
6300
浅尝辄止MongoDB:GridFS
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/82894835
用户1148526
2019/05/25
6820
SpringBoot学习笔记(十一:使用MongoDB存储文件 )
MongoDB是一个面向文档的数据库,使用BSON(Binary JSON:二进制JSON)格式来存储数据。
三分恶
2020/07/16
3.5K1
spring-data-mongodb之gridfs
mongodb除了能够存储大量的数据外,还内置了一个非常好用的文件系统。 基于mongodb集群的优势,GridFS当然也是分布式的,而且备份也方便。 当用户把文件上传到GridFS后,文件会被分割成大小为256KB的块,并单独存放。 好处如下: 可以有Replication; 可以利用MongoDB的权限访问控制; 可以利用现成的MongoDB备份方式; 今天主要是学习如何使用data这个框架来操作GridFS,首先配置gridFs的模板类 <!-- Mongodb gridFs的模板 --> <bea
猿天地
2018/04/03
2K0
MONGODB GridFS 存储文件 与 文件系统存储,你有何优势让我放弃文件系统?
是在抱歉,本应该周五是其他数据库,周一到周四都是 postgresql , mysql ,但目前的状态下,(都不知道今天是星期几)暂时不在准守这样的设置,以后待稳定后,在恢复原来的“人设”。
AustinDatabases
2020/02/21
3.4K0
MONGODB  GridFS 存储文件 与 文件系统存储,你有何优势让我放弃文件系统?
基于MongoDB GridFS的图片存储
它是mongodb的一个子模块,使用GridFS可以基于mongodb来持久存储文件.并且支持分布式应用(文件分布存储和读取).GridFS是mongodb中用户存储大对象的工具,对于mongodb,BSON格式的数据(文档)存储有尺寸限制,最大为16M.但是在实际系统开发中,经常会有上传图片或者文件的功能,这些文件可能尺寸会很大..我们可以借用Gridfs来辅助实现这些文件的管理. Mongo GFS的文件表是由 表名.files和 表名.chunks 构成,前者是文件信息构成,后者是文件的内容,两者通过
张善友
2018/01/22
3.1K0
.NET MongoDB Driver GridFS 2.2原理及使用示例
一、API解读 1 GridFSBucketOptions 1)public string BucketName { get; set; } 获取或设置bucket名称 2)public int ChunkSizeBytes { get; set; } 获取或设置块的字节大小 3)public ReadConcern ReadConcern { get; set; } 获取或设置读关注 4)public ReadPreference ReadPreference { get; set; } 获取或设置读优先
甜橙很酸
2018/03/08
9610
.NET MongoDB Driver GridFS 2.2原理及使用示例
MongoDB-分片片键
分片是什么?分片就是将数据存储在多个机器上。当数据集超过单台服务器的容量,服务器的内存,磁盘IO都会有问题,即超过单台服务器的性能瓶颈。此时有两种解决方案,垂直扩展和水平扩展(分片)。
林老师带你学编程
2019/05/25
1.4K0
恕我直言,牛逼哄哄的MongoDB你可能只会30%
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
猿天地
2020/02/13
1.3K0
恕我直言,牛逼哄哄的MongoDB你可能只会30%
MongoDB 介绍和操作
MongoDB 和 Redis 一样均为 key-value 存储系统,它具有以下特点:
IT茂茂
2020/03/05
4.5K0
MongoDB 介绍和操作
mongodb 内存引擎及配置
上次我们分享到了 wiredTiger 引擎以及他对于以前默认的 MMAPV1 引擎的优势
阿兵云原生
2023/02/16
1.1K0
golang mongoDB GridFS查询 存储 删除文件
GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等),如果没有超过16m大小可以将数据保存在BSON数据中。 GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。
地球流浪猫
2018/08/02
3.2K0
golang mongoDB GridFS查询 存储 删除文件
GridFS使用及配合nginx实现文件服务
本文介绍了GridFS的使用和如何配合Nginx实现文件服务。GridFS是一种用于存储大型文件的技术,可以将大文件切分为多个小文件进行存储。配合Nginx使用,可以实现在HTTP服务器上直接对文件进行读取,从而摆脱对存储设备的依赖。
用户1141560
2017/12/25
2.9K0
GridFS使用及配合nginx实现文件服务
MongoDB中的限制与阈值
最大文档大小有助于确保单个文档不会使用过多的RAM或在传输过程中占用过多的带宽。要存储大于该限制的文档,MongoDB提供了GridFS API。有关GridFS的更多信息,请参阅mongofiles和驱动程序的文档。
MongoDB中文社区
2021/06/10
14.3K0
mongodb百亿数据存储(mysql数据库并发量)
由于MongoDB中的Bson对象大小是有限制的,在1.7版本以前单个Bson对象最大容量为4M,1.7版本以后单个Bson对象最大容量为16M[5]。对于一般的文件存储,单个对象的4到16M的存储容量能够满足需求,但无法满足对于一些大文件的存储,如高清图片、设计图纸、视频等,因此在海量数据存储方面,MongoDB提供了内置的Grid
全栈程序员站长
2022/07/30
4K0
mongodb百亿数据存储(mysql数据库并发量)
MongodbGFS存储大文件(java版)
Mongodb 是一个开源的no-sql分布式数据库,Mongodb也为我们提供了基于文件的GFS分布式存储系统。因此利用Mongodb我们完全可以实现一个分布式的文件存储以及管理。
林老师带你学编程
2019/05/25
2K0
MongoDb简介
知识点名 "什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 分布式系统 分布式系统(distributed system)由多台计算机和通
爱喝水的木子
2022/01/12
3.8K0
SpringBoot上传文件实现
上传文件需求也是日常开发必不可少的操作,今天就稍微总结下,一般如果是上传图片操作,很多稍微大点的公司都有专门的图片服务器可直接将图片上传至那边即可,如果没有图片服务器的话,那么此处把图片也一并归为文件进行讲解。本文代码以springBoot为准
全栈程序员站长
2022/06/29
8820
SpringBoot上传文件实现
推荐阅读
相关推荐
MongoDB GridFS
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档