1

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

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

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

所以想象一下,你在投了 50,000 票后到达了这个功能。鉴于我们可以在后台预期各种非传递性结果,并且与性能评级有相当大的偏差,有没有一种方法可以计算出我最需要更多数据的比赛?这似乎并不像在排序列表中选择两个相邻的具有最接近分数的字符那样简单,或者只关注列表的顶部。

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

4

2 回答 2

1

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

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

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

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

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

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

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

于 2019-04-15T02:11:57.527 回答
0

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

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

通过这种方式,您可以确保每个人都参与了相当数量的“比赛”。

于 2019-04-15T15:47:07.597 回答