open-spaced-repetition / fsrs4anki

A modern Anki custom scheduling based on Free Spaced Repetition Scheduler algorithm
https://github.com/open-spaced-repetition/fsrs4anki/wiki
MIT License
2.76k stars 137 forks source link

[Question] Confusion about short term scheduling #669

Closed henryfoster closed 4 months ago

henryfoster commented 4 months ago

Before posting, please read the following:

Research

Enter an [x] character to confirm the points below:

Question Not using anki just interested in spaced repetition generally. In the code I found this comments and from reading the code they left me confused:

// FSRS only modifies the long-term scheduling. So (re)learning steps in deck options work as usual.
// I recommend setting steps shorter than 1 day.

FSRS only modifies the long-term scheduling. I can't find anything in the code that indicates that FSRS is NOT taking care of the scheduling of new re/learning state cards. So I wonder why the cases for is_learning(), is_new(), is_review() are there because they do set the the schedule : states.easy.normal.review.scheduledDays = easy_interval;

My second question is about this: I recommend setting steps shorter than 1 day. You recommend steps shorter than a day, but from the code the minimum interval is 1 day.

function next_interval(stability) {
    const new_interval = apply_fuzz(stability / FACTOR * (Math.pow(requestRetention, 1 / DECAY) - 1));
    return Math.min(Math.max(Math.round(new_interval), 1), maximumInterval);
}

So I got confused. For context I want to create a spaced repetition script for general learning and I got a bit confused what to do with the learning/relearning states because the interval of 1 day seems a bit too long, but I might be wrong and this is intended. As I said before I don't used anki that much so I don't know how it interacts with this code.

Q6: My first interval is too long! Is this normal? I've read the answer for this question but that still left me confused ^^

L-M-Sherlock commented 4 months ago

I can't find anything in the code that indicates that FSRS is NOT taking care of the scheduling of new re/learning state cards.

In FSRS-4.5 and older versions, FSRS doesn't update the memory state in is_learning() block.

But in FSRS-5, it considers the short-term scheduling.

henryfoster commented 4 months ago

I can't find anything in the code that indicates that FSRS is NOT taking care of the scheduling of new re/learning state cards.

In FSRS-4.5 and older versions, FSRS doesn't update the memory state in is_learning() block.

But in FSRS-5, it considers the short-term scheduling.

Does it mean it fully replaces the anki scheduler, and it should be used as "standalone" scheduler and all that anki does is setting the states like new, learning, review?

Or is it only meant to "prepare" the difficulty and stability for when the user reaches "review" state?

L-M-Sherlock commented 4 months ago

I recommend reading this article to understand the scheduler of Anki: https://juliensobczak.com/inspect/2022/05/30/anki-srs/

In short, Anki has two separate modules to set next review time: (re)learning steps and SM2/FSRS.

Expertium commented 4 months ago

OP, if I was in your shoes, I would ditch the (re)learning steps and just let FSRS (or whatever algorithm you want) handle all reviews. Anki's "dual" system is very janky, users cannot let FSRS do everything and have to manually choose learning steps, and it also creates a bunch of problems for FSRS itself.

henryfoster commented 4 months ago

OP, if I was in your shoes, I would ditch the (re)learning steps and just let FSRS (or whatever algorithm you want) handle all reviews. Anki's "dual" system is very janky, users cannot let FSRS do everything and have to manually choose learning steps, and it also creates a bunch of problems for FSRS itself.

Thanks for the advice, so if I would always run the part of the code in "review" mode instead of changing states, correct? Is this what you mean?

Expertium commented 4 months ago

Yes. Always run it in review mode. I also recommend modifying the code so that FSRS is allowed to make intervals shorter than 1 day. In Anki, cards in the "review" mode cannot have intervals shorter than one day, only cards in the "learning" mode can. But theoretically, there is no reason why FSRS can't schedule a card, say, 2 hours or 12 hours into the future, instead of 1 day.

henryfoster commented 4 months ago

Yes, that's definitely something I want to do, thank you

L-M-Sherlock commented 4 months ago

Is this issue resolved?

aleksejrs commented 4 months ago

In FSRS-4.5 and older versions, FSRS doesn't update the memory state in is_learning() block.

But in FSRS-5, it considers the short-term scheduling.

Does that mean I should answer learning steps honestly and not just according to when I want to see the card? And I won't have to finish all learning cards before the end of the day?

L-M-Sherlock commented 4 months ago

Does that mean I should answer learning steps honestly and not just according to when I want to see the card?

Keep your previous habit, because the parameters are optimized from it.

And I won't have to finish all learning cards before the end of the day?

Of course, it's OK.