SuperMemo(SM-2)的间隔重复算法

SuperMemo(SM-2)的间隔重复算法,第1张

SuperMemo(SM-2)的间隔重复算法 SuperMemo算法

这里有一些条款,我们会处理impementing的时候用的SuperMemo(SM-2)算法的间隔重复

  • 重复 -这是用户看到抽认卡的次数。
    0
    表示他们还没有研究过,
    1
    这是他们第一次学习,依此类推。
    n
    在某些文档中也将其称为。
  • 质量 -也称为评估质量。这是抽认卡(由用户定义)的难易程度。规模是从
    0
    5
  • 易用性 -也称为易用性因子或EFactor或EF。它是用于增加间隔重复中“空间”的乘数。范围是从
    1.3
    2.5
  • 时间间隔 -这是重复之间的时间长度(以天为单位)。它是间隔重复的“空间”。
  • nextPractice- 这是 抽认 卡再次审核的日期/时间。
默认值
int repetitions = 0;int interval = 1;float easiness = 2.5;

我发现该Python实现比SuperMemo示例源代码更容易遵循,所以我或多或少都遵循了。

private void calculateSuperMemo2Algorithm(FlashCard card, int quality) {    if (quality < 0 || quality > 5) {        // throw error here or ensure elsewhere that quality is always within 0-5    }    // retrieve the stored values (default values if new cards)    int repetitions = card.getRepetitions();    float easiness = card.getEasinessFactor();    int interval = card.getInterval();    // easiness factor    easiness = (float) Math.max(1.3, easiness + 0.1 - (5.0 - quality) * (0.08 + (5.0 - quality) * 0.02));    // repetitions    if (quality < 3) {        repetitions = 0;    } else {        repetitions += 1;    }    // interval    if (repetitions <= 1) {        interval = 1;    } else if (repetitions == 2) {        interval = 6;    } else {        interval = Math.round(interval * easiness);    }    // next practice     int millisecondsInDay = 60 * 60 * 24 * 1000;    long now = System.currentTimeMillis();    long nextPracticeDate = now + millisecondsInDay*interval;    // Store the nextPracticeDate in the database    // ...}
笔记
  • 上面的代码未对设置上限
    easiness
    。应该是
    2.5
    吗?文档和源代码似乎相互矛盾。
  • 该文档还表明,如果质量评估小于3,则不应更新易用性因子,但这似乎与源代码相矛盾。在我看来,更新它(将其保持在1.3以上)更有意义。无论如何,我每次都在更新它。
  • Anki源代码在这里。不过,这是一个很大的项目,我还没有深入研究它的算法版本。
  • 这篇文章讨论了SM-2的一些问题以及这些问题的解决方案。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5477760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存