星际争霸ai发展史 | 星际争霸 机器人
【星际争霸ai发展史 | 星际争霸 机器人】lot物联网小编为你整理了的相关内容,希望能为你解答。
一直以来,星际争霸等策略游戏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网络游戏实战》和《百万在线:大型游戏服务端开发》,毕竟也是花费多年时间编写,相信对大家理解游戏开发技术会有一些帮助。
作者的一系列游戏技术总结
以上内容为【星际争霸ai发展史 | 星际争霸 机器人】的相关内容,更多相关内容关注lot物联网。