王亮:游戏AI探索之旅——从alphago到moba游戏
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
演讲嘉宾:王亮,腾讯AI高级研究员。2013年加入腾讯,从事大数据预测以及游戏AI研发工作。目前主要从事MOBA类游戏AI相关的研发工作。
今天分享的课题是游戏AI探索之旅。本次分享分为四部分,第一部分,什么是游戏AI,游戏AI为什么对现在的游戏非常重要;第二部分,业界和工业界对于做游戏AI主要的方法,以及现在业界一些主流的游戏上的进展。第三部分,结合基于公司自有的MOBA游戏,分享一下我们做的一些探索研究及现在的进展;第四部分,会简单介绍一下基于深度学习方法来做游戏AI,对于游戏开发者来说需要提供哪些环境便于AI的开发。希望通过今天的分享能给大家之后工作或者接下来学习上带来一些的启发和思考。
什么是游戏AI,对于游戏开发者而言是要增进用户体验,提升游戏玩家的活跃度,方法主要是基于一些人工规则的方式。而对于学术界来说目标是最大化赢的概率,而现在主要是基于学习的方法。
几乎每款游戏都有自己的游戏AI。棋牌类的(深蓝、Alphago)、体育类的足球篮球、角色扮演类游戏……越复杂的游戏对AI的依赖程度越高。AI在游戏中常用的方式:人机对战:AI为游戏提供一种玩法,玩家可以选择与游戏AI对战去熟悉游戏;平衡性测试:辅助游戏设计开发,如:游戏数值改变,AI可以用于验证测试数值变化带来的影响;对于射击类的游戏,AI可以用于探索地图的探索等。
通用的游戏AI的设计,包含三部分: 感知系统、决策系统、导航系统;游戏AI的决策操作基于一定的时间粒度进行循环工作。
接下来介绍一下常用的游戏AI方案,游戏AI常用方法分为三类:1) 工业界常用的行为树、有限状态机及势力图,优点:实现逻辑清晰,不足:固定逻辑执行,容易被玩家识破,复杂逻辑难实现; 2) search方法,常用的方法:遗传算法、蒙特卡洛搜索树方法等; 3) 基于learning的方法: 监督学习算法、强化学习算法;
监督学习算法:基于训练数据,难点是抽象状态环境以及执行操作Action,通常Action的定义直接影响模型的上限;对于复杂游戏来讲,对于状态s很难定义最优的Action操作。
强化学习回避SL中如何确定“正确”A的问题,转而定义reward(例如赢一场比赛reward=10,击杀对方英雄reward=1, 自身死亡reward=-5);强化学习通常用于序列操作决策问题,对于强化学习来说,特别是复杂游戏,遇到的挑战:1) exploration和exploitation的问题, 2) 对于游戏玩法时间较长,如何解决reward delay问题。
谈到游戏AI探索研究,目前很多研究者在星际2上探索,目前星际上AI采用目前最强的StarCraft AI由hard-coded程序和learning程序共同实现,且hard-coded部分占大部分;目前最强的StarCraft AI还不能战胜业余的中上水平。星际游戏较为复杂,通用设计:将AI根据决策时间长短,分为:strategy,tactics, reactive control 进行分层优化。
Alphago掀起了游戏AI的浪潮,它成功超越了人类,它的算法主要由Supervised learning + Reinforcement learning +Monte Carlo tree search三部分组成,它的线下训练需要大量的计算资源。目前DeepMind跟暴雪已经合作开发了一个开放平台,模拟器是非常重要的,如果要做游戏AI相关开发,模拟器是必要的环境,通过模拟器获取数据以及提供一些操作指令能直接操作游戏AI。
今年在游戏界或者在游戏AI行业里最有影响力的就是Dota2了,在5个特定英雄等限制条件下AI能力能够超过90%的玩家(截至2018.6.25)。采用的是强化学习的方法。线下训练所使用的资源远远大于Alphago在围棋上使用的资源:12W+CPU,256GPU。
接下来介绍我们在MOBA游戏上的AI研究与探索。王者荣耀是一款即时战略游戏,与Dota,LoL是同类型游戏。MOBA游戏特点:注重英雄的操作,英雄设计较为复杂。介绍AI技术方案之前,首先我们来看下做MOBA类游戏难点在哪:
强化学习在围棋上成功的应用,为什么Moba类游戏AI还没有战胜人类的职业选手?以王者荣耀这款游戏来分析,从状态训练空间来看,王者的操作基本是在102000,围棋只有10170。操作序列空间也存在巨大差别,导致计算会非常非常大。
我们再看一下王者荣耀跟围棋存在什么样的差异:从AI的个数上来说,围棋只有一个AI,只需关注黑白子。对于王者来而言却是有多种对战情况的,5V5,3V3,是多个AI的操作。其次就是确定性的问题,下围棋落子即定,不存在下完还可能下不成功的问题。而对于战略性游戏却是非确定的操作,即使发出了技能也有可能被人打断,所以是非确定性的操作。对于状态可观测性,围棋可以看到整体的情况,而王者地图对于玩家而言是部分可见,只能看到友方的视野,这样就会涉及到博弈问题:如何去预测敌方的位置。
接下来我们再看下目标学习问题。目标学习是非常重要的,首先需要解决每个英雄要去哪里的问题,对每个英雄或者对每类英雄要去的位置和出场是不一样的。其次就是选目标的问题:游戏中有七十多个英雄,每一局英雄可能不一致,如何解决英雄不一致的问题?因为AI学的是用户的操作,每个英雄技能设计不一样,有的是方向型的技能,有的是指向型技能,有的是位置型技能。
第三个难点是知识表达的问题。如果对于一个复杂英雄如:露娜,李白,玩家没有熟悉一百场练习很难熟练操作这复杂英雄。露娜无限连怎么打,关羽的无限推,李白四字真言,诸葛亮大招躲避。另外每个英雄有一些技能状态变化的设计,例如说花木兰,它的技能会随着三技能的变更,前两个技能效果也会变。这些如何表示?对于人来说是游戏常识,难点在于对于AI如何进行表达。
对于遇到的主要问题我们的解决方案:第一是引入框架进行分层,任务分层场景切分。对于知识表达,引入了多模态的特征表达方式:卷积特征+向量特征+ 时序特征;模型采用多深度学习模型结合
接下来介绍下王者AI的主要技术解决方案。框架设计主要包含两大组成部分:游戏分析和策略模块。游戏分析模块主要包含:英雄搭配问题,装备策略的分析等。策略执行模块用以解决:接下来去做什么,到达对应地点后如何进行对战的问题。
大局观设计,大局观是解决下一时刻位置问题。具体来说对于英雄它下一次的热点在哪里?下一次的战斗位置在哪儿?或者它下一次蹲草丛在哪个位置。微操的设计,微操解决的是场景发生战斗的问题。我们特征采用多模态方式组织:位置相关信息通过imagelike特征组织,属性信息通过向量特征表征,采用深度学习的Multi-task模型。
整体来说随着强化学习,深度学习方向进展,以前主要是基于规则,现在主要是基于学习方式来研究AI。如果采取基于学习的方式研究AI对于开发者而言需要提供相关的环境便于开发者进行迭代调试。总而言之,MOBA类游戏AI研发遇到很多困难与挑战,但也充满了机会。这是今天的分享,谢谢大家。
问答
相关阅读
此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1189695?fromSource=waitui
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在云加社区!
王亮:游戏AI探索之旅——从alphago到moba游戏的更多相关文章
- 趣说游戏AI开发:对状态机的褒扬和批判
0x00 前言 因为临近年关工作繁忙,已经有一段时间没有更新博客了.到了元旦终于有时间来写点东西,既是积累也是分享.如题目所示,本文要来聊一聊在游戏开发中经常会涉及到的话题--游戏AI.设计游戏AI的 ...
- 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布
内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...
- 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL
内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...
- 【C语言探索之旅】 第二部分第九课: 实战"悬挂小人"游戏 答案
内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 答案 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题, ...
- 【C++探索之旅】开宗明义+第一部分第一课:什么是C++?
内容简介 1.课程大纲 2.第一部分第一课:什么是C++? 3.第一部分第二课预告:C++编程的必要软件 开宗明义 亲爱的读者,您是否对C++感兴趣,但是C++看起来很难,或者别人对你说C++挺难的, ...
- 【Linux探索之旅】开宗明义+第一部分第一课:什么是Linux?
内容简介 1.课程大纲 2.第一部分第一课:什么是Linux? 3.第一部分第二课预告:下载Linux,免费的噢! 开宗明义 我们总听到别人说:Linux挺复杂的,是给那些追求逼格的程序员用的.咱 ...
- 对弈类游戏的人工智能(5)--2048游戏AI的解读
前言: 闲得没事, 网上搜"游戏AI", 看到一篇<<2048游戏的最佳算法是?来看看AI版作者的回答>>的文章. 而这篇文章刚好和之前讲的对弈类游戏AI对 ...
- 【C++探索之旅】第一部分第三课:第一个C++程序
内容简介 1.第一部分第三课:第一个C++程序 2.第一部分第四课预告:内存的使用 第一个C++程序 经过上两课之后,我们已经知道了什么是编程,编程的语言,编程的必要软件,C++是什么,我们也安装了适 ...
- 【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!
内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...
随机推荐
- Sqlserver 密码过期时间查询
DECLARE @login nvarchar(30) -- 查询设定密码过期的登陆账号SELECT @login = nameFROM sys.sql_loginsWHERE is_expirati ...
- Devexpress Tab Control 文档
https://documentation.devexpress.com/WPF/8078/Controls-and-Libraries/Layout-Management/Tab-Control/P ...
- ASP.NET Core学习总结(3)
我们重点来看看这个InvokeInnerFilterAsync. protected override async Task InvokeInnerFilterAsync() { var next = ...
- ASP.NET MVC学习目录
一.ASP.NET MVC原理详解 1.了解MVC架构模式 3.学习ASP.NET MVC的必备语言知识 4.MVC中的razor语法详解 5.ASP.NET MVC路由系统机制详细讲解 6.ASP. ...
- Photoshop的脚本开发
之前的博客的文章,贴过来了.PhotoshopCS开始增加了脚本.Photoshop的脚本可以用JavaScript,AppleScript以及VbScript和visualBasic.其中Apple ...
- 【cocos2d-x 手游研发小技巧(4)与Android混编实现换“头像图片”】
cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如: 比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取 ...
- JS获取节点属性个数及值得方法
var ex = node; ; for (var j in ex) { alert("" + myIndex + ".(<font color='blue'> ...
- html开发基础
1 Doctype Doctype告诉浏览器使用什么样的html或xhtml规范来解析html文档 有和无的区别 BackCompat:标准兼容模式未开启(或叫怪异模式[Quirks mode].混杂 ...
- C++中重载、覆盖和隐藏
一,多态性 1,(1)声明了基类的指针,该指针指向基类,该指针永远调用自己的成员函数,不管函数是否为虚函数. (2)声明了派生类的指针,该指针指向该派生类,该指针永远调用自己的成员函数,不管函数是否为 ...
- myeclipse控制台打印文字
先来看看效果图: 下面是代码: import java.awt.Font; import java.awt.Shape; import java.awt.font.FontRenderContext; ...