随着比赛的积累,如何在 ELO 评级系统中选择比赛

How to choose matchups in an ELO ratings system as matchups accumulate

我正在开发一款众包应用程序,它将让来自不同特许经营权的大约 64 个虚构 strongmen/strongwomen 相互竞争,并尝试确定谁是最强的。 (认为​​ "Batman vs. Spiderman" 写得很大)。用户将一次选择两人之间任何给定比赛的获胜者。

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

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

想象一下,您在获得 50,000 票后才到达此功能。鉴于我们可以预期引擎盖下的各种非传递结果,以及与性能评级的相当大的偏差,是否有一种方法可以计算出我最需要更多数据的哪些对决?这似乎不像在排序列表中选择分数最接近的两个相邻字符,或者只关注列表顶部那么简单。

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

您在多人游戏中体验到的惊人变化是不同的人在不同的时间获得不同的评级"queue up"。

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

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

这个"desire"可以随机完成,你可以给每个角色分配不同的特征来扭曲这个行为,比如"winning against a higher ELO player will make it more likely that this player will play again sooner"。从游戏设计的角度来看,这些个性会让角色看起来更有趣,让我想留下来。

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

  1. 查看队列中的前 5 位玩家并选择最佳匹配
  2. 将第一个玩家与队列中接下来的 4 位玩家中的最佳匹配匹配(大概等待时间最长,因此应该立即排队,无论匹配的公平性如何)
  3. 两者的结合,如果排在榜首的人没有被选中,他们会增加 "entropy",这会影响 ELO 计算,使他们更有可能被匹配

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

为了避免明显的赢家与输家的局面,您将玩家分组。 显然,最初每个人都在同一层 [0 - N1]。 然后在层级内制定轮换时间表,这样每两方可以 "match" 至少一次。

但是,如果您不想保持进度...那么总是与参与最少 "matches" 的一方匹配。如果有多个,请随机选择。

通过这种方式,您可以确保每个人参与的 "matches"。