面向环境感知的即时战略游戏信息交互设计
2022-07-15樊泽文乔秀明
王 慧,樊泽文,乔秀明
(北京信息科技大学 计算机学院,北京 100192)
0 引 言
游戏与智能体的结合是当今学术领域的重要创新,早期智能体在游戏中扮演的是非玩家控制的角色以及怪物,1950年香农教授在象棋博弈中使用智能体后,游戏与智能体的结合已经走到人们眼前。早期智能体的行为由设计者预先设定,无法产生动态变化,行为较为单一,对其进行智能学习后智能体可以打破传统的预设模式,根据当前游戏环境状态和自身状态表现出一些自主行为。随着不断的学习,智能体自身的性能会不断改善,能够更好的在复杂多变的游戏对战环境下制定高效的作战策略,并根据当前环境适当的调整。
多数人通过网络认识智能体,越来越多的智能体博弈游戏出现,从棋类游戏到规则更为复杂的MOBA类游戏以及RPG游戏等。智能代理在游戏中的应用也越来越多,比如星际争霸Ⅱ,可提取游戏各种信息并保存在字典中,将数据转换为多维数组对象,支持将多模态信息输出,也可以将智能体的输出动作,映射到实时环境中。
智能体是机器学习研究中的一个新领域,其动机在于通过尝试模拟和实现人类学习行为,建立起智能体的知识结构,并不断地修改其结构,使其自身性能不断改善。近年来,智能体在实时游戏中的应用越来越多,比如星际争霸Ⅱ,可将多模态输入数据表征输入到环境代理组件,同时将环境代理组件的输出动作,映射到实时环境中。
星际争霸系列是由暴雪娱乐制作发行的即时战略游戏,自1998年以来已经发行三版,成为近二十年来最畅销和最杰出的游戏之一。在游戏中,玩家需要控制神族、人族、虫族三大种族之一的势力,去完成具有未来科幻风格的军事化战役。玩家需要不断开拓视野,收集资源并扩大己方优势,最终摧毁对方基地,以获得全部胜利。关于对星际争霸系列游戏的研究早在2010年就已经开始,起初研究人员主要以构建硬编码智能体参与竞技比赛,但是此类模型没有学习能力,完全基于预设规则执行动作,这种模型虽然可以击败星际争霸内置AI,但还远未达到人类基本能力。直到2017年DeepMind公司联合暴雪娱乐共同发布了星际争霸Ⅱ人工智能研究环境,星际争霸Ⅱ也推出了一年一度的天梯赛——StarCraft 2 AI Ladder,为更多的智能体研究人员提供了更好的测试环境和数据支持。
1 本文研究概述
本文研究游戏环境信息交互过程,如图1所示。首先,提取出游戏中的玩家信息和环境信息,将提取出来的数据信息转换成多维数组的数据结构,并以字典格式保存;其次,将智能体决策出的动作执行到环境,首先根据游戏需求设计动作,将其添加到动作集中;最后,将动作解析成智能体能够处理的格式,使其能够执行到环境中。
图1 游戏环境信息交互过程Fig.1 Game environment information interaction process
游戏地图中包含了屏幕信息、玩家和游戏信息等多模态数据,通过提取特征层来提取出来,并转换成能够输入到智能体的数据表征。
将动作执行到环境模块,本文设计研究的动作均为即时战略游戏中一些常见单位,士兵、战斗机、坦克等的基础动作,例如:攻击、移动等。每个单位必要的基础动作类型,包括攻击、移动、停止、巡逻、原地防御以及启用武器。
2 用户和游戏信息的提取和转换
游戏环境提供的观察量共包含16大类的数据,例如:玩家信息、上次选择的动作信息、得分信息等。环境推进过程中智能体的决策会利用到相关观察量。本文将提取出游戏环境中封装好的玩家和游戏信息,并将其转换成多维数组的数据结构。
2.1 游戏环境的信息提取
观察量信息及其参数已被封装在文件中,主要包含游戏画面信息、小地图信息、玩家信息、可用动作集合等共12种,部分观察量信息见表1。本文将通过观察者模式反射,得到玩家和游戏信息,并自动更新。
表1 观察量集合Tab.1 Set of observations
提取玩家和游戏信息,需要连接API接口,通过观察者模式使所有依赖于此模式的对象都能得到自动更新,提取玩家和游戏信息时需要传入智能体,或者长度不同的参数组合,并且匹配接口的格式。首先,匹配游戏环境中定义的观察量规格;其次,将python数据与某些二进制文件进行交互,客户端发送请求,获取当前观察数据,使用观察者模式将依赖于此模式的对象都得到通知并被自动更新;最后,将提取的信息存储为字符串类型的观察数据。
2.2 用户和游戏环境信息转换
提取完成后,游戏的各种观察数据将以字符串的形式保存在数组中。智能体的输入,需要字典格式的数据类型,本文将通过转换函数将游戏信息转换为强化学习可以处理的数据结构。智能体输入数据时挑选所需要的数据,编码后即可输入。
将观察结果转化为智能体可处理的结果。首先,需要创建一个字典,用来存储各种类型的数据,储存的数据是从游戏环境提取的信息,包括地图名称、上次的操作、单选、创建队列等;判断特征尺寸是否存在于智能体接口迷你地图特征以及屏幕特征中,则将观察量和智能体的接口的参数进行指定轴的链接,通过指定的轴链接屏幕和小地图数组特征,将数据以流的形式读入,转化成多维数组对象。智能体的输入数据就可以从字典中挑选需要的数据,编码后作为智能体的输入数据。
输出数组包括动作结果、受到攻击的张量、得分、得分类型、必要得分、玩家参数、单元向量、单选和多选、计算单元特征、匹配单位向量等数组。
游戏信息提取并完成转化后,将其以多维数组格式存储。表2为提取后的部分游戏信息,最终转换结果为24组数据信息,可以直接从中抽取智能体输入需要的数据,编码即可使用。
表2 玩家和游戏信息Tab.2 Player and game information
3 动作执行到环境
3.1 单位动作的设计
星际争霸Ⅱ游戏中每个兵种都有自己独特的动作类型,但每个兵种共有的基础动作相同,包括攻击、移动、停止、巡逻、原地防御5种,不同单位这5种动作的基本细节不同。每个单位的攻击方式不同,移动速度不同,巡逻地点与范围也有差异。本文设计两种动作类型,一是简单动作,只涉及到单位自身的动作,如移动;另一种类型是组合动作,涉及到多个单位,或者说有触发的前提条件,如攻击。
3.2 动作执行到环境设计
根据对星际争霸Ⅱ的动作调查,玩家可以对游戏做出相应动作与控制,包括视野,选中单位等,使得玩家可以对兵种单位进行控制。玩家可以对地图和单位做出下列操作:为动作原型选择动作空间、移动摄像头等。一个游戏中会包括许多基本动作,而基本动作组合后成为组合动作,组合动作所衍生的动作空间很大,需要使用组合动作函数,每一个函数都带有一定的参数,共13个,这样可以简化游戏的动作空间。
执行动作根据游戏需要设计动作类型,例如:攻击、移动等,本实验使用代理组件库中提供的动作格式设计动作,并将其转换成智能体可以处理的格式,最后根据动作实际执行效果,人为验证动作是否合理可用。
3.3 动作执行到环境具体实现
智能体将动作作用到环境。首先,分别取出一个观测空间的维度和一个动作空间的维度,并取出智能体;其次,使用相关函数初始化,关联动作空间和观测空间。对智能体的所有环境初始化,取出其中的所有动作,对其进行训练,直到达到最后一帧,将智能体动作传送到环境中,完成动作映射。通过判断动作是否可用,参数数量以及参数是否有效,决定动作是否执行成功。
4 测试与分析
本文测试是基于银河编辑器为模型人为添加动作,故无法保证每个动作的正确性和可行性,需要根据游戏逻辑返回不同函数,根据实际游戏动作人为认证效果是否正确。为设计好的动作搭建测试环境,进行编码测试,测试主要采用了前后端分离的方式,前端基于已有的银河编辑器,在GUI界面进行游戏环境的设计,提供一个相对完善的游戏环境,玩家可以在指定区域内自行放置单位,并且设置单位的生命值、移动速度、搭载的武器、射程范围、单位所有动作等属性;后端利用环境代理库中的决策函数,以游戏环境观察量以及单位和单位所有动作为基础,随机决策出一个动作,作用于环境,人为观察动作执行过程与执行结果,测试动作结果见表3。
表3 测试动作列表Tab.3 Test action list
5 结束语
本文详细的描述了面向环境感知的实时游戏数据交互的全部实现过程。在环境代理库中寻找到游戏环境信息的表示后,通过判断游戏屏幕和小地图特征图层的信息,提取特征层、游戏信息并转换为智能体的输入数据格式,为智能体的训练提供观察量,最后使智能体成功执行动作,更新游戏地图。