-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integrations of Load balance & Easy days #3116
Comments
Yep - my initial thought is we could store the counts per day there, and adjust the counts each time a card is answered. One thing to think about is the long tail - large/old collections could potentially have thousands or tens of thousands of different due dates. What if we limited the features to a shorter time span, such as cards due in the next 3 months? For things like load balancing, it's probably not so useful to be balancing cards when they're so far out anyway, and as they become closer, younger cards would still be load balanced on those days. WDYT? |
It's totally acceptable. And we can also skip load balancing if the next due date is pretty far. |
An important question: when will Load Balancing be applied? After each review is probably too computationally expensive, although I may be underestimating Rust. So I'm guessing when the user clicks "Sync"? |
If we have a cached dictionary of daily due numbers, balancing can happen as cards are answered. |
Question: Will there be a way for us to use load balance not only for the collection but also for a particular deck? Someone bought this up before when there was no plan to add this feature in Anki. (For me, cards in some decks take longer time so want to prioritise their balancing) |
@dae @jakeprobst opinion on the slider? The math part is easy, just take the value of the slider and multiply the weight of the day by that value. So the value of the slider changes the probability of the card being scheduled on that day. 0% slider = 0% probability. |
I would rather not want another slider/button etc. so I'd say set it to 50%, take or leave. If people want more, they can use the add-on. |
There are people who want to make days as easy as possible, and there are also people who don't want to risk losing a streak. I think a slider makes sense. |
If by this you mean "tell Anki to lighten the load on some arbitrary date in the future", that feels too niche to me, and complicates the implementation. There are other options for upcoming events, like using set due date to move the cards due on that day.
We'll need to list out the days of the week anyway - is adding a slider next to each of them really complicating things much? It means the user can adjust the ratio in a single click, and they don't have to go into a separate setting to configure how easy the easy days are. It also lets them do things like have a mix of heavy, light, and (mostly) empty days as desired. |
@L-M-Sherlock @user1823 @brishtibheja opinions are welcome |
The slider supports 10 values of the multiplier. I wonder how much that is necessary. This can be made a lot more intuitive by following a different UI.
Instead of slider, how about three buttons for three modes? |
A slider with increments of 25% or 50% is effectively similar to a dropdown. I don't have a strong preference for one over the other, but think internally, we should be storing an an array of ratios, so we can provide more increments in the future if demand presents itself. |
The original slider goes in increments of 10%, and I think that's reasonable. |
@Expertium Your points:
I believe if anything, we should start with lower number of possible values. If we start with higher, removing them later would be hard without impacting users. |
I am not sure what you mean here. Do you mean three radio buttons next to each day of the week? That would be more cluttered than a slider next to each. |
I'm with Dae on this one. Let's add a slider in increments of 10%, or maybe 20%. |
If you say so. My point was more about using words like (Hard/Easy/etc.) instead of numbers, than a specific UI. As for the the increments, I think 20/25% should be fine. edit: where this will be added? preferences? deck options wouldn't make much sense. |
That is probably the absolute worst way to convey information you could've suggested. No offense, but I don't think I could come up with a less clear and more opaque way even if I was actively trying to sabotage Anki.
I was thinking of deck options. I can already see that this will turn into another 100 comments issue. |
lol. I didn't pull that out of nowhere. Maybe some game UI I saw unconsciously influenced me. Oh, I think some learning apps do this too, albeit in a different context. You put the amount of time you want to study everyday and they give it weird names. My thinking was call this something like "Daily Study Amount" and select Low/Mid/Normal. It can make people think they can set everything to low without affecting other days, but that's true also with the sliders?
No because you wouldn't want it to be attached to presets. Do we want this for setting easy days or setting days where you mostly study one topic, etc.?
LB was huge. This is a much smaller change in comparison. I wouldn't expect that much enthusiasm. |
Numbers: no room for "But I interpreted it in a different way!", no ambiguity, tells the user exactly how much the workload will be reduced. I see no reason to use words. |
I have no opinion to the UI. But seven percentages of easy days are complex to implement in math. In fact, the implementation of easy days with single percentage in the FSRS helper add-on is complex enough: def p_obey_easy_days(num_of_easy_days, easy_days_review_ratio):
"""
Calculate the probability of obeying easy days to ensure the review ratio.
Parameters:
- num_of_easy_days: the number of easy days
- easy_days_review_ratio: the ratio of reviews on easy days
Math:
- A week has 7 days, n easy days, 7 - n non-easy days
- Assume we have y reviews per non-easy day, the number of reviews per easy day is a * y
- The total number of reviews in a week is y * (7 - n) + a * y * n
- The probability of a review on an easy day is the number of reviews on easy days divided by the total number of reviews
- (a * y * n) / (y * (7 - n) + a * y * n) = (a * n) / (a * n + 7 - n)
- The probability of skipping a review on an easy day is 1 - (a * n) / (a * n + 7 - n) = (7 - n) / (a * n + 7 - n)
"""
return (7 - num_of_easy_days) / (
easy_days_review_ratio * num_of_easy_days + 7 - num_of_easy_days
) |
As @Expertium pointed out the other day, I'm not a math guy, so I'll need to defer to others on this - I (perhaps naively) assumed that since load balancing is already using weights for balancing, it should be fairly simple to apply a multiplier to each of them based on the day of the week. |
That was my assumption as well. We take the value between 0% and 90% from the slider, and multiply the weight by that value. |
It's not simple. For example, if the user set 30% to Monday and 100% to the rest weekdays, and we use the same multiplier on the weight, we will have 30% reviews on Monday and 100% + 70/7% reviews on the rest weekdays. So the real percentage is 30% / (100% + 70/7%) = 27.3% reviews. Edit: maybe the PR doesn't has this problem. Because my helper add-on doesn't use weighted random. |
That's intended, no? I don't see a problem here. |
OK. I will test it in the simulator later. Edit: I write a notebook to simulate Easy Days here: https://github.com/open-spaced-repetition/easy-days-simulator/blob/main/notebook.ipynb I recommend opening a new issue to discuss it. |
|
@brishtibheja like this? |
That's what I was thinking. Normal should be on right side though. |
I agree with Jake - dropdowns are less cluttered, and this screen needs to work on narrow mobile displays as well. |
So...survey time? I just posted it on r/Anki |
Btw @jakeprobst if I understand this correctly, if the user selects all days as Minimum, it will be the same as all days being Normal, right? How about not allowing the user to select Minimum (and Reduced, too) for all days? |
I think the users need to understand that changing value for one day changes what happens with the other days. Pretty sure an average Anki user will think they can just vanish the reviews from some days. |
We can put that in the tooltip (that nobody ever reads) |
By the way, is it possible with some languages the proposal from @david-allison will look cluttered? I have seen similar UI before though. |
I like the calendar like UI for it's aesthetics (and the help text) but the two options are related to each other but in this UI it seems like Reduced and Minimal are independent of each other. I think we need show that only one state between these two are possible. |
@jakeprobst so here are my recommendations:
|
Personally, I am not sure that Easy Days really needs such a bespoke UI, instead of reusing our existing dropdown components. The latter would be much faster to implement, and it leaves us with less of a maintenance burden. At the very least, if we're expecting @jakeprobst to work on this, I think we should focus on an MVP and leave the fancy UI for a future PR, if it's still felt that it's required. |
One more thing: I think a lot of users will complain if Easy Days doesn't apply immediately, so there should be a "Apply now" or "Apply immediately" button that would work similarly to "Reschedule cards on change": if enabled, changes are applied immediately (without doing FSRS-specific or SM-2-specific math) to free days up. If disabled, changing the settings won't retroactively affect already existing intervals. |
Dae, it'll be in deck options? So will it be a global option or preset-specific? If its preset specific then I'll have to change settings in 20 different presets to get this working. If its global, preferences is a better place to have it. Deck options mean it can quickly get to the mobile clients but that screen already has too many options+adding more global settings there is confusing IMO. |
Preset-specific is better, since users may want to choose different easy days for different material. I was under the impression it will be preset-specific. |
That sounds like a very niche use case Helper add-on can support (it's already doing?). I don't want to change things 20 times just to get easy days working. |
@dae thoughts? |
|
But it has to work with SM-2 too. |
Does it? If we see FSRS as the future, I think it's fair to restrict new functionality to FSRS users when necessary. |
Easy Days doesn't rely on FSRS-specific math. |
But "reschedule on change" does rely on the FSRS setting, and this would let us keep things simpler. 🤷♂️ |
These two features require Anki to maintain a record of how many cards are due on each day.
As an initial idea, we may maintain this record in
StateContext
.The text was updated successfully, but these errors were encountered: