【问题标题】:How can I calculate a fair overall game score based on a variable number of matches?如何根据可变数量的比赛计算公平的整体游戏得分?
【发布时间】:2010-09-21 18:45:39
【问题描述】:

我有一个游戏,你可以在每场比赛中得分 -40 到 +40。 允许用户进行任意数量的比赛。 我想计算一个隐含地考虑到比赛次数的总分。

只计算平均值是不公平的。 例如,如果彼得打了四场比赛,每场比赛得到 40 分,那么他的总分是一样的 扮演只打了一场比赛得到 40 分的 Janne。

将比赛分数相加也不公平。 彼得打了2场比赛(每场40分),总分80分。 Janne打了8场比赛(每场10分),总分80分。

有没有(简单)公平的方法来计算总分? 我读过 Elo & Glicko 国际象棋评分系统,但两者都是基于 玩家评分历史和对手评分。

【问题讨论】:

  • 这是数学课本上的吗?
  • 从你的描述中看不出这是单人游戏还是多人对战。

标签: math statistics


【解决方案1】:

这取决于你想强调什么,但我认为这既简单又有效:

平均得分 + 玩过的游戏

您可以稍微加权变量(例如,玩 2 场比赛,如果您想产生更大的影响) - 但基本关系似乎是合理的。

在您的第一个示例中,彼得有 44 分,简有 40 分 - 但如果彼得开始失分,简可以追上。

【讨论】:

  • 谢谢菲尔,这正是我想要的。最好的总分应该给总分最高且游戏次数最少的玩家。
  • 嘿。也许 SO 也应该这样工作。接受的答案,但没有投票。仅在 SO 上,嗯 ;-)
  • 我觉得这太武断了,不得不凭空捏造这些重量。我偏爱我可能过于数学化的方法:使用平均置信区间的下限。这就像对经过足够多的比赛后的真实平均水平的悲观估计。
  • 这个方法还有一个问题是它有一个上限......如果一个用户玩了几百场比赛,那么这个平均分就没有足够的影响力,因为平均分只有0 -40,但玩的游戏是 1-infinite。我认为这种解决方案只会延迟问题,并且在短期内效果很好,但在长期内效果不佳。它过于重视游戏的数量。
  • 对不起,但是,我真的不知道要建议什么解决方案。我知道我有点反帮助,但只是想指出它作为一个考虑因素。我也刚刚意识到这个问题非常古老。对此也很抱歉。
【解决方案2】:

另一种方法是使用贝叶斯统计。将每个团队获胜的概率建模为 beta 分布,并计算一个分布中的样本大于另一个分布的样本的概率。这种方法用于测试抗癌药物。它不仅考虑了哪种药物具有更好的反应率,还考虑了哪种药物具有更多的数据。比较两名球员或两支球队完全类似。

这听起来可能比实际复杂,但有free software 可以进行这些计算,并且在某些情况下,这些计算很容易手动完成。

请参阅 an introduction to random inequalities 和有关 beta distribution inequalities 的详细信息。

【讨论】:

  • 这真的很聪明。但是如何将其转化为一个简单的指标,即每个玩家得分的数字?
【解决方案3】:

我认为没有好的方法可以在单个数字中创建这样的分数。

我建议计算平均成功率并包括游戏次数。例如

  • 彼得得分 40/2(两场比赛平均 40 分)
  • Janne 得分 10/8(8 场比赛场均 10 分)

您可以快速查看第二个数字是否更大,第一个数字更准确。

否则使用 E​​LO,但仅当每个玩家至少参加 10 场比赛时才是准确的。

【讨论】:

    【解决方案4】:

    【讨论】:

      【解决方案5】:

      您可以查看Microsofts TruSkill,几个月前我读过它,老实说,我已经忘记了大部分细节,所以我不确定它是否超级合适,但这可能是一个很好的灵感。

      【讨论】:

        【解决方案6】:

        我建议将游戏分数设为 95% 置信区间的下限。在极限情况下,当您玩很多游戏时,您的游戏分数会接近您的平均分数,但始终严格低于平均分数。这就像使用平均分数,但适当地怀疑只玩了几场比赛并且可能只是幸运的人。

        换句话说,这是对玩了足够多的游戏后的真实平均水平的悲观估计。

        如何在不存储整个分数列表的情况下计算 95% 置信区间: Computing a mean confidence interval without storing all the data points

        或者,如果您跟踪所玩游戏的数量、该人的得分总和以及他们得分的平方和,您可以按如下方式计算标准误:

        SE = sqrt((ss - s^2/n) / (n-1) / n)
        

        您可以让游戏分数为:

        s/n - SE
        

        请注意,当只玩了一场游戏时,上述是负无穷大。这意味着你会给只玩过一场游戏的人尽可能低的分数作为他们的游戏分数。

        另一个想法是在对人进行排名时明确显示置信区间(按低端排序)。然后人们会玩更多的游戏来缩小他们的 CI 并提高他们的平均水平。

        最后,增加最近游戏的权重可能是有意义的,这样孤立的糟糕游戏的重要性会更快衰减。这样做的方法是选择大于 1 的折扣因子d 并赋予ith 游戏的权重d^(i-1)。 (虽然那时我不再确定如何应用置信区间的想法。)

        PS:我在这里扩展了这个想法:How to calculate mean based on number of votes/scores/samples/etc?

        【讨论】:

        • 这听起来很有用。我可能会用类似的东西替换我提案中的“平均分数”部分。不过,我仍然会保留“游戏数”这个词。我不介意也看到你想到的论坛。
        • 感谢您发布论坛。我认为这会通过进一步加权平均数来促进重复成功来改善情况。
        • 为了背负“旧游戏衰变”......你本质上是在描述一个加权移动平均线,实际上经典 CI 在那里崩溃了。你可以构建一个贝叶斯可信区间,但它会有点混乱。做贝叶斯也可以摆脱“一局”的问题。
        【解决方案7】:

        使公式与游戏次数有关。

        设 G 为比赛次数,S 为所有比赛得分之和,则, TotalScore = G^2 * S

        玩弄它,直到找到看起来合乎逻辑的东西。

        【讨论】:

          【解决方案8】:

          您可以检查获胜次数并为连续获胜(+5、+10、+15...)提供奖励积分,因此 (-10,+10,+10,+10,-10,+10)将给出 (-10,+10,+15,+20,-10,+10)。您也可以在不关心运行的情况下执行此操作,这将给出 (-10,+10,+15,+20,-10,+25)。

          另一种可能性是在开始时将奖励值设置为 0,如果玩家输了,它会减少 5,如果玩家赢,它会增加 5。

          【讨论】:

            【解决方案9】:

            您可以将分数设置为玩家在过去 30 场比赛中最好的 10 场比赛的平均值(或其他一些数字 - 也许只有最后 10 场适合您)。

            尚未玩过 10 场比赛的玩家可以取他们玩过的比赛的平均值,然后将其加权为 0,以弥补 n

            或者算出每场比赛的全球平均得分是多少(可能是 0),然后在计算少于 10 场比赛的球员的得分时加上该数量的 (10-n) 个假得分。

            【讨论】:

              【解决方案10】:

              另一个起点可能是关于ELO国际象棋排名系统的维基百科文章

              【讨论】:

                【解决方案11】:

                构造一个图,每个人都由一个顶点表示。图中的每条边代表两个玩家之间的一系列比赛。现在应用某种类型的页面排名算法为您提供一组顶点权重。这应该会给你你的排名。

                现在棘手的部分是选择 pagerank 中使用的边缘权重。对于有向边 (u,v)——从顶点 u 到顶点 v——我个人会分配一个权重,等于玩家 u 赢得玩家 v 的分数。

                您可以随时将顶点添加到图表中,但请记住,页面排名有利于较旧的顶点(即那些玩过更多游戏的顶点!)。无论如何供参考:

                http://dbpubs.stanford.edu:8090/pub/1999-66

                另一种想法是使用 ELO 评级,并尝试通过为每个人分配相同的分数开始引导它,然后向前传播分数。不过,我不能说这是完全令人满意的。

                【讨论】:

                  【解决方案12】:

                  这取决于您希望对所玩游戏与得分相比的权重。您可以定义一个返回游戏权重的函数:只有一个游戏的小部分和很多游戏的 1(例如 1 - 1/(2 * #Games))和累积分数的倍数。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-03-02
                    • 2011-10-20
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-11-25
                    • 2011-09-06
                    相关资源
                    最近更新 更多