始终败兴,星际争霸等策略游戏AI都被视为游戏AI中实现难度最高的。其一,游戏规则较繁杂,包括建造、资源收集、兵种协同、战斗微操非常多内容;其二,玩家需要运用区别的策略对抗区别敌人,策略很繁杂。
星际争霸游戏画面
为何写这篇文案
写此篇文案重点有以下几点考量。其一,传统游戏AI基于规则实现,有的运用状态机、有的运用行径树、乃至有些运用搜索算法来寻找最优的动作,策略游戏常常综合运用多种技术,有必定的科研价值;其二,尽管基于规则的传统AI没法和人类对抗,但它触及的程序抽象思想值得科研;其三,我之前写过几个AI关联的材料,一个是课程《各类型游戏人工智能算法》,它重点偏重于区别类型游戏AI的综述,另一个课程 《直观理解AI博弈原理》重点介绍象棋、围棋、王者荣耀的AI实现,更偏重于强化学习办法的演进,两者中间还缺乏一个综合实例,而星际争霸设备人UAlbertaBot刚好能够填补这一空白。本文重点参考UAlbertaBot的源码、Wiki,以及关联的几篇论文,咱们并不去关心程序怎么样安装和运行,而是关注它的设计和原理。
UAlbertaBot是什么
UAlbertaBot是一套开源的星际争霸AI,该程序自2010年起始参加各样星际AI的比赛,并且赢得2013年AIIDE星际争霸AI比赛的冠军。它的作者是David Churchill,纽芬兰纪念大学的计算机助理教授。UAlbertaBot的开源位置如下:
https://github.com/davechurchill/ualbertabot/
在2018年以前,运用强化学习办法的AI尚未成熟,UAlbertaBot等星际争霸设备人作为游戏AI竞技的表率。尽管在2018年以后强化学习AI展现出很强的能力,但强化学习AI训练难度大且难以用规律暗示它的行径,游戏产业依然广泛的运用传统AI。
文案会分如下几篇 架构和规则,宏观介绍UAlbertaBot的原理建造次序搜索,介绍运用深度搜索算法去找到最优建造次序的办法战斗模拟评定,介绍模拟队伍作战评定能否获胜的办法starterbot,一个最简单的设备人,从中理解最基本星际AI的写法策略制定,策略制定部分的代码分析建造实现,生产、建造关联系统的代码分析战斗实现,战斗关联代码分析寻路算法,地图关联代码的分析
代码结构
UAlbertaBot的代码运用C++编写,代码架构层次分明,整体如下图所示。咱们能够先有个大概印象,其中CombatCommander负责兵种战斗的规律、WorkerManager负责工人的规律、ProductionManager负责建造规律、StrategyManager负责整体策略,整体还是比较明晰。
代码层次结构
源码文件
程序从main起始运行,沿着UAIBertaBot、GameCommander逐层调用,最后分发到WorkerManager、ProductionManager等子系统,main、UAIBertaBot、GameCommander它们并不包括详细规律,仅仅是一层层的往下调用。
顶部的代码结构
各个子系统负责对应的规律实现,它们的重点功能如下。
各个子系统
ProductionManager 生产管理器在程序中,策略管理器(StrategyManager)会负责选取合适的策略,而针对区别的策略需要生产区别的单位,StrategyManager会生成一个建造目的(build order goal ),包括要生产的内容,由ProductionManager去执行。因为建造单元有依赖关系,亦会消耗资源,必须恰当地安排生产的次序。ProductionManager会调用StarcraftBuildOrderSearch进行搜索,找到最恰当的建造次序(后续还会仔细介绍搜索的过程),形成建造列表(build order)根据优先级,建造队列(build order)里的单位。ProductionManager会调用BuildingManager来实现详细的建造过程,包含分配工人去建造、建造过程中工人被打死需要重新分配工人、管理建筑的状态(准备建、已分配工人、建造中、建造完成)。
CombatCommander 战斗管理器倘若敌人来到我方霸占的区域,创建防御队伍(defense Squad)去防御。倘若存在攻击单位,根据如下次序进行攻击,a:已知的敌人基地;b:可见的敌人单元;c:已知的敌人建筑;d:进行探索,直到找到攻击目的。CombatCommander会按照需要创建队伍,如需要防御时创建防御队伍,攻击时创建攻击队伍,分配单元到各个队伍(Squads),并且管理它们。其中Squads模块会调用CombatSimulation进行战斗模拟(后续亦会仔细说明),倘若预估会胜利,则指示队伍去攻击敌人;倘若预估会失败,则撤退。Squads会调用各样MicroManager进行微观动作的操控。MicroManager是一个基类,派生出MeleeManager(混战)、RangedManager(范围攻击)、DetectorManager(侦查管理器),区别子类会实现一种特定行径的掌控。在合适时间,设置一个工人去侦查,以探索地图区域。CombatCommander会调用scoutManager,负责侦查规律,a:详细规律是寻找敌人基地并往敌人基地的方向行进;b:倘若在敌人基地内遇到敌方工人则攻击它;c:倘若敌方工人反击,则撤退。
WorkerManager 工人管理器倘若有空闲工人,分配她们去收集矿产为每一个提炼厂分配3个工人倘若发掘新的油矿,重新分配工人去挖矿倘若需要建造,分配有些工人去建造
其他系统诸如InformationManager会记录已发掘的敌人信息,MapGrid和MapTool会实现寻路辅助的功能。
下面又到广而告之的时间啦,倘若你想学习研发游戏,不妨看一看笔者写的《Unity3D网络游戏实战》和《百万在线:大型游戏服务端研发》,毕竟亦是花费数年时间编写,相信对大众理解游戏研发技术会有有些帮忙。
作者的一系列游戏技术总结
|