diff --git a/assets/navigation.js b/assets/navigation.js index afacdc4..2cb1031 100644 --- a/assets/navigation.js +++ b/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA42WXW+bMBSG/wvXWbNkbbflLkraKdKkVlBNmqoJuXAI1rBh9iEfnfbfJ0wC2BjDFZLf8zzIX3Be/3oIJ/RWnk+Q8r038wqCqbfygJdMzuvRmxRZ5s2835TH3urLv1lDBUgQTEgNDjOPgR+0SJQRKUHOq1GdWSxNap3tc0ExZXa8iV2el3MBm5wfQGDf0gldjg0RcQtTjiASEoGcV4EOLu/uDXDHixIHaZW6FNVEn4kgDBCEtHr0Epds9yzgQOFo1VxDpyCIUojLDIRd0cQuia9e8z3fWx1NOkkxvLp6iUu2JQiGB88FyHkTGPTHr58Xd8uO4ZsgMZi0Ghwjdz7Iy5qZfCcas9TXtjrNpqRNRh0Q5SLWduWiuAaTDTsENmipwnHTdeZPBdKcy77NKBgzqm+UbYGaYMwQ5+Vbf5Pq0TGW8t7Zonz0VJWc9rBqbIzbPmzWP1vwQAQlb1l1nqtApz91wcf15uXJt5F14kIDP/gBQtKcW/k2dkjUjZE2vk4caAwJKTMMgVdAmJTv7zaPpWy6VKa5wBBBsAnqtnjCCxg5UVayUH2+DiRz+c3aCXoBf0qQ1ROB48AWDRZPeMHRJTw6BFFGWNHCSckjdZ3nKtDB+9suKIAgPLACz/rfuaPQSxyymCCEMU0Sm6YJxwSy/2s0LNL+d9RUCT1ttR6rdVwiE57V7YzajkJARBBiTzeazZ7mtPV8k6xGM6hJLT3hBGcuGMHB6Tepa/lkt0nqwFLIDwsHuAcOgmAubM1W67GUOaWovjGhIHxvnZRe4VDJND+qYxgykJLYbb2invDXfyQ/vP8CDAAA" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA42WXW+bMBSG/wvX2bJka7flLkq6LdKkVqSaVE0TcuEQrGGb2Yd8dNp/n4AGsDE2V5H8nuchtrE5P/8GCGcMVkFIkPJDMAsKglmwCoCXTM2b0bcZsjyYBb8pT4LVp3+zltojQTChenCc+bIP9x0S50QpUPNqVGcWS5Na5wchKWbMjrexy/N4KWAj+BEkDi290OXYEJl0MOUIMiUxqHkV6ODy5tYAd7wocZSuU5eimugDkYQBglRWj17ik4VwpHAaFTWxS7J7kOOKa+gU7OMMkjIHaVe0sUvS/M/v4mB1tOkkxfgW6SUu2ZYgGB68FKDmbWDQ7z5/XNwsjc35RhUKeTEdvchn+SpJAiZfD/rIXQjqdeVNvhf5LM0NUh0sU9IlXgfEQiba3r4qrsFkww6BjVqq0G+6zvy+QCq4GtqMAp+xvi5tC9QGPkMiyufhJjWjPpbywRtKuffdLDkdYNWYj9vebdZPHXgkkpLnvDoVVaDT77XDsN483oc2sklc6D7c/wCpqOBWvosdkvrEKBvfJA40gZSUOUbAKyBKy5cXm8dSNl2qMiExQpBsgrornvAARs6UlSyqL8EjyV1+s3aCXsKfElT1i8BxZItGiyc84OQSnhyCOCes6OC05HF9nOd1oIO3H/qgBIJwxwq86I1CT6GXOGQJQYgSmqY2TRv6BGr4gTUsyv6N1VQpPW+1dq9zvEYmPGs6q3o7CgkxQUgC3Wj2nZrT1n5Oshp9qSa1tKcTnEIygqPTb1PX8ql+v9aDlVRvFg7wABwkQSFtfV/nsZQ5pVjfMZEk/GCdlF7hUKlMnOrXMGKgFLHbBkUD4a//N+Yy8I0MAAA=" \ No newline at end of file diff --git a/assets/search.js b/assets/search.js index 24c3115..36eae45 100644 --- a/assets/search.js +++ b/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/classes/FSRS.html b/classes/FSRS.html index 51095e5..d391c58 100644 --- a/classes/FSRS.html +++ b/classes/FSRS.html @@ -2,7 +2,7 @@ window.__typeDocPluginKatexOptions=undefined; window.addEventListener('load', () => window.renderMathInElement(document.body, window.__typeDocPluginKatexOptions));
Protected
Optional
_seedProtected
intervalProtected
paramGet the parameters of the algorithm.
-Set the parameters of the algorithm.
+Protected
Optional
_seedProtected
intervalProtected
paramGet the parameters of the algorithm.
+Set the parameters of the algorithm.
Partial
If fuzzing is disabled or ivl is less than 2.5, it returns the original interval.
+0<request_retention<=1,Requested retention rate
+0<request_retention<=1,Requested retention rate
https://github.com/open-spaced-repetition/fsrs4anki/wiki/The-Algorithm#fsrs-45
The formula used is: $$I(r,s) = (r^{\frac{1}{DECAY}} - 1) / FACTOR \times s$$
Requested retention rate should be in the range (0,1]
-Card to be processed
Current time or scheduled time
Should the review count information(reps,lapses) be reset. (Optional)
Optional
afterHandler: ((recordLogItem: RecordLogItem) => R)Convert the result to another type. (Optional)
@@ -54,33 +54,33 @@interface RepeatRecordLog {
card: CardUnChecked; //see method: createEmptyCard
log: RevLogUnchecked; //see method: fsrs.repeat()
}
function forgetAfterHandler(recordLogItem: RecordLogItem): RepeatRecordLog {
return {
card: {
...(recordLogItem.card as Card & { cid: string }),
due: recordLogItem.card.due.getTime(),
state: State[recordLogItem.card.state] as StateType,
last_review: recordLogItem.card.last_review
? recordLogItem.card.last_review!.getTime()
: null,
},
log: {
...recordLogItem.log,
cid: (recordLogItem.card as Card & { cid: string }).cid,
due: recordLogItem.log.due.getTime(),
review: recordLogItem.log.review.getTime(),
state: State[recordLogItem.log.state] as StateType,
rating: Rating[recordLogItem.log.rating] as RatingType,
},
};
}
const now = new Date();
const f = fsrs();
const emptyCardFormAfterHandler = createEmptyCard(now, cardAfterHandler); //see method: createEmptyCard
const repeatFormAfterHandler = f.repeat(emptyCardFormAfterHandler, now, repeatAfterHandler); //see method: fsrs.repeat()
const { card } = repeatFormAfterHandler[Rating.Hard];
const forgetFromAfterHandler = f.forget(card, date_scheduler(now, 1, true), false, forgetAfterHandler);
-The formula used is : $$R(t,S) = (1 + \text{FACTOR} \times \frac{t}{9 \cdot S})^{\text{DECAY}}$$
t days since the last review
Stability (interval when R=90%)
r Retrievability (probability of recall)
-Get the retrievability of the card
+The formula used is : +
The formula used is : $$D_0(G) = w_4 - e^{(G-1) \cdot w_5} + 1 $$ $$D_0 = \min \lbrace \max \lbrace D_0(G),1 \rbrace,10 \rbrace$$ where the $$D_0(1)=w_4$$ when the first rating is good.
Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
Difficulty $$D \in [1,10]$$
-The formula used is : +
The formula used is : $$ S_0(G) = w_{G-1}$$ $$S_0 = \max \lbrace S_0,0.1\rbrace $$
Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
Stability (interval when R=90%)
-The formula used is : +
Display the collection of cards and logs for the card scheduled at the current time, after applying a specific grade rating.
+Display the collection of cards and logs for the card scheduled at the current time, after applying a specific grade rating.
Card to be processed
Current time or scheduled time
Rating of the review (Again, Hard, Good, Easy)
@@ -91,33 +91,33 @@interface RevLogUnchecked
extends Omit<ReviewLog, "due" | "review" | "state" | "rating"> {
cid: string;
due: Date | number;
state: StateType;
review: Date | number;
rating: RatingType;
}
interface NextRecordLog {
card: CardUnChecked; //see method: createEmptyCard
log: RevLogUnchecked;
}
function nextAfterHandler(recordLogItem: RecordLogItem) {
const recordItem = {
card: {
...(recordLogItem.card as Card & { cid: string }),
due: recordLogItem.card.due.getTime(),
state: State[recordLogItem.card.state] as StateType,
last_review: recordLogItem.card.last_review
? recordLogItem.card.last_review!.getTime()
: null,
},
log: {
...recordLogItem.log,
cid: (recordLogItem.card as Card & { cid: string }).cid,
due: recordLogItem.log.due.getTime(),
review: recordLogItem.log.review.getTime(),
state: State[recordLogItem.log.state] as StateType,
rating: Rating[recordLogItem.log.rating] as RatingType,
},
};
return recordItem
}
const card: Card = createEmptyCard(new Date(), cardAfterHandler); //see method: createEmptyCard
const f = fsrs();
const recordLogItem = f.repeat(card, new Date(), Rating.Again, nextAfterHandler);
-The formula used is : $$\text{next}_d = D - w_6 \cdot (g - 3)$$ $$D^\prime(D,R) = w_7 \cdot D_0(4) +(1 - w_7) \cdot \text{next}_d$$
Difficulty $$D \in [1,10]$$
Grade (rating at Anki) [1.again,2.hard,3.good,4.easy]
$$\text{next}_D$$
-The formula used is : +
The formula used is : $$S^\prime_f(D,S,R) = w_{11}\cdot D^{-w_{12}}\cdot ((S+1)^{w_{13}}-1) \cdot e^{w_{14}\cdot(1-R)}$$
Difficulty D \in [1,10]
Stability (interval when R=90%)
Retrievability (probability of recall)
S^\prime_f new stability after forgetting
-Stability (interval when R=90%)
+Stability (interval when R=90%)
t days since the last review
The formula used is : FSRSAlgorithm.calculate_interval_modifier
-The formula used is : $$S^\prime_r(D,S,R,G) = S\cdot(e^{w_8}\cdot (11-D)\cdot S^{-w_9}\cdot(e^{w_{10}\cdot(1-R)}-1)\cdot w_{15}(\text{if} G=2) \cdot w_{16}(\text{if} G=4)+1)$$
Difficulty D \in [1,10]
Stability (interval when R=90%)
Retrievability (probability of recall)
Grade (Rating[0.again,1.hard,2.good,3.easy])
S^\prime_r new stability after recall
-The formula used is : +
The formula used is : $$S^\prime_s(S,G) = S \cdot e^{w_{17} \cdot (G-3+w_{18})}$$
Stability (interval when R=90%)
Grade (Rating[0.again,1.hard,2.good,3.easy])
-Protected
params_Protected
params_Display the collection of cards and logs for the four scenarios after scheduling the card at the current time.
Card to be processed
Current time or scheduled time
Optional
afterHandler: ((recordLog: IPreview) => R)Convert the result to another type. (Optional)
@@ -127,10 +127,10 @@interface RevLogUnchecked
extends Omit<ReviewLog, "due" | "review" | "state" | "rating"> {
cid: string;
due: Date | number;
state: StateType;
review: Date | number;
rating: RatingType;
}
interface RepeatRecordLog {
card: CardUnChecked; //see method: createEmptyCard
log: RevLogUnchecked;
}
function repeatAfterHandler(recordLog: RecordLog) {
const record: { [key in Grade]: RepeatRecordLog } = {} as {
[key in Grade]: RepeatRecordLog;
};
for (const grade of Grades) {
record[grade] = {
card: {
...(recordLog[grade].card as Card & { cid: string }),
due: recordLog[grade].card.due.getTime(),
state: State[recordLog[grade].card.state] as StateType,
last_review: recordLog[grade].card.last_review
? recordLog[grade].card.last_review!.getTime()
: null,
},
log: {
...recordLog[grade].log,
cid: (recordLog[grade].card as Card & { cid: string }).cid,
due: recordLog[grade].log.due.getTime(),
review: recordLog[grade].log.review.getTime(),
state: State[recordLog[grade].log.state] as StateType,
rating: Rating[recordLog[grade].log.rating] as RatingType,
},
};
}
return record;
}
const card: Card = createEmptyCard(new Date(), cardAfterHandler); //see method: createEmptyCard
const f = fsrs();
const recordLog = f.repeat(card, new Date(), repeatAfterHandler);
-Reschedules the current card and returns the rescheduled collections and reschedule item.
+Reschedules the current card and returns the rescheduled collections and reschedule item.
The type of the record log item.
The current card to be rescheduled.
-The array of FSRSHistory objects representing the reviews.
+The array of FSRSHistory objects representing the reviews.
The optional reschedule options.
const f = fsrs()
const grades: Grade[] = [Rating.Good, Rating.Good, Rating.Good, Rating.Good]
const reviews_at = [
new Date(2024, 8, 13),
new Date(2024, 8, 13),
new Date(2024, 8, 17),
new Date(2024, 8, 28),
]
const reviews: FSRSHistory[] = []
for (let i = 0; i < grades.length; i++) {
reviews.push({
rating: grades[i],
review: reviews_at[i],
})
}
const results_short = scheduler.reschedule(
createEmptyCard(),
reviews,
{
skipManual: false,
}
)
console.log(results_short)
-const now = new Date();
const f = fsrs();
const emptyCardFormAfterHandler = createEmptyCard(now);
const repeatFormAfterHandler = f.repeat(emptyCardFormAfterHandler, now);
const { card, log } = repeatFormAfterHandler[Rating.Hard];
const rollbackFromAfterHandler = f.rollback(card, log);
@@ -147,4 +147,4 @@ ExampleExample
const now = new Date();
const f = fsrs();
const emptyCardFormAfterHandler = createEmptyCard(now, cardAfterHandler); //see method: createEmptyCard
const repeatFormAfterHandler = f.repeat(emptyCardFormAfterHandler, now, repeatAfterHandler); //see method: fsrs.repeat()
const { card, log } = repeatFormAfterHandler[Rating.Hard];
const rollbackFromAfterHandler = f.rollback(card, log, cardAfterHandler);
-
See
https://github.com/open-spaced-repetition/fsrs4anki/wiki/The-Algorithm#fsrs-45
-