algorithm - 计算问答游戏的准确性

标签 algorithm probability

假设您有一款游戏,会向玩家提出一系列正确或错误的问题。玩家回答他们,程序会记住回答历史。

历史只是一个 bool 数组,显示玩家是否正确,并在数组的开头插入新问题。

确定当前球员表现的最佳方法是什么?

您可以取平均错误率(假设每 10 个问题有 1 个错误)。但这会惩罚玩家很久以前犯的错误。

您可以添加一种阻尼,以便随着时间的推移旧错误的“影响力”降低。基本上是指数加权移动平均线。

我已经尝试过这些方法并且效果很好。我尝试研究贝叶斯网络,但它们似乎不适用于此处。它们似乎只对您在多个方面之间建立关系的情况有用。在这种情况下,只有一件事:“玩家正确的几率”。

谁能建议一种找到“玩家表现”值的好方法,也就是玩家在下一回合正确的概率?

最佳答案

到目前为止,您的方法很好,但有一种方法可以显着提高玩家在下一个问题上的预测表现。这个想法是为每个玩家分配一个技能等级,并使用 ELO rating system 为每个问题分配一个难度等级。 .

您可能熟悉 ELO 评级来预测游戏中两名玩家之间的比赛结果,但玩家与琐事问题同样有效。事实上流行的国际象棋问题网站chesstempo使用这个确切的系统。

玩家回答问题后,玩家和问题的评分会根据他们之前的评分、他们的 K 因子以及玩家是否答对了问题进行了相应更新。答对即为玩家获胜,答错即为题目获胜。

玩家对下一个问题的预测表现由以下公式给出:

P(right answer) = 1/(1+10^((R_q-R_p)/400))

其中R_q是问题评分,R_p是玩家评分。

该系统应解决您的所有顾虑,包括减少较旧答案的权重 - 这是由 K 因子处理的。

它还考虑了问题的难度,这应该是估计玩家是否会正确回答问题的重要因素。

作为额外的好处,它可以帮助您为给定用户选择适当难度的问题。

关于algorithm - 计算问答游戏的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48839313/

相关文章:

algorithm - 贪心算法实现,Haskell

java - 有效地确定列表中的元素应该被删除

java - 所有可能的对

r - 计算 R 中两次掷骰总和的概率

algorithm - 如何在粒子滤波算法中确定性地选择基础样本?

algorithm - 识别这个采样算法? (R 样本() 函数)

algorithm - 如何在删除/添加/更新元素后连续检查数组是否已排序

algorithm - 用opencv区分对象

java - 了解 Java 中合并排序算法的关键操作计数

java - Java 中的离散概率分布