用于学习的间隔重复(SRS)

Fre*_*son 15 sql algorithm

客户要求我为在线学习网站添加简单间隔重复算法(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是我发现的最好的链接:

gim*_*mel 8

Anki是一个实现间隔重复的开源程序.作为开源,您可以浏览libanki的源代码,这是Anki的间隔重复库.从Januray 2013开始,Anki版本2源可以在这里浏览.

来源是Python,在可执行的伪代码语言.读取源以理解算法可能是可行的.使用sqlalechmeyPython SQL工具包和Object Relational Mapper 定义数据模型,为应用程序开发人员提供SQL的全部功能和灵活性.

  • Anki是Affero GPL(即有效的GPL).如果您"移植"它,您的应用程序可能需要是Affero GPL'd(病毒许可证).小心这种方法.如果有人能够将Anki的SRS引擎抽象成一个独立的项目,然后可以插入任何前端并要求Damien制作LGPL(因此使用它的应用程序不会是GPL),那就太棒了.但是理解和解开Anki内部结构将会有一些工作,即使那时Damien可能也不想让非Affero GPL成为SRS引擎. (2认同)

Tho*_*hle 6

你想要做的是X_i为所有问题都有一个数字i.您可以将这些数字标准化(使它们的总和为1)并进行优先选择.

如果N是不同的问题数,M是每个问题已经被平均回答的次数,那么你会发现XM*N这样的时刻:

  • 将数组X[N]设置为0.
  • 通过数据运行,每次你看到时间的问题i回答错了,增加N[i]通过f(t)其中t的应答时间,f是incresing功能.

因为f正在增加,很久以前回答错误的问题比昨天回答的问题影响小.你可以尝试不同的方式f来获得一个好的行为.

更智能的方法 更快的方法是不在X[]每次选择问题时生成,而是将其保存在数据库表中.您无法f使用此解决方案.相反,只要每次错误地回答问题时加1,然后定期运行表 - 比如说每个午夜 - 然后将所有数字乘以X[i]常数 - 比如说0.9.

更新:实际上,您应该将数据基于更正,而不是错误.否则长时间没有回答既不是真实也不是错误的问题将被选中的机会较小.它应该是相反的.