客户要求我为在线学习网站添加简单间隔重复算法(SRS).但在把自己投入其中之前,我想与社区讨论.
基本上,该站点向用户询问一堆问题(通过自动选择来自数据库的100个总问题中的10个),并且用户给出正确或不正确的答案.然后将用户结果存储在数据库中,例如:
userid questionid correctlyanswered dateanswered
1 123 0 (no) 2010-01-01 10:00
1 124 1 (yes) 2010-01-01 11:00
1 125 1 (yes) 2010-01-01 12:00
Run Code Online (Sandbox Code Playgroud)
现在,为了最大化用户学习所有答案的能力,我应该能够应用SRS算法,以便用户下次参加测验时,会更频繁地接收错误答案的问题; 比正确回答的问题.此外,以前回答错误但最近经常回答正确的问题应该不经常发生.
有没有人之前实现过这样的东西?任何提示或建议?
Theese是我发现的最好的链接:
Anki是一个实现间隔重复的开源程序.作为开源,您可以浏览libanki的源代码,这是Anki的间隔重复库.从Januray 2013开始,Anki版本2源可以在这里浏览.
来源是Python
,在可执行的伪代码语言.读取源以理解算法可能是可行的.使用sqlalechmey
Python SQL工具包和Object Relational Mapper 定义数据模型,为应用程序开发人员提供SQL的全部功能和灵活性.
你想要做的是X_i
为所有问题都有一个数字i
.您可以将这些数字标准化(使它们的总和为1)并进行优先选择.
如果N
是不同的问题数,M
是每个问题已经被平均回答的次数,那么你会发现X
在M*N
这样的时刻:
X[N]
设置为0.i
回答错了,增加N[i]
通过f(t)
其中t
的应答时间,f
是incresing功能.因为f
正在增加,很久以前回答错误的问题比昨天回答的问题影响小.你可以尝试不同的方式f
来获得一个好的行为.
更智能的方法
更快的方法是不在X[]
每次选择问题时生成,而是将其保存在数据库表中.您无法f
使用此解决方案.相反,只要每次错误地回答问题时加1,然后定期运行表 - 比如说每个午夜 - 然后将所有数字乘以X[i]
常数 - 比如说0.9
.
更新:实际上,您应该将数据基于更正,而不是错误.否则长时间没有回答既不是真实也不是错误的问题将被选中的机会较小.它应该是相反的.