open-spaced-repetition / fsrs4anki-helper

An Anki add-on that supports Postpone & Advance & Load Balance & Easy Days & Disperse Siblings & Flatten
https://ankiweb.net/shared/info/759844606
MIT License
213 stars 17 forks source link

Feat/reschedule cards only when the odds is different by 25% #462

Closed L-M-Sherlock closed 1 month ago

L-M-Sherlock commented 2 months ago

close #419

patch: fsrs4anki-helper.ankiaddon.zip

However, it would break load balance & easy days.

user1823 commented 2 months ago

However, it would break load balance & easy days.

What if we create a new option for this feature? Well, the add-on's menu is getting complicated but I think that this feature deserves it own entry.

A new option also makes sense because I want this option to handle cards with siblings differently (https://github.com/open-spaced-repetition/fsrs4anki-helper/issues/419#issuecomment-2358462153).

A clearer restatement of my suggestion there: When "Disperse siblings after rescheduling" is enabled, reschedule ONLY the sibling whose current interval deviates the most from the ideal one. The disperse function that runs automatically will handle the rest.

Expertium commented 2 months ago

I'll copy what I said in the related issue

If you want me to test different values, you can make reduced_odds = (1-x)*odds and increased_odds = (1+x)*odds, where x can be configured in add-on config.

Expertium commented 2 months ago

@user1823

I think that this feature deserves it own entry.

I disagree. First of all, if there are two rescheduling features, the user will be like "So this is rescheduling and this is also rescheduling...what's the difference? Which one should I use?". Second of all, ideally, this new change should make rescheduling better (in the sense that the backlog will be smaller), and if it's better, it should supercede the current method.

L-M-Sherlock commented 2 months ago

patch: fsrs4anki-helper.ankiaddon.zip

image
Expertium commented 2 months ago

Alright, I tested the backlog that I get with different thresholds on one of my decks 0% - 1024 due cards 5% - 1030 10% - 1035 15% - 1018 20% - 960 25% - 1017 30% - 889 35% - 834

I don't know what's going on. For some reason not only is the backlog not decreasing much, but for some values it actually increases compared to when the threshold is 0%.

@user1823 give it a try

user1823 commented 2 months ago

I don't know what's going on.

Did you disable Load Balance and Disperse Siblings after rescheduling? Even though the user might want to use these options, we need to disable these during testing so that we can see the trend.

My results

Before rescheduling: 101 cards due

After: 0% - 2184 10% - 2074 15% - 1751 20% - 1340 25% - 950 30% - 606 40% - 222

user1823 commented 2 months ago

Some suggestions:

Expertium commented 2 months ago

Did you disable Load Balance and Disperse Siblings after rescheduling? Even though the user might want to use these options, we need to disable these during testing so that we can see the trend.

Nope, my bad. Based on your results, 25% seems good. It reduces the backlog in half.

user1823 commented 2 months ago

I also tried with Disperse Siblings after rescheduling enabled. Here are the results:

Before rescheduling: 101 cards due

After: 0% - 2075 10% - 1987 15% - 1689 20% - 1313 25% - 963 30% - 653 40% - 292

The results show the same trend as above.

user1823 commented 2 months ago

Based on your results, 25% seems good. It reduces the backlog in half.

Yes. It will reduce further after the first suggestion in https://github.com/open-spaced-repetition/fsrs4anki-helper/pull/462#issuecomment-2365239994 is implemented.

Expertium commented 2 months ago

Alright, I turned off Load Balancing. 0% 1320 due cards 5% 1318 10% 1314 15% 1300 20% 1264 25% 1175 30% 1094 35% 1044 40% 958

While the change isn't as big as in your case, it's clear that it does help at least somewhat.

user1823 commented 2 months ago

By the way, as L-M-Sherlock said, in the current form, this feature breaks load Balancing and Easy Days because the add-on won't reschedule the cards whose intervals had to change by a small amount.

We can easily fix Easy Days by adding and not self.apply_easy_days to if card.ivl >= adjusted_ivl_lower and card.ivl <= adjusted_ivl_upper:.

However, fixing load balancing requires either

IMO, the second choice is better because it will also allow the user to completely reschedule their cards even if they don't want to use load balancing.