-
Notifications
You must be signed in to change notification settings - Fork 206
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
[FEAT] user defined "Easy, Good, Hard" values instead of or in addition to the algorithm defined one. #741
Comments
So, its been a week, I'm able to muster up some time and with the help of Chat-GPT, I was able to bypass the algorithm's schedule by commenting out some lines and added a 'constant value' function in schedule.ts, also added the corresponding UI in the settings.ts for the user to set the constant values for "Easy, Good, Hard", the defaults are "7, 4, 1". I'm not sure should i close this thread, i'm leaving it for the mod to decide. Here are some screenshots of the modification. Here is the main.js file if some poor soul like me needs it. |
Thank you. This is much easier to use. |
YES! I think this would work much better for long term retention than the SM2 algorithm with an upper bound on the interval. I very much hope this is made available as an alternative "algorithm" in the existing plugin. But until that happens, is there any chance you could make your solution available as a separate community plugin, @visaeryon? I'm ok with there being some irrelevant settings and other things left over. |
I pledge to donate 200 USD to anyone who can make a working solution available as a community plugin, as a small token of appreciation. For those who don't understand the need for something other than the SM2 algorithm, consider my use case. I don't really use spaced repetition for the initial learning, but to retain knowledge long term. Especially knowledge I don't engage with regularly. The SM2 algorithm isn't really ideal for that use case. The exponentially increasing interval means it sort of jumps around wildly if you try to keep it on a certain level with the hard-good-easy buttons. I've tried setting an upper bound to about 2 months, but with lots of flash cards that's actually too many to review, and I have too little control over the interval. The "good" and "easy" bottom both result in an interval of 2m, so no ability to selectively increase the duration, and the easy sometimes takes the interval way down, and other times almost not at all, depending on the ease factor. As an alternative to letting the user choose the 3 intervals, the intervals could be non-configurable if there were more than 3 to choose from. Something like 1d, 1w, 1m, 2m, 3m, 6m and 2y should cover every need. |
Hey, thanks for the suggestions. I'm currently towards the tail end of implementing [FEAT] Refactor code to support diff methods of storing the scheduling info, and diff SR algorithms This is a necessary step before [FEAT] sm-2 is outdated, can you please replace it with the fsrs algorithm? I personally haven't used the FSRS algorithm, but it does appear to be very well researched: Potentially, a more advanced algorithm would not have the negative characteristics described above. Meaning that we wouldn't need to implement the easy/good/hard fixed intervals. In any case, if anyone is planning to implement the suggestions here, I suggest waiting till I complete #878, or at least be in touch about it. Cheers |
Thanks for the update. It's possible the FSRS algorithm will work slightly less badly for me, but I don't really think a more complicated algorithm is what I need. There are things I want to repeat regularly even if recall is always easy, because I want to have it forefront enough in my mind that it'll likely pop up when I need it, or to be able to make connections to other things that I wouldn't otherwise make. With FSRS it seems like I would still have to "lie" and push the "hard" button just to get the interval I want. Why not let the user select the interval directly instead? The "algorithm" suggested here is probably much, much simpler to implement, so perhaps you could do it first (once the refactoring is completed) to sort of verify that the code is factored is a way that allows for multiple algorithms? |
Great idea. |
@danhje , You just have to replace the existing 'main.js' file inside the ".../.obsidian/plugins/spaced-repetition" directory of your vault, If you want a different name for the replaced one, just change the "name" field in the "manifest.json" file located in the same directory. I hope this helps I think making a whole new separate plugin and get it approved just for this one change is redundant, defining flascards is as usual, using the tags. constant interval fields are at the bottom of the plugin settings tab, just ignore all other settings they are disabled. |
Hi all I have completed the design changes that were required before being able to implement the enhancement requested here. Those changes are available for beta testing at #1006. If you are able to do any testing, that would be appreciated. It would assist on the path of getting a more robust plugin with this feature implemented. Thanks |
Hi there! If you are going to implement custom constant intervals, maybe it makes sense to implement custom button set at the same time? For example button set per deck |
Is your feature request related to a problem? Please describe.
Yes it is, I use real short 'maximum interval' like 7days or 8days this makes the recommended "easy, good, hard" intervals to saturate real quick by that I mean, all the three of them will show the max interval after some time usually after 3-4 consecutive "easy or good" reviews for a given card, I don't really want that to happen and I think this defeats the purpose of reviewing a given card altogether.
Describe the solution you'd like
I want the increment intervals ie., "easy, food, hard" to be constant values and is user defined in the settings, like 7days for easy, 4days for good and 1day for hard, and this should be constant for all the cards in a deck no matter new or old ie., bypassing the algorithm altogether. I'm not saying get rid of the algorithm, this is more like an alternative option for people like me who don't get how the algorithm works.
Additional context
I really don't get how the algorithm works, the interval increments are almost always partial values like 3.5days, 7.3days, I tried various combinations of 'base ease' and 'interval' values in the algorithm settings but it doesn't seem to do much, on top of it there is this saturation problem with the algorithm. I also don't want the values of the review intervals to be constantly changing from card to card and depending on the previous reviews, I just like constant intervals it makes the reviewing process a bit easy, I don't have to check for the new easy intervals for each and every card I review, I review a lot of them, trust me it becomes tedious after some time, and it also breaks the flow of recalling the content that I'm reviewing, if I knew beforehand that "easy" will mark this card for 6days or 2days for a hard one, then the whole reviewing process will become much more fluid and less tedious.
here is examples of saturation problem
The text was updated successfully, but these errors were encountered: