Skip to content
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

Open
visaeryon opened this issue Sep 16, 2023 · 10 comments
Labels
enhancement New feature or request

Comments

@visaeryon
Copy link

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
Screenshot (62)
Screenshot (66)
Screenshot (68)

@visaeryon visaeryon added the enhancement New feature or request label Sep 16, 2023
@visaeryon
Copy link
Author

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.
I'm ok with it being closed as i got some rudimentary solution.

Here are some screenshots of the modification.
Flashcard screen-grab
Screenshot (98)
Settings UI screen-grab
Screenshot (99)

Here is the main.js file if some poor soul like me needs it.
Don't forget to rename it back to .js.

@Mistborn-First-Era
Copy link

Thank you. This is much easier to use.

@danhje
Copy link

danhje commented Mar 31, 2024

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.

@danhje
Copy link

danhje commented Mar 31, 2024

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.

@ronzulu
Copy link
Collaborator

ronzulu commented Mar 31, 2024

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:
https://github.com/open-spaced-repetition/fsrs4anki/wiki

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
Ronny

@danhje
Copy link

danhje commented Mar 31, 2024

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?

@ronzulu
Copy link
Collaborator

ronzulu commented Mar 31, 2024

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.

@visaeryon
Copy link
Author

@danhje ,
if you're ok with some irrelevant settings and don't want to use the existing algorithm, I would suggest you use the already provided "main.js" file as a temporary solution.

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,
if I'm missing the point please let me know.

the plugin directory.
Screenshot (279)

to rename the plugin.
Screenshot (282)

defining flascards is as usual, using the tags.
Screenshot (285)

constant interval fields are at the bottom of the plugin settings tab, just ignore all other settings they are disabled.
Screenshot (284)

@ronzulu
Copy link
Collaborator

ronzulu commented Jun 26, 2024

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
Ronny

@nikkitavr
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

5 participants