我已经在Kaggle上提供了每个部分,以便更好地理解数据的处理方式和模型的编码方式。本文包含了前两部分,以便对我最终决定如何建模环境的原因进行一些说明。
第1部分:
https://www.kaggle.com/osbornep/lol-ai-model-part-1-initial-eda-and-first-mdp
第2部分:
https://www.kaggle.com/osbornep/lol-ai-model-part-2-redesign-mdp-with-gold-diff
第3部分:
https://www.kaggle.com/osbornep/lol-ai-model-part-3-final-output
这是一项正在进行中的工作,其目的仅仅是为了研究如果在游戏中引入更复杂的机器学习方法,会获得什么样的效果。这些方法不限于简单的摘要统计。
“英雄联盟”是一个以团队为单位的游戏,其中两个团队(每个团队中有5个玩家)竞争目标和杀戮。获得优势的玩家能够比他们的对手更强(获得更好的物品并且更快地升级),并且随着他们的优势增加,赢得游戏的可能性也增加。因此,我们有一系列事件依赖于先前的事件,导致一个团队摧毁另一个团队并赢得游戏。
像这样的序列在统计上建模并不是什么新鲜事; 多年来,研究人员已经考虑过如何在体育运动中应用这一点,例如篮球(https://arxiv.org/pdf/1507.01816.pdf)。其中传球,运球和犯规等一系列动作会导致球队获得或失去分数。
提到这一研究的目的是提供更详细的洞察力,超越一个简单的盒子分数(分别是篮球或视频游戏中的玩家获得的分数或杀戮),并将团队的表现建模一系列在时间上连续的事件。
在诸如英雄联盟等游戏中,以这种方式对事件进行建模更为重要,因为实现目标和杀戮会导致项目和级别优势。例如,获得游戏的First Blood的玩家会给他们带来金币,可用于购买更强大的物品。有了这个奖励,他们就可以变得足够强大,进行更多的杀戮,直到他们能够带领团队取得胜利。这样的领先优势通常被称为“滚雪球”,因为球员累积获得优势,但通常比赛不是单方面的,道具和团队合作更重要。
事实上,要准确的量化、衡量玩家在游戏中做出的决策是非常困难。无论收集多少数据,计算机都难以捕捉玩家的全部信息(至少目前为止是)。例如,玩家可能在游戏中超常发挥或发挥不好,或者可能只是以他们偏好的方式玩游戏(通常由他们玩的角色类型定义)。
有些玩家自然会更具攻击性并且会不断去收割“人头”,而其他玩家则会相对保守并尝试进行“推塔”。因此,我们进一步开发模型,以变玩家根据自己的表现调整玩法。
在第一部分中,我们进行了一些介绍性的统计分析。例如,如果团队在比赛中达成了事件1和事件2,我们就可以计算其获胜的概率,如下图所示。
以下两个方面,使我们的模型不仅仅是简单的数值统计,而是真正的AI:
我们如何定义马尔可夫决策过程并收集玩家的偏好,将决定我们的模型学习和输出什么。
通过初步的尝试,我们意识到,模型没有考虑负向和正向事件对后来状态的可能性的影响。换句话说,无论您在该时间点是领先还是落后,当前马卡洛夫决策过程(MDP)概率都可能发生。在游戏中,这根本不是真的; 如果你落后,那么杀人数,装备和建筑等就更难获得,我们需要考虑到这一点。
因此,我们引入团队之间的金币差异作为重新定义各状态的方式。在利用MDP过程定义状态时,不仅考虑各种关键事件(杀人、获得装备等),还考虑团队在金币数量上是否领先。我们将金币的差异分类如下:
当没有感兴趣的事件发生时,我们将其定义为“NONE”事件,确保每分钟至少存在一个事件。
这个'NONE'事件代表了战队是否决定尝试拖延比赛,并帮助区分那些在早期比赛中更好地获得金币领先而没有kill或推搭的团队。然而,这样做也大大扩展了我们的数据,因为现在已经添加了7个类别以适应可用的匹配,但是如果可以访问更多的正常匹配,那么数据量就足够了。和以前一样,我们可以通过以下方式概述每个步骤:
马尔可夫决策过程输出
我们的最终版本模型可以简单地归纳如下:
首先,我们调整模型代码,以便在Return计算中包含奖励。然后,当我们运行模型时,会对某些操作引入偏差,而不是简单地让奖励等于零。
在第1部分的例子中,我们展示了对行动进行正向加权的结果,然后在第2部分中,则对行动进行负向加权。
如果我们为行动提供强烈的积极奖励,则输出:'+ KILLS'
如果我们为行动提供强大的负面奖励,则输出:'+ KILLS'
因此,让我们尝试近似模拟玩家的实际偏好。在这种情况下,我随机化了一些奖励以遵循这两条规则:
因此,我们对杀人数和丢失物体的奖励都是-0.05的最小值,而其他行动则在-0.05和0.05之间随机化。
随机玩家奖励的输出
为所有操作输出随机玩家奖励
最终输出显示给定我们当前的黄金差异状态和分钟的每个动作的值
我已经大大简化了一些功能(例如“杀死”并不代表实际的杀伤数量),而且数据可能无法代表正常匹配。但是,我希望这清楚地展示了一个有趣的概念,并鼓励讨论如何进一步发展这一概念。
首先,我们将列出在实施之前需要进行的主要改进:
我们已经引入了影响模型输出的奖励,但是如何获取呢?根据之前的研究,我们认为最好的方法是考虑一个同时反映行为的个人效果和团队效果的奖励。
这变得越来越复杂,但简而言之,我们希望匹配一个玩家的决策,其中最佳的下一个决定取决于刚刚发生的事情。
例如,如果队员杀死了敌方团队的所有人,那么他们可能会推动获得Baron。我们的模型已经考虑了序列中发生事件的概率,因此我们也应该以相同的方式考虑玩家的决策。
这个想法来自以下研究,该研究解释了如何更详细地映射反馈:
https://www.researchgate.net/publication/259624959_DJ-MC_A_Reinforcement-Learning_Agent_for_Music_Playlist_Recommendation)
如何收集这些反馈,将决定我们的模型会取得多大成功。最终的目标是为玩家提供下一个最佳决策的实时建议。然后,在给定匹配统计数据的情况下,玩家将能够从排名最前的几个决策(按成功顺序排列)中进行选择。可以通过多个游戏跟踪此玩家的选择,以进一步学习和了解玩家的偏好。这也意味着我们不仅可以跟踪决策的结果,而且还可以知道该玩家试图实现的目标(例如,试图占据塔而是被杀死),并且会为更高级的分析开辟信息。
这样的事情可以使玩家在较低或正常技能水平下受益匪浅,因为玩家之间的决策难以清晰地沟通。它还可以帮助识别那些因其行为而“有毒”的球员,因为球队会通过投票系统同意比赛,然后可以看出有毒球员是否一直忽视他们的队友,而不是按照约定计划。
实际游戏设置中的模型推荐投票系统的示例
原文链接:
https://towardsdatascience.com/ai-in-video-games-improving-decision-making-in-league-of-legends-using-real-match-statistics-and-29ebc149b0d0