资源描述
Dota游戏中的人工智能技术
杨国强(2008242039)
摘要:Dota游戏有一个模式是人机对抗模式,在这个模式下人可以和AI进行对抗,Dota游戏中的AI设计的非常之棒,作为一个本身上手就很复杂,对操作要求很高,而且衍生非常多游戏战术的这么一款游戏,它的AI设计难度按说非常之大,但Dota的AI设计者水平非常之高,Dota的AI水平只有拥有相当高的水平的游戏爱好者才能与之抗衡。
Dota游戏的AI设计中,大量采用了神经网络技术,以实现一到多人与AI进行的在Dota游戏中的人机对抗。
关键词: Dota AI 神经网络 人机对抗
引言
人机对抗技术其实不是什么新技术,早在 1963 年,第一次人机对抗的事件就发生了。当时的国际象棋大师兼教练大卫·布龙斯坦怀疑计算机的创造性能力,于是便同意用自己的智慧与计算机较量。下棋的时候他有一个非常不利的条件:让一个后。但当对局进行到一半时,计算机就把布龙斯坦的一半兵力都吃掉了。这时,布龙斯坦要求再下一局,但这次却不再让子了!
1997 年 5 月 11 日,在人与计算机之间挑战赛的历史上可以说是历史性的一天。计算机在正常时限的比赛中首次击败了等级分排名世界第一的棋手。加里卡斯帕罗夫以 2.5:3.5 输给 IBM 的计算机程序 “深蓝”。机器胜利的标志着国际象棋历史的新时代。也标志这人机对抗技术发展的逐步成熟。
电子游戏中的人机对抗本质上和棋类的人机对抗是一样的,即在一定的规则限制下,若干个人与电脑AI的,以达成一定成就为目标的对抗。
值得注意的是Dota仅仅是魔兽争霸这款游戏的一个地图,作为AI的设计者不会从中获得一点好处,他们的工作彰显的更多的是对人工智能这门学科的热爱。
Dota游戏规则明确,控制逻辑复杂,AI设计目标明确,难度很大。在这样难度下,Dota的AI水平能达到如此高度,值得我们对其进行研究。
(一) 神经网络系统概述
人工神经网络系统是模拟人思维的一种方式,仿照生物的大脑来工作。
神经元的构成是独特的。每个神经元都长有轴突,用来将信号传递给其他神经元。
神经元由一个细胞体、树突和一根轴突组成。树突由细胞体向各个方向长出,用来接收信号;轴突也有很多分支, 通过分支的末梢和其他神经元的树突相接触,形成突触。一个神经元是通过轴突和突出把产生的信号送至其他神经 元。每个神经元通过它的树突,与大约1万个其他神经元连接。
每个神经元只有两种状态:兴奋和不兴奋。神经元把所有从树突的突触上接受来的激励信号,通过我们目前还未知 的的方式相加。如果相加所得结果超过某种阈值,则该神经元就会被激励,变得兴奋,同时产生一个激励信号,通 过它轴突的突触,把产生的信号传给其他神经元;如果相加所得结果没有超过阈值,该神经元就不会 被激励。
虽然单个神经元的结构极其简单,功能有限,频率大约只有100Hz,但正因为有数量巨大的神经元,相互连接 构成一个庞大的并行处理网络,所以整个神经网络系统具备难以置信的能力:
1.能实现无监督的学习
功能完整的神经网络系统可以实现自行学习,而不需要导师的监督教导。如果一个神经元在一段时间内受到较高频 率的刺激,则它和输入信号的神经元之间的连接强度就会在一定程度上改变,使得该神经元下一次受到刺激时,更 容易兴奋。
2.对损伤有冗余性
神经网络系统即使受到了损伤,它依然能执行复杂的工作。
3.处理信息的效率极高。
神经元之间的信息传递速度,与计算机CPU中数据传递的速度相比,是非常非常慢的 。但因为神经网络系统采取了并行处理方式,使得整个系统可以同时处理巨量的数据,因此整体处理速度得到极大 的提升。
4.善于归纳推广
神经网络系统和计算机不同,前者极其擅长模式识别,并能根据已经掌握的信息进行归纳推广。比如,一个人可以 阅读另一个人手写的文字,即使这前者以前从未见过后者写的东西。
5.拥有意识
这是神经学家和人工智能研究者至今仍在商讨的话题。人拥有意识,这是无可辩驳的,但除了人以外,拥有完整神 经网络系统的其他事物,是否也拥有意识?。
(二) 神经网络的训练
一旦神经网络构建完毕,就可以对其进行训练,使其处理数据的能力符合最初的设计要求。
假设需要该神经网络识别物体A。
①为神经网络中,每一个层、每一个人工神经元里每一个权重赋予初始数值。
②对输入层中的人工神经元输入需要识别的一系列数据。
③对于每一种输入配置,检查它的输出是什么,并调整相应的权重。
输入一张图片,里面画的不是物体A,而是其他物品。这时网络应输出一个0。
对与每个非物体A的图片数据,都要调节网络权重,使得它的输出趋向于0;对于每个物体A的图片数据,也要调节网络权重,使得它的输出趋向于1。
④成功识别出物体A后,通过再次训练,就可以使网络识别其他物体B、C、D等等。
这种类型的训练称为有监督的学习,用来训练的数据成为训练集。调整权重可以采用许多方法,这里采用反向传播方法。
(三) Dota AI的设计
3.1 DOTA概念
DOTA是电脑领域上新兴的一个多人对抗项目,全称为Defense Of The Ancients,即守卫遗迹。它的编写者名为Ice Frog。
3.2 DOTA规则
DOTA是一个多人的人人对抗项目。但它的规则在某些方面与象棋类似。
1) 参与对抗的对抗者最多为10人,分为两大阵营,每方阵营各5人。
2)每个参与者扮演一名“棋子”。每个棋子拥有生命力、战斗力等属性,可以通过学不同的技能,购买不同的 物品提升自身的实力。
3)双方所有棋子在一定的地域内活动。同时,双方各有一座遗迹,和数个保卫遗迹的建筑物
4)每一方的棋子都必须不计一切代价保护己方的建筑物和遗迹,同时利用一切可行方式去摧毁敌方的建筑物和遗迹。
5)一旦一方棋子率先突破防御,摧毁了对方的遗迹,该方立即获胜,并宣告对抗终结。
3.3 Dota AI的理论设计
Dota AI采用以模拟法为主导,工程学为辅助的算法,在理 论上构建一个人工智系统。
理论上,一个完整的人工智能系统,应包含如下几大部分。
1. 巡查系统
子功能包括:
信号转化
行为限制
2控制系统
子功能包括:
发布指令
响应指令
执行结果反馈
3 指令中心
子功能包括:
知己知彼
探索活动区域
提升棋子实力
3.4大系统的具体实现思路
巡查系统
1)信号转化功能
由于各种信息的视觉信号,都与电脑内存中具体的数据相对应,所以,只要将这种对应关系整理出来,列成一个可 查询的表格,就能实现信号转化功能。
输入待转化信号 → 查询表格 → 得到输出结果
2)行为限制功能
违反规则的行为共有下列几种:
使用作弊工具,非法修改角色的金钱资源 → 非法改变金钱
使用作弊工具,非法修改棋子的实力 → 非法提升实力
以任何方式利用DOTA自身的漏洞 → 利用BUG。
一旦一个电脑角色发出的指令,其具体数据通过逐条比较后,与违规行为数据组中的数据整体相似,就可以认定这 个指令违规。
控制系统
为了实现指令的发布与响应功能,这里构造一个指令队列系统。
构造方式如下:
1)系统为每一个电脑角色的棋子分配一个指令队列
2)每个指令队列中包含有编号1至编号10,一共10个(总数可变)指令单元
3)每个指令单元均有6项数据,分别是指令单元的指令、指令的目标单位、指令的目标地点、指令的计时器、指 令的描述、指令的描述注解。
4)指令单元每项数据的作用:
5)指令队列中若存在指令,棋子将按编号从1至指令总数量(最大数量10),依次执行指令单元中 的指令。
6)电脑角色对指令队列进行的操作,共有如下几种:
①下达一个立刻执行指令
下达的指令会直接替换编号1的指令单元中的指令,无论棋子刚才在做什么,现在都会立刻执行新下 达的指令。
②在指定编号的指令单元中下达一个非立刻执行指令,或在指令队列最后附加一个非立刻执行的指令
这可以让棋子拥有做出一系列指定动作(即使用计谋)的能力。
③清除指令队列中所有指令
这可以让棋子处于原地待命状态。
命令中心
1)知己知彼功能
一个角色的整体实力包括其拥有的金钱资源,棋子本身实力(生命力、战斗力)和技能、物品对棋子本身实力的提升。
设一个角色金钱资源为M,棋子本身生命力为H,棋子本身战斗力为A,棋子已经学习的技能对生命力、战斗力的 提升为S、I,棋子已经购买的技能对生命力、战斗力的提升为S'、I',整体实力为T。
则会有一个线性函数F,使得T=F(M,H,A,S,I,S',I')。
对于每一个角色(无论敌我),由于它各种数值(除了坐标数值) 虽然会改变,但在一定时间范围内(数秒到数分钟)可以保持稳定不突变(就算现在突然改变了,但也再会保持一 定时间,才再次改变),因此在这段稳定期内,可以使用函数F求出整体实力T。
2)探索活动区域功能
①半工程学方面,由于整个活动区域内各项地形数值不会改变(地面不会在这里凸起一块,或凹进一块等),因此 一个地域内的地形的重要性(是否利于防守、是否毫无战略价值等),在一开始就被设置好了,不会改变。
②半模拟法方面,由于电脑角色只需要求出自身、敌方每个未露面棋子整体实力,然后通过简单权重计算,算出棋 子到达未探索的目的地时,万一遇见敌方棋子时,是否敌得过即可。
所以构建一个只有一个神经元的系统。
神经元依次把五个输入与其对应的权重(电脑角色对于每个敌方角色的实力预估)相乘,并求积的总和。如果最终 激励值超过神经元的阈值,则去目标地点探索承担的风险可以接受;否则表示去目标地点探索承担的风险太大,不可接受。
3)提升棋子实力功能
提升棋子实力主要通过两点,技能的(多选一)学习和物品的(多选一)购买。
技能的学习:
技能可以提升棋子的生命力或战斗力。
每个棋子每一等级可以学习一个技能(从自身技能库中五选一),由于一个技能不会同时提升生命力和战斗力,因 此需要评估所有类别的技能的各项数据,找出学习哪一个技能后,棋子整体实力提升最明显。
由于通用技能学习神经网络需要做到五选一,存在竞争关系,因此需要使用竞争网络。
构建一个只有输入层和竞争层的双层竞争网络。
输入层由处理单元构成,处理单元的作用是将输入的,可以完整描述一个棋子自身实力的所有数据,转化为一个输 入模式。对于每一个棋子,输入模式是通用的,但因为每个技能都不相同,所以竞争单元也不相同。
竞争层由五个竞争单元组成。每个竞争神经单元都与输入层的处理单元相连接,如果一个竞争单元输入的加权和最 大,则该竞争单元对应的技能成为优胜者,被棋子学习。
由于技能的复杂性,这个竞争网络必须由人工监督训练。
物品的购买:
物品也可以提升棋子的生命力或战斗力。
物品总量众多,而且物品的购买不受棋子种类限制(就是说对于每一个棋子,它能购买的物品都是相同的)。物品 的购买仅仅受限于电脑角色的金钱资源,和棋子所携带物品总量(一个棋子最多可以携带6个物品) 。
电脑角色在为棋子购买物品时,不可能把每一个物品都买一遍,因此需要评估所有类别的物品的各项数据,找出购 买哪一个物品后,棋子整体实力提升最明显。
对于一些棋子的部分物品,也存在一些常识性购买规则,这些规则是人类角色通过无数次试验,得到的常识。如果 一个棋子物品购买部分存在常识性购买规则,物品将优先按照该规则以固定的方式购买。
如果一个棋子没有或只有很少常识性学习规则,那么就需要使用一个通用物品购买神经网络,通过该网络求最优解 。
由于通用物品购买神经网络需要做到多选一,存在竞争关系,因此需要使用竞争网络。
构建一个只有输入层和竞争层的双层竞争网络。
由于物品的复杂性,这个竞争网络必须也由人工监督训练。
4)实时评估功能
发生遭遇战时,巡查系统会对每个电脑角色进行通告,并为其提供战况情报与数据。
对敌我双方临近战场棋子整体实力的评估,是通过一个神经元进行的。这个神经元构造与实现“探索活动区域”功 能的神经元相似,只不过目的地坐标被自动设定为战场。
这个评估是告诉一个电脑角色,加入战斗有多大风险,多大的胜算。电脑角色将评估结果于自身的性格值结合,最后决定是否加入战斗。
电脑角色谋略的使用,是靠一个竞争网络实现的。
总结
上述全部内容就是一个DOTA人工智能系统的构建理论和实现思路。
理论的核心内容是通过三大系统,即巡查系统、控制系统和命令中心,来实现一个人工智能的完整功 能。
1)巡查系统就像是个裁判,它为电脑角色提供知觉能力,同时每时每刻监督电脑角色的行为,如果发现电脑角色 违规,就会警告该角色并责令改正。
2)控制系统是一个带有反馈环节的控制手段,它为电脑角色提供对棋子的绝对控制权力,使电脑角色能够有效地将思维通过棋子的行为表现出来。
3)命令中心类似于人类的大脑,它为电脑角色提供思维能力,电脑角色通过这个系统产生意识,会对感知环境,并对对各种复杂状况做出反应。
整个人工智能实际制作起来的难点,一是理论的建立,二是算法的设计,而算法的设计又依赖于现有 数据的输入。
理论为实际算法和程序代码提供思路,反过来实际算法和程序代码会通过自身的设计、执行来支持理 论的正确性。
编写一个DOTA人工智能系统虽然是非常费时的工作,但它由于使用了人工神经网络系统,因此不论是功能方面 、排错维护方面,还是算法复杂度、实际代码所需量,都比完全工程学方法编写的人工智能系统强大 。
所有系统中,以第三大系统命令中心“实施评估”功能最为重要。可以说一切其他的智能,都建立在电脑角色正确 识别当前环境、当前棋子实力等数据的基础上。
参考文献
[1]Mat Buckland[美].《戏编程中的人工智能技术》 (AI Techniques for Game Programming).清华大学出版社. 2006.5
[2]《ASS使用教程》
[3]《神经网络的人机对抗人工智能系统》 Harreke(Dota AI作者)
展开阅读全文