社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习如何优化策略游戏

谷歌开发者 • 4 年前 • 508 次点击  

文 / 软件工程师 Ji Hun Kim 和 Richard Wu,来自 Stadia 


近年来,在线多人游戏的热度持续飙升,在全球范围内吸引着数不胜数的玩家。这种流行也加倍提高了对游戏设计者的要求:玩家会期望游戏在设计上足够细致和保证平衡性,毕竟,如果游戏中有某种强势套路可以胜过所有其他玩法,那这款游戏也没什么好玩的了。


为营造积极的游戏体验,游戏设计者通常会反复调整游戏中的平衡性:
  1. 通过测试用户成千上万次的游戏会话进行压力测试
  2. 整合反馈,重新设计游戏
  3. 重复步骤 1 和 2,直到游戏测试人员和设计者都满意为止


这个过程不仅耗时,而且明显存在不足:游戏越复杂,细微的缺陷就越容易被忽视。当游戏中有多个可供扮演的角色和大量相互关联的技能时,要达到平衡便更为困难。


今天,我们将介绍一种机器学习 (ML) 方法:训练模型充当游戏测试人员来调整游戏平衡,并在数字卡牌游戏原型 Chimera 上演示这种方法。先前,我们也用相同的测试平台演示了 ML 生成的艺术。这种基于 ML 的游戏测试方法使用训练好的智能体 (Agent) 通过数百万次模拟收集数据,让游戏设计者可以更高效地将游戏打造得更有趣、更平衡的同时也符合设计预期。

  • Chimera
    https://www.youtube.com/watch?v=hMWjerCqRFA&t=239s



Chimera

我们开发的 Chimera 是一个游戏原型,在开发过程中依赖了大量的机器学习。对于游戏本身,我们有针对性地设计了规则,扩大了可能性空间,使得很难通过传统的人工构建的 AI 来进行游戏。


Chimera 的玩法围绕奇美拉(Chimera,神话生物)展开,这些生物混合体将由玩家强化和进化。游戏的目标是打败对手的奇美拉。游戏设计中的关键点如下:

  • 玩家可以:

    • 操控生物,可发出攻击(使用攻击统计,attack stat)或受到攻击(减少生命统计,health stat);

    • 使用法术,产生特殊效果。

  • 生物被召唤到容量有限的生物群系,实际放置于牌桌空间。每个生物都有对应的偏好生物群系,如果被放置于不正确的生物群系或超出容量的生物群系则会受到重复伤害。

  • 玩家控制的是一只奇美拉,奇美拉最开始处于基本的“蛋”状态,通过吸收生物来进化和强化。为此,玩家还必须通过各种游戏机制获得一定的链接能量。

  • 当玩家成功将对方奇美拉的生命降至 0 时,游戏就会结束。



学习玩 Chimera

Chimera 是一款具有较大状态空间的不完美信息博弈 (Imperfect Information) 卡牌游戏,我们预计这会让 ML 模型难以学习,并且我们的目标还是一个相对简单的模型。我们的方法受 AlphaGo 等早期对弈智能体使用的方法启发,其中卷积神经网络 (CNN) 被训练来预测给定任意对弈状态下的获胜概率。在随机移动的对局上训练初始模型后,我们设置智能体与自己对战,反复收集对局数据,然后用于训练新的智能体。每次迭代后,训练数据的质量都会提高,智能体的游戏能力也会增强。

随着训练的推进,与性能最好的人工构建的 AI 相比,ML 智能体的表现情况:最初的 ML 智能体(版本 0)随机移动

  • AlphaGo
    https://deepmind.com/research/case-studies/alphago-the-story-so-far

       

对于模型接收为输入的实际游戏状态表征,我们发现将“图像”编码传递给 CNN 可获得最佳表现,结果超过了所有基准程序智能体和其他类型的网络(如完全连接)。选择的模型架构足够小,可以在合理时间内在 CPU 上运行。我们因此能够下载模型权重,并使用 Unity Barracuda 在 Chimera 游戏客户端中实时运行智能体。

用于训练神经网络的示例游戏状态表征

  • Unity Barracuda
    https://github.com/Unity-Technologies/barracuda-release


除了为游戏 AI 做出决策,我们还使用该模型显示玩家在游戏过程中的估计获胜概率



平衡 Chimera

在相同时间内,模拟方法可比真实玩家能够完成的对局多出数百万场。在收集了表现最好的智能体的游戏数据后,分析结果显示出我们设计的两种玩家卡组之间的不平衡。


首先,Evasion Link Gen 卡组的法术和生物能产生额外的链接能量进化玩家的奇美拉。它还包含使生物能够闪避攻击的法术。相比之下,Damage-Heal 卡组的生物具有多种实力和专注于治疗与造成轻微伤害的法术。虽然我们将这两套卡组设计为具有相同的实力,但是 Evasion Link Gen 卡组在与 Damage-Heal 卡组对战时取得了 60% 的胜率。


在我们收集与生物群系、生物、法术和奇美拉进化相关的各种统计数据后,有两个结果立刻浮现出来:
  1. 进化奇美拉可以带来显著优势 - 奇美拉进化次数更多的智能体更有可能赢得对局。然而,每场对局的平均进化次数并没有达到我们的预期。为了让它成为更核心的游戏机制,我们要增加总体平均进化次数,同时保持其使用策略。
  2. 霸王龙生物过于强大。它的出现与胜利密切相关,而且模型将始终选择霸王龙,不考虑召唤到错误或过度拥挤的生物群系的惩罚。


根据这些分析结果,我们对游戏做出了一些调整:
  1. 为了强调奇美拉进化是游戏的核心机制,我们将进化奇美拉所需的链接能量从 3 减少到 1。
  2. 我们还为霸王龙生物增加了一个“冷却”期,使其从任何行动中恢复的时间都增加了一倍。


使用更新后的规则重复“自我对局”训练程序,结果显示这些调整将游戏推向了预期的方向 - 每局游戏的平均进化次数有所增加,霸王龙的优势逐渐被削弱。

霸王龙平衡前后的影响力比较示例:图表呈现了当卡组发起特定法术互动(如,使用“闪避”法术强化霸王龙)时获胜(或失败)的对局数量。左:改动前,霸王龙在所有检查指标上都具有很强的影响力 - 最高的生存率,最有可能被无视惩罚地召唤,获胜时吸收的生物最多。右:改动后,霸王龙远不如先前强势


霸王龙的削弱成功减少了 Evasion Link Gen 卡组对强势生物的依赖。即便如此,两套卡组的胜率依然是 60/40,而不是 50/50。经过对各个游戏日志的深入研究,我们发现玩法的策略性通常低于预期。再次搜索收集的数据后,我们又发现几个需要改动的地方。


首先,我们增加了两个玩家的初始生命值以及治疗法术可以补充的生命值。这是为了鼓励更长时间的游戏,发展更多样的策略。特别是这使 Damage-Heal 卡组能够存活足够长的时间来发挥其治疗策略。为了鼓励符合设计的召唤和战略性生物群系放置,我们提升了将生物放入不正确或拥挤生物群系时受到的惩罚。最后,我们通过小范围的属性调整,缩小了最强和最弱生物之间的差距。


在新的调整到位后,我们得出了这两套卡组的最终游戏平衡数据:

卡组平均每场游戏进化数(前 → 后)胜率 %(100 万场对局)(前 → 后)
Evasion Link Gen1.54 → 2.1659.1% → 49.8%
Damage Heal0.86 → 1.7640.9% → 50.2%



结论

通常,在新的原型游戏中找出不平衡可能需要几个月的游戏测试。通过这种新方法,我们不仅能够发现潜在的不平衡,还能在几天之内做出调整加以改良。


我们发现,相对简单的神经网络便足以在与人类和传统游戏 AI 的竞争中表现出较高的水准。这些智能体还可以用于其他目的,例如指导新玩家或发现意外策略。我们希望这项成果能够激发更多关于机器学习用于游戏开发的可能性的探索。



致谢

此项目在大量人员的协作下共同完成。感谢 Ryan Poplin、Maxwell Hannaman、Taylor Steil、Adam Prins、Michal Todorovic、Xuefan Zhou、Aaron Cammarata、Andeep Toor、Trung Le、Erin Hoffman-John 和 Colin Boswell。感谢所有提供游戏测试、游戏设计建议和宝贵反馈的贡献者。



更多 AI 相关阅读:



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110640
 
508 次点击