腾讯星际争霸 TStarBots1解读

 

 

3.1 Our PySC2 Extension(PySC2扩展)

SC2LE [16]是DeepMind和Blizzard联合提出的平台。 暴雪提供的游戏核心库提供了原始界面和功能映射界面。 DeepMind PySC2环境进一步将核心库包装在Python中,并完全公开了功能图界面。 目的是紧密模拟人为控制(例如,鼠标单击某处或按下某些键盘按钮),由于SC2内部结构的复杂性,它会导致大量操作。 因此,这给决策系统带来了不小的困难。 而且,这样的“玩家级”建模对于“单位级”建模是不便的,尤其是在考虑多主体样式方法时。 在这项工作中,我们付出了更多的努力来展示单元控制功能并编码技术树。

曝光单元控制。 在我们的PySC2分叉中,我们另外公开了SCII核心库的原始接口,该接口可实现每单位的观察/操作。 在每个游戏步骤中,都可以检索玩家可见的所有单位(取决于是否启用战争迷雾)。 每个单元由属性列表充分描述,该属性列表包括例如位置,健康状况等。将这种原始单元阵列作为返回给代理的观察来进行。 同时,允许以每个单元的动作来控制每个单元。 因此,代理能够将原始动作命令发送到感兴趣的单个单元(例如,某个单元移动到某个地方,某些单元攻击某个其他单元,等等)。 单位的定义和每个单位的作用可以在SCII核心库的protobuf中找到。

对技术树进行编码。 在《星际争霸II》中,玩家需要特定的单位/建筑物/技术,作为其他高级单位/建筑物/技术的先决条件。 按照UAlbertaBot [19],我们将这些依赖关系形式化为一个技术树,在我们的fork中缩写为TechTree。 我们已经收集了完整的Zerg TechTree,其中提供了每个Zerg单位的成本,建造时间,建造能力,制造商和前提条件。

除了上述两个附加功能外,我们的PySC2前叉与原始的Deepmind PySC2完全兼容。

3.2 TStarBot1: A Macro Action Based Reinforcement Learning Agent(基于宏观动作的强化学习智能体)

 

研究人员一共总结了165个大型操作,其中建造13个、爆兵/补农民22个、科技树27个、采矿/采气3个、对抗100个。图片底部是人为编码的游戏规则先验知识(如技能树TechTree)和如何进行操作(巢穴造哪儿),也就是说,它帮控制器省去了不少决策过程和操作细节

我们在图2中说明了代理是如何工作的。在顶部,有一个全局控制器,它将通过RL算法学习并对暴露在其中的宏操作做出决策。在底部,有一个宏操作池,这些宏操作硬编码游戏规则的先验知识(如TechTree)以及如何执行操作(例如,构建操作的无人机和构建操作的位置)。因此,它向控制器隐藏琐碎的决策因素和执行细节。通过这种架构,我们减轻了学习算法直接处理大量原子操作的沉重负担,同时仍然保留了整个游戏宏观策略的大部分关键决策灵活性。而且,这样的代理甚至在学习之前就可以掌握一些硬游戏规则的基本知识。有了这样一个中级抽象和丰富的知识的行动空间,代理可以从零开始快速学习,并在1∼2天内通过单个GPU击败最难的内置机器人。更多细节将在以下小节中提供。

3.2.1 Macro Actions(宏观动作)

如表1所示,我们为Zerg-vs-Zerg SCII完整游戏设计了165个宏动作(完整列表请参阅附录I)。

 

如上所述,宏操作的目的有两个:

  1. 硬编码游戏规则的先验知识(例如,技能树);
  2. 对控制器隐藏琐碎的决定因素(例如,构建布局)和一些执行细节

每一个宏动作执行一个有意义的基本任务,如建造某个建筑、生产某个单元、升级某项技术、获取某个资源、攻击某个地方等,并由一个组合或若干个原子操作组成。在行动空间中有了这样的抽象,赢得一场完整比赛的高层策略就变得更容易探索和学习了。

 

 

虽然大大缩小了动作空间,但这种做法也存在不少问题。由于智能体是基于大型操作集学习的,一旦做出决策,它就要完整执行完大型操作里的所有动作,但有时其中的一些动作在每个决策步骤中是互斥的。此外,由于会不可避免地大范围引入不必要的操作,这会带来许多不必要的观察值,冗余信息会干扰模型训练。另一方面,这个AI注定无法在小操作上学到东西。

下面主要对宏动作进行说明:

Buildaction(建筑行为):

建筑是科学院进一步单元生产和技术升级的先决条件。建筑类别包含13个宏操作,每一个宏操作在执行时都会构建一个特定的虫族建筑。例如,宏操作BuildSpawningPool 9使用一系列原子ui-actions3构建一个生成池单元(eg: 建造蟑螂温室=移动视野窗口+随机挑选工蜂+选取界面坐标位置+建造):

1)把相机移到基地,

2)屏幕点选一个无人机(目标单位),

3)在屏幕的某个地方建立产卵池。

这一系列的原子操作涉及两个内部决策:

1)建造哪架无人机?

2)在哪里建造?

由于这两个决策通常被认为对整个游戏过程和结果几乎没有影响,因此我们将其委托给一些基于随机和基于规则的决策者,即随机无人机选择器和随机空间放置器。注意到随机空间放置机必须编码基本的放置规则,例如:虫族建筑只能放置在蠕动区;孵化场必须位于靠近矿物的地方,以获得公平的收获效率。此外,TechTree规则,如“只有Drone才能构建产卵池”也被编码在这个宏操作中。

Production & Tech Upgrading Actions:

单位生产和技术升级在很大程度上影响了游戏的经济和技术发展。生产类别包含22个宏动作,技术升级包含27个,每个动作产生某种类型的单元或升级某种技术。 这些宏操作的硬编码类似于上述构建操作的硬编码,不同之处在于它们不需要空间放置器。

Resource Harvesting Actions(资源收集):

矿产,天然气和幼虫(仅Zerg-race)是SCII游戏中的三个关键资源。 它们的存储和收集速度会极大地影响经济增长。 我们设计了3个相应的宏动作:CollectMinerals,CollectGas和InjectLarvas。 CollectMinerals和CollectGas将一定数量的随机工作人员(即Zerg-race中的Drone)分配给矿物碎片或瓦斯提取器,以便通过这两个宏动作,可以将工作人员重新分配给不同的任务,从而进行矿藏和天然气储藏 (或其存储比例)已更改以满足某些需求。 InjectLarvas只需命令所有空闲的女王/王后注入Larvas,以加快单位生产过程。

Combat Actions:战斗动作:

如何设计战斗动作仍然是决定一场游戏结果的最决定性的部分,并且由于可能存在多种多样的宏观战斗策略,因此它也是最抽象的宏观动作部分。 举些例子:

•攻击时间:例如匆忙,提早骚扰,以最佳时间窗口攻击。

•攻击路线:例如,在狭窄的斜坡上行走可能会限制攻击火力。

•集结位置:例如,在进攻前集结以集中火力(请注意,各个单位的移动速度可能不同)。

我们尝试通过区域宏动作来表示这种作战策略,其定义如下(如图2所示):我们首先将整个世界地图划分为9个作战区域(称为A区到I区), 为整个世界增加了一个J区,总共有10个区; 根据区域划分,定义了100个(= 10×10)宏动作,并执行每个宏动作,例如,“ X区域中的战斗部队如果有敌人在那里开始攻击Z区域,否则,集结至Z区域 -Y,等等”。 对于每个宏观行动中的微攻击战术,在这项工作中,我们只需对每个作战部队的“即冲即跑”规则进行硬编码,即,该部队向最近的敌人开火并在健康状况不佳时逃跑。 我们将其留作未来工作,以研究针对微观战术的更复杂的多主体学习。

通过这些宏观行动的组成,可以代表并实现各种各样的宏观作战策略(尽管不是完全灵活的)。 例如,进攻路线的选择可以通过一系列区域性的集会宏观行动来完成。 通过此定义,我们避免使用复杂的多主体设置。

A vailable Macro Action List(可用的宏操作列表):

并非在任何时间步都可用上述每个预定义的宏操作。 例如,TechTree约束某些单位/技术只能在某些条件下建造/生产/升级:例如,足够的矿物质/天然气/食品存储,某些必要的单位/技术的存在。 当不满足这些条件时,相应的宏操作应“不执行任何操作”。 我们会在每个时间步骤维护此类可用宏操作的列表,对TechTree知识进行编码。 此可用操作列表会掩盖每个步骤中的无效操作,从而简化了探索过程。 该列表也可以作为特征。

3.2.2 Observations and Rewards(状态及奖赏设置)

状态观测:

这些观察结果是一组空间二维特征图和一组非空间标量特征,它们是从SCII游戏核心提供的单位信息中提取的,并在我们的PySC2分支中公开的(请参阅第3.1节)。

空间特征图。渲染尺寸为N×N的特征地图(不像原始PySC2 [16]那样分成小地图和屏幕特征),每个像素表示世界地图的某个统计信息(例如,某种类型的单位计数)与特征图像素相对应的区域。这些特征图包括自身和敌人常用单位类型的计数,以及具有某些属性(例如“ 可攻击地面can-attack-ground”,“可攻击空域can-attack-air”)的单位的计数。

非空间功能。标量特征包括收集的气体和矿物质的量,剩余食物的量,每种单位类型的计数等。我们还可以选择包括热门的游戏进度和当我们不使用重复动作时最近采取的动作的功能模型以跟踪过去的信息。

奖励:

我们使用了奖励结构:在游戏结束时收到三元1(获胜)/ 0(并列)/-1(亏损),并且在游戏过程中奖励始终为零。尽管奖励信号非常稀疏且延迟很长时间,但它与我们可处理大小的宏动作空间配合使用。

3.2.3  Learning Algorithms and Neural Network Architectures(学习算法与神经网络框架介绍)

根据上面定义的宏动作和观察,可以将该问题视为顺序决策过程,其中离散的动作空间具有可处理的大小,并且缩短了时间范围。 在时间步骤t,代理从游戏环境中接收观察值∈S,并根据其策略(在A上的条件概率分布)选择宏动作∈A,其中A表示集合 3.2.1节中定义的宏动作; 然后,通过上述手工调整的规则,将选定的宏动作at转换为游戏核心可接受的原子动作; 采取原子动作后,主体收到报酬和下一步观察值。这个循环一直持续到游戏结束。

我们的目标是Agent学习到最佳策略,以在未来的所有步骤中最大化其预期的累积奖励。 当我们直接使用第3.2.2节中定义的奖励函数而无需进行其他奖励调整时,优化目标相当于(最大化奖励折扣被忽略时)最大化代理的获胜率。我们训练TStarBot1代理通过使用内置的强化学习算法(例如Dueling-DDQN [8、38、39]和PPO [40])与内置的AI进行竞争,从头开始学习这种策略。基础设施。详细说明如下。

Dueling Double Deep Q-learning (DDQN)(双深度强化学习):

Double DQN,分为主网络和target网络,主网络选择动作,target网络拟合Q值。主网络的变化浮动大,target网络变化浮动小。

 

Dueling DQN,用一个深度网络来拟合强化学习中的Q值,只不过在网络最后部分,分为状态V值和动作V值,而Q值就通过状态V值和动作V值相加得来。其目的是说,状态值一样,而每个动作所带来的优势不一样。)

深度Q网络[8]首先学习最佳状态作用值函数(Q函数)的参数化估计。其中:是策略π下的预期累积未来奖励。然后,可以从估计的最佳Q函数轻松得出最佳策略:如果,则,否则为0。诸如重放内存的技术[8], 目标网络[8],双重网络[38]和决斗架构[39]可用于减少样本相关性,更新目标不一致,最大化偏差和更新目标方差,从而提高学习稳定性和样本效率。由于奖励的稀疏性和长期延迟,我们使用了蒙特卡洛(MMC)混合[41]收益与增强型Q学习收益作为Q更新目标,这进一步加快了收益传播并稳定了训练。

Proximal Policy Optimization (PPO算法):

我们还通过近端策略优化(PPO)直接学习了随机策略的参数形式进行了实验[40]。 PPO是一种有效的策略梯度方法样本,它利用策略比率信任区域裁剪(clip操作)来避免解决TRPO中的KL散度约束的保守策略迭代问题所需的复杂的共轭梯度优化[42]。 我们使用了广义利益估计的截断形式[43],以权衡利益估计的偏差和方差。 第3.2.1节中描述的可用操作列表用于掩盖不可用的操作,并在每个步骤重新规范操作上的概率分布。

Neural Network Architecture(神经网络架构).

采用多层感知神经网络对状态作用值函数、状态值函数和策略函数进行参数化。虽然可以考虑更复杂的网络结构(例如,提取空间特征的卷积层,或补偿部分观测值的递归层),但这超出了本文的范围,我们将重点讨论这种简单的网络结构。

Distributed Rollout Infrastructure(分布式部署基础结构)

分布式部署基础结构。 SCII游戏核心占用大量CPU且部署缓慢,因此在RL训练期间会出现瓶颈。 为了缓解此问题,我们构建了一个分布式部署基础架构,其中利用一组CPU机器(称为actor)并行执行部署过程。 缓存在每个参与者的重放存储器中的推出体验将被随机采样,并定期发送到基于GPU的机器(称为学习器)。 目前,我们以1920个并行actor(在80台计算机上使用3840个CPU)来生成重放转换,其速度约为每秒16,000帧。 由于探索的轨迹的多样性增加,这大大减少了培训时间(从几周到几天),并且还提高了学习稳定性。

实验结果

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
腾讯面试题中的 "从0到1" 是一个常见的问题,它意味着从零开始建立一个完整的系统或项目。这个问题的目的是考察你在实践中解决问题的能力以及你对整个流程的理解。 回答这个问题时,你可以按照以下步骤进行: 1. 理解需求:首先,你需要明确你要构建的系统或项目的需求是什么。这包括功能需求、性能需求和用户需求等。你可以通过与相关人员沟通和分析市场情况来获取这些需求。 2. 规划和设计:在明确需求后,你需要进行系统的规划和设计。这包括确定系统的整体架构、模块划分、技术选型等。在这个阶段,你需要考虑到系统的可扩展性、可维护性和可测试性等方面。 3. 开发和实现:在规划和设计完成后,你可以开始具体的开发工作。这包括编写代码、实现功能、进行单元测试和集成测试等。在这个阶段,你需要根据需求和设计进行迭代开发,并及时调整和修复问题。 4. 验收和部署:完成开发后,你需要进行系统的验收和部署工作。这包括与用户或相关人员进行沟通,确保系统满足需求,并进行正式部署。在这个阶段,你需要进行系统的功能测试、性能测试和安全性评估等。 5. 运维和优化:系统上线后,你需要进行系统的监控和运维工作。这包括监测系统的运行状态、处理用户反馈和进行系统的优化和升级等。 总结起来,从0到1的过程是一个从需求理解到系统部署运行的全过程,需要综合考虑各种因素,包括技术、设计、开发、测试、运维等。在回答面试题时,你可以根据你的实际经验和项目经历来展示你的能力和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值