我正在开发一个众包的应用程序,该应用程序将使来自不同专营权的约64位虚构的强人/女强人相互对立,并尝试确定谁是最强者。 (认为“蝙蝠侠与蜘蛛侠”比较大)。用户将一次在两个之间选择任何给定比赛的获胜者。
在研究了许多排序算法之后,我发现这个奇妙的SO post概述了ELO评级系统,这看起来绝对是完美的。我已经阅读了该系统,并了解了如何在对战中加分/减分以及如何根据过去的结果计算任意两个字符之间的性能等级。
我似乎找不到任何有效且明智的方法来确定在给定的时间将哪个两个字符相互对撞。自然,它会随机开始,但是很快点就会累积或降级。我们可以期望会有很多分歧,但是,如果我设计正确的话,还会有大量的用户参与。
因此,假设您在投了50,000张选票后就到达了此功能。鉴于我们可以期待各种非传递性结果,并且与性能评级存在相当大的偏差,是否有一种方法可以计算出我最需要更多数据的比赛?它看起来并不像在得分最高的排序列表中选择两个相邻字符,或者只是将焦点放在列表顶部那样简单。
有64名参赛者(是的,我确实考虑过并拒绝括号!),我不必担心每次比赛后都会重新计算性能等级。我只是不知道如何选择下一个,因为我们将不了解每个选民的偏见和喜欢的角色。
答案 0 :(得分:1)
您在多人游戏中遇到的惊人变化是,具有不同等级的不同人在不同时间“排队”。
通过ELO系统,理想情况下,所有玩家都应与得分最接近的可用玩家配对。由于,如果我理解正确,那么您游戏中的64位“玩家”总是可用的,因此这种组合会导致缺乏多样性,因为最佳比赛对决永远都是最佳的。
要解决此问题,我建议根据您的“玩家”何时想再次玩游戏来实现优先级队列。例如,如果您想休息片刻,他们可能会获得较低的优先级,并被排在队列的尽头,这意味着您将需要一段时间才能再次看到他们。如果您想短暂休息一下,也许在大约10场比赛之后,您会在比赛中再次看到他们。
此“愿望”可以随机进行,您可以为每个角色分配不同的特征以歪曲此行为,例如,“与更高级别的ELO玩家竞争将使该玩家更有可能早日再次玩牌”。从游戏设计的角度来看,这些个性会让角色对我来说看起来更有趣,让我想坚持下去。
因此,您在这里有一个想要玩的球员的有序列表。我可以想到三种可能用于实际配对的方法:
修改 从实现的角度来看,我建议使用增量列表,而不是实际的优先级队列,因为玩家在等待时应被“提升”。
答案 1 :(得分:0)
为避免明显的获胜者与较松散的情况,您可以将玩家按等级分组。 显然,最初每个人都将处于同一等级[0-N1]。 然后在该层中,制定轮换时间表,以便每两个参与方至少可以“匹配”一次。
但是,如果您不想保持时间表...则总是与参加“匹配”次数最少的一方匹配。如果有多个,则随机选择。
这样,您可以确保每个人都参与相当数量的“匹配”。