假设您有一款游戏,会向玩家提出一系列正确或错误的问题。玩家回答他们,程序会记住回答历史。
历史只是一个 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/