← 返回目录


anki如何设置三个时间间隔?

学校≠教育≠技能;文凭溢价=80%信号传递+20%人力资本

23 👍 / 0 💬

问题描述

底部的三个时间如何设置呢,怎么样的时间间隔才算合理?


这三个时间间隔是由 Anki 的安排算法计算得出的。

关于 Anki 算法的通俗介绍可以看这篇文章:

叶峻峣:Anki 算法与术语浅谈

嫌简单?那继续往下看吧!


Anki 术语

新卡片

graduating interval: 新卡片学习以 'Good' 结束后进入复习阶段的第一个间隔

easy interval: 新卡片学习以 'Easy' 结束后进入复习阶段的第一个间隔

starting ease: 初始间隔基数,默认 250%

复习

easy bonus: 简单奖励系数,默认 130%

interval modifier: 间隔系数修饰,默认 100%

maximum interval: 最大间隔

hard interval: 'Hard' 间隔系数,默认为 120%

遗忘

new interval: 遗忘间隔系数

minimum interval: 遗忘最小间隔

leech threshold: 顽固卡片遗忘次数门槛

leech action: 对顽固卡片的处理

Anki 算法

初始化

间隔系数 = 初始间隔基数​,默认为 250%

again/重来

新间隔 = 上次规划间隔 * 遗忘间隔系数

间隔系数减少 20%

hard/困难

新间隔 = 上次规划间隔 * 'Hard' 间隔系数

间隔系数减少 15%

good/一般

新间隔 = (上次规划间隔 + 延迟 ) * 间隔系数

间隔系数不变

easy/简单

新间隔 = (上次规划间隔 + 延迟) * 间隔系数 * 简单奖励系数

间隔系数增加 15%

early/提早

新间隔 = (上次规划间隔 - 提早) * 间隔系数 * 提早奖励系数

提早奖励系数 = (简单奖励系数 - 100%) / 2 + 100%

间隔系数由具体选项确定

通用

规划间隔 = 新间隔 ​* 间隔系数修饰

code/代码

def _rescheduleRev(self, card: Card, ease: int, early: bool) -> None:
# update interval
card.lastIvl = card.ivl
if early:
self._updateEarlyRevIvl(card, ease)
else:
self._updateRevIvl(card, ease)

# then the rest
card.factor = max(1300, card.factor + [-150, 0, 150][ease - 2])
card.due = self.today + card.ivl

# card leaves filtered deck
self._removeFromFiltered(card)

def _nextRevIvl(self, card: Card, ease: int, fuzz: bool) -> int:
"Next review interval for CARD, given EASE."
delay = self._daysLate(card)
conf = self._revConf(card)
fct = card.factor / 1000
hardFactor = conf.get("hardFactor", 1.2)
if hardFactor > 1:
hardMin = card.ivl
else:
hardMin = 0
ivl2 = self._constrainedIvl(card.ivl * hardFactor, conf, hardMin, fuzz)
if ease == BUTTON_TWO:
return ivl2

ivl3 = self._constrainedIvl((card.ivl + delay // 2) * fct, conf, ivl2, fuzz)
if ease == BUTTON_THREE:
return ivl3

ivl4 = self._constrainedIvl(
(card.ivl + delay) * fct * conf["ease4"], conf, ivl3, fuzz
)
return ivl4

以上就是 Anki 算法的介绍,关于它的前身 SuperMemo 2 算法的诞生,可参阅以下文章:

叶峻峣:04 SuperMemo 1.0: 日志 (1987)


← 返回目录