【问题标题】:How to choose matchups in an ELO ratings system as matchups accumulate随着对战累积,如何在 ELO 评级系统中选择对战
【发布时间】:2019-04-15 23:47:07
【问题描述】:

我正在开发一款众包应用程序,该应用程序将让来自不同系列的大约 64 位虚构强人/女强人相互对抗,并尝试确定谁是最强者。 (想想“蝙蝠侠大战蜘蛛侠”的大篇幅)。用户将一次在两人之间选择任何给定比赛的获胜者。

在研究了许多排序算法后,我发现这个很棒的SO post 概述了 ELO 评级系统,这看起来绝对完美。我已经阅读了系统并了解如何在比赛中奖励/减去分数,以及如何根据过去的结果计算任意两个角色之间的表现评分。

我似乎找不到任何有效且明智的方法来确定在给定时间让哪两个角色相互对抗。自然它会随机开始,但很快就会累积或降低积分。我们可以预期会有很多分歧,但如果我设计得当,也会有大量的用户参与。

因此,假设您在获得 50,000 票后才使用此功能。考虑到我们可以期待各种非传递性结果,以及与性能评级的相当大的偏差,有没有办法计算我最需要更多数据的比赛?这似乎并不像在排序列表中选择得分最接近的两个相邻字符,或者只关注列表顶部那么简单。

有 64 名参赛者(是的,我确实考虑过并拒绝了一个括号!),我不担心在每次比赛后重新计算性能评级。我只是不知道如何选择下一个,因为我们将不知道每个选民的偏见和最喜欢的角色。

【问题讨论】:

    标签: sorting ranking rating ranking-functions


    【解决方案1】:

    您在多人游戏中体验到的惊人变化是,不同等级的不同人在不同时间“排队”。

    通过 ELO 系统,理想情况下,所有玩家都应该与得分最接近的可用玩家匹配。因为,如果我理解正确的话,你的游戏中的 64 个“玩家”总是可用的,所以这种组合会导致缺乏多样性,因为最佳匹配永远是最佳的。

    要解决此问题,我建议根据您的“玩家”何时想再次玩游戏来实施优先级队列。例如,如果一个人想要长时间休息,他们可能会获得较低的优先级并被排在队列的末尾,这意味着您需要一段时间才能再次见到他们。如果一个人想休息一下,也许在大约 10 场比赛之后,你会再次在比赛中看到他们。

    这种“愿望”可以随机完成,您可以为每个角色分配不同的特征来扭曲这种行为,例如,“与更高 ELO 的玩家获胜将使该玩家更有可能更快地再次上场”。从游戏设计的角度来看,这些个性会让我觉得角色更有趣,让我想留下来。

    所以在这里你有一个想要玩的玩家的有序列表。我可以想到您可能会采取的三种实际配对方法:

    1. 查看队列中的前 5 名玩家并选择最佳匹配项
    2. 在队列中的接下来的 4 名玩家中将第一位玩家与他们的最佳匹配匹配(可能等待的时间最长,因此应立即排队,无论匹配的公平性如何)
    3. 两者兼而有之,如果列表顶部的人没有被选中,他们的“熵”会增加,这会影响 ELO 计算,使他们更有可能匹配

    编辑 从实现的角度来看,我建议使用增量列表而不是实际的优先级队列,因为玩家在等待时应该被“提升”。

    【讨论】:

      【解决方案2】:

      为避免明显的赢家与较松的情况,您将玩家分组。 显然,最初每个人都将处于同一层 [0 - N1]。 然后在层级内制定轮换时间表,以便每两方至少可以“匹配”一次。

      但是,如果您不想保持日程安排……那么请始终与参加“比赛”次数最少的一方匹配。如果其中有多个,请随机选择。

      这样您就可以确保每个人都参加相当数量的“比赛”。

      【讨论】:

        猜你喜欢
        • 2020-03-31
        • 2019-08-15
        • 1970-01-01
        • 2014-07-19
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        相关资源
        最近更新 更多