摘要-近年来,研究人员在使用深度神经网络控制各种棋盘、竞技场和策略游戏方面取得了显著成功。然而,尝试控制角色扮演游戏(RPG)的尝试相对较少,而这些游戏在概念上可能最接近现实生活环境。在本文中,我们介绍了一个轻量级、易于使用的在线RRG,用于在结构化环境中测试和训练深度强化学习算法。我们在我们的环境中训练了几个不同的模型,并对它们的结果和行为进行了分析。该项目是开源的,可以在以下网址找到:github.com/szemenyeim/… 作者:小溪流水20 www.bilibili.com/read/cv2412… 出处:bilibili
I. 简介
强化学习算法可用于在复杂且高度非结构化的环境中为日常和工业问题做出有效的决策或提供解决方案。然而,出于安全原因,强烈建议在模拟环境中开发和测试有效的算法。模拟智能体环境的一种直接方法是使用计算机游戏的虚拟现实,因为这些游戏大部分基本概念都来自现实世界,所以它们的结构通常足够复杂,可以模拟现实世界的问题。
以下项目的主要目标是创建一个简单、轻量级且可修改的基本图形设计和功能的MMORPG(大型多人在线角色扮演游戏),并在其上训练深度强化学习算法。
主要需求如下:
- 英雄应在游戏环境中可控制。
- 多客户端架构。
- 非可玩角色(NPC)的简单人工智能。
- 基本开发。
- 与NPC的任务选项。
- 可修改的,多平台环境。
- 易于训练。
- 开源。
项目的目的不仅是开发一个环境,而且要在其中挑战多智能体强化学习算法。关于第一个模型的经验可以在第五部分找到。我们的主要贡献如下:
- 创建一个大规模多人游戏的环境,可以在多个训练机器上使用
- 训练并比较流行的深度学习算法
- 表明环境在一定程度上是可以学习的
II. 相关工作
A. 强化学习
当思考学习的本质时,通过与环境互动来学习的想法是首先出现的想法之一。强化学习是一种计算方法,通过创建动作-状态映射来最大化数值奖励信号并找到适用的策略,从而从互动中学习。
强化学习面临的挑战之一是探索与利用之间的权衡。为了最大化奖励,强化学习智能体应该倾向于之前有效的动作,但它必须尝试大量不同的动作来发现好的动作。因此,智能体需要利用其经验,同时必须探索新的机会以找到未来更好的动作。两者都不能被排他性地追求而不导致任务失败。这个困境为研究人员提供了许多挑战,但尚未解决[1]。
B. 强化学习的要素
强化学习系统有四个主要要素:
- 策略大致上是环境状态与要采取的行动之间的映射。策略是智能体的核心,因为它定义了在给定时间内学习智能体的行为。一般来说,策略可能是随机的。
- 奖励信号描述了环境状态的即时内在可取性。
- 另一方面,价值函数用于指定长期内什么是可取的。它描述了智能体从给定状态开始,预计在未来累积的总奖励。这是一个更具远见和精炼的判断,表明智能体对环境的特定状态有多满意。根据价值判断选择动作,而不是立即奖励。尽管确定价值函数要困难得多,因为它将根据智能体在其整个生命周期中进行的观察序列来估计。找到有效方法估计价值函数是所有强化学习算法最重要的组成部分之一。
- 通过环境模型的帮助,智能体可以在未来状态发生之前规划可能的反应。在强化学习算法领域中,有基于模型的方法,它们使用模型和规划,以及无模型的方法,它们是明确的试错学习者。
C. 深度强化学习方法
近年来,深度强化学习算法在许多电脑游戏中的表现已经超过了人类水平。这些雅达利游戏具有较小的动作空间,因此可以通过基于价值的算法(如Deep Q-learning)有效地控制,这是传统Q-learning的扩展,用于估计未来状态。价值元组。
然而,这些基于价值的方法在高维动作空间中的性能会显著降低,因此在这些环境中使用策略梯度方法,该方法学习策略和状态价值函数。这些方法的子类通常称为演员-评论家方法,其中学到的策略被称为“演员”,价值函数称为“评论家”。通过并行执行学习代理,可以获得更好的结果,因此可以在给定的时间戳中体验不同的状态。最先进的方法之一是近端策略优化,通过以简单、自适应的方式实施信任区域更新,实现了优化、性能和实现方面的良好平衡。
深度强化学习已经应用于各种游戏,例如:3D第一人称射击游戏,或基于文本的游戏。然而,最前沿的突破是DeepMind的深度学习代理在星际争霸II中达到了大师级别,这是一款具有最复杂机制之一的游戏。
此外,计算机游戏为深度学习研究提供了大量有用信息,因为它们是基于现实世界的巨大游乐场,可以通过可定制的游戏环境进行无限制的修改。
OpenAI Gym 还为大量在线代理提供了一个 MMORPG(大型多人在线角色扮演游戏)环境。然而,这个环境为玩家提供了一个竞技场,让他们可以相互战斗和竞争,但是在没有任务、NPC(非玩家角色)或复杂任务的情况下,代理无法合作完成一个目标,这是我们项目的主要关注点之一。
III. 通用框架
在介绍具体实现之前,重要的是给出这个游戏所基于的关键思想和功能的概述。这个游戏环境的主要目的是为深度学习代理提供一个可定制的环境,其中他们可以根据奖励函数扮演不同的角色。这种方法将提供一个工具,以查看在共享环境中使用不同策略的代理相互比较的表现。代理在共享地图中拥有有限的资源,主要目标是消除所有敌对角色。敌人在数量上占优势,因此代理不能简单地击败他们,他们需要制定一个先进的策略。
环境应该为代理提供不同的策略来完成游戏:他们可以作为盟友一起击败对手,或者他们可以相互战斗,直到收集足够的经验点来压倒其他角色。框架还提供了友好的角色,他们可以帮助代理并给予他们更多的力量,这样他们就可以独自前进,而不需要依赖其他代理。实现应该在支持上述行为之间取得平衡。游戏逻辑背后的另一个想法是地图可以通过禁区影响玩家的行为。因此,根据用户需求,地图需要易于创建、添加或修改。
IV. 实现
在本章中,将详细介绍环境及其主要组件和功能。整个环境使用Python3实现,主要包括两个部分:服务器和客户端。
A. 客户端
a) OpenAI Gym:所提出的环境与OpenAI Gym 兼容,这是一个受欢迎的工具包,有助于开发强化学习环境。Gym 提供了一个用于训练代理的标准化接口,并且还具有大量内置环境。客户端的主要任务是提供一个图形用户界面(GUI)并管理奖励。GUI 基于 OpenCV,因为它具有基本的绘图功能,适用于创建语义地图。
每个玩家可以从当前地图(图2)看到一个64 x 64像素的区域,以及一个16 x 16像素的迷你地图(图1)。这两个图像组成了代理的观察空间。当玩家生成时,迷你地图一开始是空白的。玩家通过探索可用领土进行游戏,之后可以显示缩小比例的地图。为了帮助探索过程,每发现一个新像素都会给予经验点奖励。
动作空间是一个6维离散变量:玩家可以使用按键(W,A,S,D)在四个方向上移动。为了操作周围的元素,玩家可以攻击(空格键)或互动(F键)。
探索和成功击败生物将获得经验奖励。客户端根据每步获得的经验点和损失的生命值计算代理的奖励,具体如下:如果代理死亡,奖励为-1。如果代理获得XP,根据获得XP的原因,奖励将在1到3之间变化。探索给1点,击中普通敌人给2点,完成任务给3点经验。每个玩家在每个等级的最大生命值为100。如果玩家失去所有生命值,他们将死亡并在随机位置自动重生。
b) 游戏元素:
- 蓝色区域是水域。玩家不允许进入水中,因为他们不会游泳。另一方面,怪物可以在水中移动。
- 红点代表地图上的玩家。玩家的代理通常位于窗口的中间。
- 黑点是非可玩角色。NPC是静止的,通常不具有敌意,允许玩家与之互动。通过互动,玩家可以获得任务。目前,这些任务是猎杀怪物,目标在小地图上用红色矩形标记。
- 蓝点是怪物。它们会攻击附近的玩家。
- 地图上的紫点是来自任务的标记敌人。如果玩家杀死它们,将提供额外的经验。
图1. 带有标记目标的小地图。小地图显示模糊的游戏环境以及用红色方块标记的敌人位置。
图2. 单个玩家的领地。红点代表英雄,而黑点是可以提供猎杀任务的NPC。蓝点是标准敌人。黑点周围的橙色光晕意味着英雄与之互动,它给英雄提供了任务,特殊的目标敌人用紫色标记。
B. 服务端
服务器负责通过计算基于按键的每个玩家互动来管理和监督整个游戏机制。此外,它还负责处理战斗、经验点、任务和NPC等。
服务器分为3个线程:
- 主线程:此线程处理游戏逻辑,处理消息,并执行来自玩家的命令。
- 服务器线程:它处理与客户端的通信。每当收到一条新消息时,它将被放入队列中,以供主线程进一步处理。
- 怪物线程:此线程专用于处理敌人AI:可以伤害玩家的NPC。如果玩家靠近敌人,它会跟随玩家并尝试攻击,如果距离足够近的话。
V. 训练
在第一次成功的测试运行之后,该环境使用多个强化学习代理进行了测试。在训练过程中,使用了Advantage Actor-Critic (A2C) 和 Proximal Policy Optimization (PPO) 算法。
A.需求
对于每个测试,都需要确定一些需求以了解测试是否成功。在这个初始训练中,代理需要探索游戏领域,同时避免在已知位置陷入困境。此外,当受到怪物攻击时,演员应该保护自己。另外,我们希望代理能够相互战斗或合作消灭多个怪物。作为我们的最后一个要求,代理应学会拾取并完成任务以获得更高的奖励。
图3. 8个玩家在不同的3张游戏地图里
B. 性能
运行损失计算如下:
在这里,Lact 和 Lcrit 分别是演员和评论家的损失,而 Lentr 是基于熵的正则化项。借助多进程向量环境,8个代理并行训练。地图周围有50个敌人,有5个NPC可以从中获得任务。在消灭了所有怪物之后,这50个怪物会以更高的等级在不同的地图上再次出现。因此,敌人越少,需要探索的地方就越多。 神经网络使用来自代理周围环境和小地图的特征。小地图帮助他们找到新的对手并探索新的领土。没有这个,他们倾向于在一个地方“振动”,没有任何进展。所使用的网络架构可以在图4中看到。最初的测试采用了优势演员-评论家方法,并提供了一些有用的经验。尽管没有足够的探索策略,但随着时间的推移,学习速度加快,如图5所示。原因是,更高级别的怪物提供更多的经验点,但是,更强大的怪物不能轻易被打败。
图4. 用于测试的深度神经网络架构。
图5. 平均奖励:PPO – 蓝色,A2C – 红色
学习曲线中的高原意味着缺乏敌人。当大多数怪物被猎杀后,剩下的怪物不容易被学习代理找到,所以它们只能从探索奖励中学习。图5表明,随着时间的推移,高原会缩短,因为代理们倾向于相互争斗,而不是与那些强大且稀有的敌人竞争。
为了解决敌人过于强大的问题,需要在角色之间实现力量平衡。因此,在整个游戏过程中,英雄和怪物的攻击伤害也被修改为相同。然而,由于敌人在数量上占据优势,他们仍然过于强大。
测试训练同时采用了 A2C 和 PPO 算法进行,因为这个项目的主要目标之一是提供一个环境来创建、测试和比较现代强化学习算法。根据图表,PPO 算法的性能更好,因为 PPO 代理能够收集更多的奖励并更早地学习策略。这与文献中的不同测试结果一致,其中声称近端策略优化具有更好的整体性能,尤其是在更一般的设置中。
根据日志文件,A2C 代理完成了128个关卡,而 PPO 代理在 450000 个回合期间仅完成了 66 个关卡,尽管 PPO 代理平均收集了更多奖励。这是因为 A2C 代理在游戏中探索了更多的领域,因此他们在战斗前可以获得更多的经验点并进行更多的进化,而 PPO 代理则在没有适当水平的情况下更多地参与战斗,无畏地攻击敌人会带来更多的奖励。
VI. 实验结果
以下部分详细描述了测试结果。为了全面了解环境的性能,了解代理在不同运行过程中收集到的奖励非常重要。表 I 中的数据显示了 5 个不同运行的平均值,每个运行有 500,000 个回合,并使用了不同的随机种子值。
表 I 的列如下:
- 等级:游戏结束前代理在最后一个地图上的经验等级。
- XP:代理在不同等级收集的经验点。
- 重生:重生次数。这意味着在游戏过程中代理被怪物或其他英雄击败了多少次。
- 击杀:代理击杀的角色数量。
- 任务:因任务而猎杀的怪物数量。
表1
日志显示,A2C代理在游戏中探索了更多的领地,因此他们可以获得更多的经验值,并在战斗前减少失败次数,从而获得更多的进化。而PPO代理则更多地参与了战斗,因此他们可以击败更多的敌人并完成更多的猎杀任务,正如前文所提到的那样。在V-B章节部分的结尾。
采用随机策略,代理可以收集168,226点经验值,击败78个怪物,其中8个怪物是作为任务被击败的,而在50万个剧集中,随机代理将大约跌倒31次。
观察击杀任务比例是很有价值的。尽管任务可以提供更多的奖励,但代理在使用这两种算法时只接受了很少的任务。人类玩家通常可以在地图上完成50:35的击杀任务比例。这意味着需要重新设计奖励系统,以鼓励完成更多特定的任务,而不是标准的击杀或探险。探险应该只是在复杂地图中寻找敌人的工具。
VII. 结论
在本文中,我们介绍了一个角色扮演游戏环境,该环境允许研究人员在相同时间内使用多个代理训练和测试深度强化学习算法。代理可以在结构化且部分可观察的环境中基于奖励设置学习不同的策略。在介绍游戏之后,我们还使用不同的强化学习算法进行了测试。
建立的环境充当多个代理的沙盒环境,并为它们提供一个类似角色扮演游戏的世界。在第一次成功测试之后,下一个目标是在更复杂的结构化地图中训练代理,进行更多活动并涉及更多角色。更复杂的奖励系统也将为角色提供更复杂的发展策略。代理还将能够使用不同的工具和能力。
该项目可以在以下链接中找到:github.com/szemenyeim/…