Spaced-repetition scheduling engine: SM-2 and FSRS-style schedulers, review-log replay, deterministic simulation, and load forecasting.
答对: interval(n) = interval(n-1) × EF
答错: interval = 1
EF 下限 1.3| 符号 | 含义 |
|---|---|
| D | Difficulty,这张卡本身多难(1–10) |
| S | Stability,记忆保持天数 |
| R | Retrievability,此刻还记得的概率 |
R(t, S) = (1 + 19/81 × t/S)^(-0.5)moon check
moon test
# 用示例日志对比两种调度器
moon run cmd/recall -- compare --log examples/reviews.jsonl --a sm2 --b fsrs
# 预测未来 90 天的复习量
moon run cmd/recall -- simulate --scheduler fsrs --days 90 --new-per-day 20 --review-limit 200
# 看自己的保留率曲线
moon run cmd/recall -- curve --log examples/reviews.jsonl --buckets 10recall replay --log <file.jsonl> --scheduler sm2|fsrs|leitner [--json]
recall compare --log <file.jsonl> --a sm2 --b fsrs
recall simulate --scheduler fsrs --days 90 --new-per-day 20 --review-limit 200 --policy realistic
recall stats --log <file.jsonl>
recall curve --log <file.jsonl> --buckets 10{"card_id":"c1","reviewed_at":1700000000,"due_at":1699999000,"grade":3,"elapsed_days":1.0}| 字段 | 含义 |
|---|---|
| card_id | 卡片标识 |
| reviewed_at | 实际复习时刻(Unix 秒) |
| due_at | 当时系统认为的到期时刻(用于算 overdue) |
| grade | 0=Again 1-2=Hard 3=Good 4-5=Easy |
| elapsed_days | 距上次复习天数,首次为 0 |
src/
types.mbt Grade / Timestamp / CardState / Phase
log.mbt ReviewEvent / ReviewLog / JSONL
scheduler.mbt Scheduler trait
sm2.mbt SuperMemo 2
fsrs.mbt FSRS-5 公式实现
leitner.mbt Leitner 盒子(对照基线)
replay.mbt 重放与跨调度器对比
simulate.mbt 未来负载模拟
stats.mbt 卡片统计与保留率曲线
cmd/recall/
main.mbt CLIInstall
Download zipSpaced-repetition scheduling engine: SM-2 and FSRS-style schedulers, review-log replay, deterministic simulation, and load forecasting.