为什么要研究游戏 AI 呢?
作者 | 叶鑫
来源 | 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中基于蒙特卡洛搜索树的深度强化学习
▲ 演化算法
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生成游戏内容
▲ GAN的应用
1.4 游戏初始化平衡
目前在卡牌类游戏中,为了初始化得到的卡牌或是环境相对平衡,在PVE游戏中体现为玩家可以战胜Bot,PVP游戏例如炉石传说、自走棋,防止出现双方卡牌差距过大导致输掉,可以利用AI来设计发牌的策略。该方向的主要算法为演化算法。
▲ 炉石中的演化算法平衡牌组
1.5 游戏测试
在游戏制作完成后,开发者们需要测试游戏内存在的bug,这毫无疑问是重要的,如果一款游戏存在大量的bug,对该游戏的评价和收益都会造成巨大的影响。而测试游戏需要大量的时间,在这一方面,测试专用的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/
往
期
回
顾
资讯
OpenAI真的open了,更加开放
资讯
人工智能监考VS传统方式监考
资讯
Meta研发触觉手套助力元宇宙
资讯
自动驾驶图书馆,热爱阅读的er
分享
点收藏
点点赞
点在看
相关文章:

oracle 工具:tkprof
https://docs.oracle.com/cd/B10501_01/server.920/a96533/ex_plan.htm http://blog.csdn.net/dba_waterbin/article/details/8010629 oracle sql执行计划怎么看 https://zhidao.baidu.com/question/1178766860347033659.html

Linux环境编程--文件基本操作
Linux 下目录是/这样的 而windows是\怎么记呢?\和w是不是一样的反向?所以Linux的目录就是反的反向,好记了。 一:open函数名称:open目标:打开一个文件。头文件:#include <sys/types.h>#in…

Firefox插件
为什么80%的码农都做不了架构师?>>> 网站优化必备的9个Firefox插件 在网页设计制作中经常使用到的火狐浏览器插件工具: 1. Firebug Firebug是开发人员们钟爱火狐浏览器的一个重要原因,Firebug是火狐浏览器上一个集成式的强大调试…

马斯克公开支持“上班摸鱼”:让工作更愉快!
整理 | 王晓曼出品 | 程序人生 (ID:coder _life)11月16日,在国美集团批评员工上班摸鱼的通报中,一名员工在网易云音乐上使用了22.5G的流量格外显眼。11月18日,网易云音乐也紧跟热点上线了摸鱼计算器活动&am…

瀚思首发三款产品 推动大数据安全战略布局
安全已成为了当下社会最为关注的几个问题之一,随着大数据时代的来临,如今的安全问题也变得严峻和复杂。近日,HanSight瀚思在北京召开了产品战略暨融资发布会,推出了瀚思用户行为分析系统(HanSight UBA)、瀚…

Linux环境编程--编辑器基本操作
vim使用 新建文件 #vim hello.c 插入模式 按下I键,底下出现- - 插入- - 换行:按下Enter 删除字符:普通模式下按x 删除整行:按dd 恢复删除:按u 取消命令: CtrlR 对U后果弥补 复制:y y2w复制2个…

2021 IDEA大会开启AI思想盛宴,用“创业精神”做科研
11月22日上午10时许,由深圳市福田区人民政府、深圳市福田区科技创新局和粤港澳大湾区数字经济研究院(International Digital Economy Academy, 简称“IDEA”)联合举办的2021 IDEA大会在深圳福田开幕。大会以“The World Needs a Few Good IDE…

Android不同分辨率和不同密度适配
官方原文地址:http://developer.android.com/training/multiscreen/screendensities.html 本文主要介绍: 1.dip dp sp 简单用法 2.适配不同分辨率屏幕图片的处理方法 支持不同的密度或分辨率 本课介绍如何通过提供不同的资源和使用的测量分辨率独立单元支…

网络工程师成长日记333-某城市政府项目
网络工程师成长日记333-某城市政府项目 这是我的第333篇原创文章,记录网络工程师行业的点点滴滴,结交IT行业有缘之人 直接上干货,拓扑图: 工程目的:排除故障配置如下:LinWei#show running-configBuilding c…

linux环境编程-- ftok()函数
系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。 ftok原型如下: key_t ftok( char * fname, int id )fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是…

使用 ChatterBot 库制作一个聊天机器人
作者 | 周萝卜来源 | 萝卜大杂烩我们学习一些如何使用 ChatterBot 库在 Python 中创建聊天机器人,该库实现了各种机器学习算法来生成响应对话,还是挺不错的1什么是聊天机器人聊天机器人也称为聊天机器人、机器人、人工代理等,基本上是由人工智…

powerDesign设计随笔
PowerDesigner的Table视图同时显示Code和Name的方法 实现方法:Tools-Display Preference powerDesigner设置 name不自动等于code 从数据库里抽取了数据模型,为了理清思路,需要将name改为中文名称,但是pd自动将name填充为code&…

Apache Kylin在绿城客户画像系统中的实践
前言\\作为国内知名的房地产开发商,绿城经过24年的发展,已为全国25万户、80万人营造了美丽家园,并将以“理想生活综合服务提供商”为目标,持续为客户营造高品质的房产品和生活服务。\\2017年,绿城理想生活集团成立&…

linux环境编程--IPC 之 msg queue
消息队列在UNIX的SystemV版本,AT&T引进了三种新形式的IPC功能(消息队列、信号量、以及共享内存)。但BSD版本的UNIX使用套接口作为主要的IPC形式。Linux系统同时支持这两个版本。系统调用msgget() 如果希望创建一个新的消息队列࿰…

2021 IDEA大会圆满落幕,一文回顾大会精彩看点
11月23日,为期两天的2021 IDEA大会在深圳福田圆满落幕。2021 IDEA大会由深圳市福田区人民政府、深圳市福田区科技创新局和粤港澳大湾区数字经济研究院(International Digital Economy Academy,简称“IDEA”)联合举办。深圳市科创委…

【转】Android下编译jni库的二种方法(含示例) -- 不错
原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从NDK r5开始)---------------------------------源码要求&…

linux下如何修改系统时间
我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2018年2月23日的命令如下。 #date -s 02/23/2018 将系统时间设定成下午11点12分0秒的命令如下。 #date -s 11:12:00 注意,这里说的是系统时间,是linux由操作系统维…

thttpd服务器
1 引言随着微处理器技术、计算机网络技术的进步,基于嵌入式WEB的网络数字视频监控系统逐渐得到了人们的广泛关注。把图像采集、视频压缩和WEB功能集中到一个体积很小的设备内,可以直接连入局域网和Internet,达到即插即用,省掉多种…

链接产业 聚变未来 | 移动云区块链开发者论坛来了
有人认为,如果说蒸汽机释放了人们的生产力,电力解决了人们基本的生活需求,互联网改变了信息传递的方式,那么区块链作为构造信任的机器,将可能改变整个人类社会价值传递的方式。区块链已走进大众视野,成为社…

Bzoj4016: [FJOI2014]最短路径树问题
题面 传送门 Sol 先\(SPFA\)求出单源最短路,\(Bfs\)建出树,字典序可以用堆解决 然后就是点分治的一眼题 开桶记录到当前根经过边长度相同的最长路,记录它的长度 自己强行\(yy\)了一个这种类型的点分丑陋写法 # include <bits/stdc.h> #…

libevent源码深度剖析
原文地址:http://blog.csdn.net/sparkliang/article/details/4957667libevent源码深度剖析一——序幕张亮1 前言 Libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于&#…

元宇宙中可跨语种交流!Meta 发布新语音模型,支持128种语言无障碍对话
编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)语言交流是人类互动一种自然的方式,随着语音技术的发展,我们可以与设备以及未来的虚拟世界进行互动,由此虚拟体验将于我们的现实世界融为一体。然而,语音技…

前端面试官,我为什么讨厌你。
近两年来,参加过的前端面试不下二十场了,吐槽一下。我所经历的,都是小公司,大公司的同学请无视。 招聘信息能否不要装逼?写一大堆你项目根本用不上的,来给谁看?我曾遇到上面写了一堆对js如何要求…

【ASP.NET Core】解决“The required antiforgery cookie xxx is not present”的错误
当你在页面上用 form post 内容时,可能会遇到以下异常: The required antiforgery cookie "????????" is not present. 咱们来重现一下错误。新建一个 ASP.NET Core 项目,模板选【空】就行了,这是老周最喜欢的项…

linux系统级别的能够打开的文件句柄的数file-max命令
简单的说, max-file表示系统级别的能够打开的文件句柄的数量, 而ulimit -n控制进程级别能够打开的文件句柄的数量.man 5 proc, 找到file-max的解释:file-max中指定了系统范围内所有进程可打开的文件句柄的数量限制(系统级别, kernel-level). (The value …

这封以数字构写的蓝图,正在实现笔尖所触即世界
作者 | 贾凯强出品 | AI科技大本营(ID:rgznai100)一撇一捺,一勾一抹,笔走龙蛇,可见真意。笔者小时候字迹潦草,便总是抱怨为什么一定要写字好看?而如今计算机统治了世界,键盘和鼠标早…

Svn 笔记—— Hooks
pre-commit 钩子功能:[rootDa hooks]# cat /application/svndata/sadoc/hooks/pre-commit#!/bin/bash#Check message lenth ---更新版本时强制输入信息小于5个字符会退出REPOS"$1"TXN"$2"logmsgsvnlook log -t $TXN $REPOS |grep &q…

22.CSS边框与背景【上】
第十七章 CSS边框与背景【上】 一、声明边框 属性 值 说明 CSS版本 1、border-width 长度值 设置边框的宽度(可选) 1 2、border-style 样式名称 设置边框的样式(必选&…
一致性 hash 算法( consistent hashing )
原文地址:http://blog.csdn.net/sparkliang/article/details/5279393consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务…

【json的使用】
1、json格式字符串:Java代码/** 操作成功 200 */ public static final String RESULT_SUCCESS "{\"code\":\"200\",\"message\":\"成功!\"}";复制代码2、解析json字符串:Java代码JSONObject object…