[23.10 Desktop] Add a feature to automatically periodically re-optimize FSRS parameters

Right now, users have to manually re-optimize parameters from time to time. This is inconvenient, especially if the user has a lot of presets. Ideally, using FSRS should be as simple as turning it on once, but right now the user has to remember to re-optimize parameters manually.
I’ve already suggested this before in the thread about the 23.10 release candidate, but unfortunately, my suggestion didn’t make it into the final release. Frankly, I don’t know why, I can’t imagine it being a herculean coding challenge, and it will make FSRS much more user-friendly.


The Python optimizer is better and probably can work with fewer cards, so some presets may be using values from the Python optimizer.
It is possible to test the parameters with cards different from the preset, and enter them into a different preset.
So if it is implemented, it may have to be per preset.

Optimizing takes time, so it can’t just be automatic, but maybe with a single menu item to process whatever has the option enabled.

There’s no need to bring the same thing up so many times. There are limited hours in the day, so work needs to happen on a priority basis. Re-optimizing is something that should happen every month or two, and 23.10 has been out for less than a week, so this is hardly a pain point for most users at the moment.

Automatic rebuilding is unlikely to happen, as that would result in all cards being marked as changed without any user interaction, and could cause the user to lose progress if they weren’t fully in sync when it happened. We could possibly prompt the user in the future, but for now the focus will be on providing an option to rebuild all presets at once.

Any plans to implement automatic optimization?
Also, if you don’t mind, take a look at my suggestions, I added a few more.

There’s no need to bring the same thing up so many times.

you could’ve been more subtle at this…

I don’t understand this actually. Only parameters will change after optimisation unless rescheduling happens. How come all cards will be marked as changed? Expertium do you know about this?


Didn’t know this happens.

I honestly don’t know how this can happen but my first thoughts are if sync is a problem then sync itself could be made a trigger for optimisation right? Then it would mean that automatic optimisation happens just after a sync is completed. Thus “if they weren’t fully in sync” condition wouldn’t even appear. I’d love to hear your thoughts on whether this solves the problem you mentioned.

I agree with dae here. It is annoying when the same person requests the same thing almost every day. I agree that automatic optimization would make things easier for users. But, that doesn’t mean that you keep on requesting the same thing every day.

After the parameters are changed, the memory states of all cards are recalculated. “Reschedule cards on change” only controls whether the intervals also change.

This doesn’t solve the case where the mobile device was not in sync with AnkiWeb.

1 Like

True, but automatic optimization is the most highly requested feature of all FSRS-related features, it’s not like I’m the only person who wants it. At the very least, it’s more requested than Easy Days, yet Easy Days is planned and automatic optimization is not.


I think we need to come up with a viable feature first. Because now what’s happening is we are pushing for automatic optimisation expecting all the issues will be handled by dae himself.

Though IMO at least adding this to the issue tracker would mean this is being considered atm.

1 Like

I thought and I thought and the only solution I could come up with was a compromise between auto sync and auto optimisation; and (god why did I even say this) a pop-up window asking to make sure that all other of your devices are synced before you do another sync. maybe the pop-up is overkill/just caution the users that they need to sync all other of their devices before closing the app. what about a pop-up asking “Do a sync before you leave the app?”

@Expertium if you have better ideas…

(sorry everyone that was a stream of thought)

Maybe we can just update the parameters and don’t update the memory states of cards during auto optimization?


Does anyone know about what happens when I optimise when every one of my device is not in sync? I’m not talking of auto-optimisation, just manual optimisation. From the convo here, it seems like that should cause problems but is this even documented anywhere?

Manual optimization will update all your cards’ stability and difficulty.

So can “change in memory state” of the cards cause problems if all of my devices aren’t in sync?

For example, if you have two devices named A and B.

At 8:00 AM, you reviewed all due cards in device A. These cards’ memory states were updated.

At 9:00 AM, you optimized FSRS in device B. All cards’ memory states were updated.

Then you sync A and B with AnkiWeb. What’re the final memory states of your cards? I’m not very sure about that. It may cause some problems. I need to ask @dae

I suspect, that state from device B will be taken, as this card modification is later in time. So it will basically erase reviews from device A.

1 Like

I only learned about this because of the talk about Automatic Optimisation. I don’t think I got this information anywhere else. If this is a potential problem I wonder why isn’t it more widely known. Even you don’t seem to know quite well.

I think it depends on which device was synced with AnkiWeb first. If device A was synced with AnkiWeb first, the data from device A will be kept. If device B was synced with AnkiWeb first, its data will be kept.

It should work the same way as any other sync conflict. Both are added to the revlog, but the last-in-time – from device B in your example – will be the final state. Syncing with AnkiWeb - Anki Manual

The reviews from device A won’t be erased, but they won’t have been considered in what the current memory state is.

1 Like