The Only 100% Foolproof Strategy Is Inventing A Time Machine

FSRS-5 is going to be supported natively in the next major release. It has 19 parameters, 2 more than FSRS-4.5. When the user installs a version that supports FSRS-5, 2 zeros will be appended to his parameters. For example, this:
0.1017, 0.2363, 0.8370, 15.0452, 5.0258, 1.5123, 0.7134, 0.0066, 1.6000, 0.1682, 1.0368, 2.9261, 0.0561, 0.2020, 1.3726, 0.2142, 5.9996
Becomes this:
0.1017, 0.2363, 0.8370, 15.0452, 5.0258, 1.5123, 0.7134, 0.0066, 1.6000, 0.1682, 1.0368, 2.9261, 0.0561, 0.2020, 1.3726, 0.2142, 5.9996, 0.0000, 0.0000
And then the last two parameters will change once the user clicks “Optimize”. Until then, they will remain zeros.
This is great if the user only has one device. But what if the user has multiple devices, and one has an older Anki version?

To be honest, I don’t know what exactly will happen. But I’m sure it’s nothing good.
To prevent that, I propose the following: release versions of Anki/AnkIDroid/AnkiMobile where, if the number of parameters in the field is greater than 17 (which is the number of parameters in FSRS-4.5), just remove the rest and keep 17 numbers.
Imagine that AnkiDroid 2.19 does that. Then, once a user with FSRS-5 tries to sync to his phone that has AnkiDroid 2.19, AnkiDroid will just truncate parameters and use them as FSRS-4.5 parameters. Truncated FSRS-5 parameters still work fine as FSRS-4.5 parameters, maybe a bit suboptimally.
But what if the user has an even older version of Anki on the other device?


or

Hopefully, now you realize why I chose this title for the post. The only way to not have any conflicts is to invent a time machine and retroactively add the truncation hack to all past versions. So all you have to do is truncate parameters, discarding the last two.

@dae @David

EDIT: just to be clear, when I say

release versions of Anki/AnkIDroid/AnkiMobile where, if the number of parameters in the field is greater than 17 (which is the number of parameters in FSRS-4.5), just remove the rest and keep 17 numbers.

I mean “release them WAAAAAAAY in advance, before the version with FSRS-5 comes out”. Ideally, several months before that version. The longer we postpone the release of the version with FSRS-5 and the earlier we release a version with the truncation hack, the safer we are, but the longer users have to wait, unfortunately.

EDIT 2: for those who aren’t familiar with the inner workings of FSRS. Suppose you are trying to “coerce” parameters from one version to another.

  1. FSRS-4.5 → FSRS-5. FSRS-5 requires two more parameters; if they are set to 0, it is equivalent to FSRS-4.5. So all you have to do is append two zeros at the end (not at the beginning).
  2. FSRS-5 → FSRS-4.5. If you discard the last two parameters, the remaining 17 parameters work just fine as FSRS-4.5 parameters.
6 Likes

I think that’s possible to sync two lists of parameters, one for FSRS-5, and one for <4.5.

If I optimize the parameters in a FSRS-5 version, it could create a legacy parameters list with the new parameters stripped, so older versions can use it. Idk how Anki does that currently, but I suppose that the parameters are stored with a key and value, so that would mean to use the same key for older versions.

If I optimize the parameters in a FSRS-4.5 version and sync it with a FSRS-5 version, the new version can adequate itself to the new parameters somehow (idk how any of those parameters work, so that’s up to the FSRS gang).

Anyway, this issue makes obvious that there should be a futureproof mechanism for changing the parameters so this doesn’t happer again.

3 Likes

Agreed. The sync code can be adjusted so that it removes the extra parameters before delivering them to an old client (which is not necessarily AnkiDroid, btw).

2 Likes

Does this mean there is no FSRS 5 any time soon… :question: :cry:

1 Like

I think this means FSRS-5 will not mess up with older clients. So you can use FSRS-5 even if one of the clients don’t support the latest FSRS version.

1 Like

I edited the post to explain how one can forcefully convert parameters.

I am really looking forward to the next update anytime soon now. It is September now :sweat_smile:

This may have made sense months ago, but feels a bit late now. As far as I’m aware, there are no big issues that will stall an update of either of the mobile clients, so I expect we can launch them all around the same time, with instructions not to optimize/save deck options until all clients are updated.

4 Likes

The whole point is that this won’t help because not everyone keeps their Anki clients up-to-date 100% of the time.

1 Like

The mobile clients are automatically updated by the Google Play Store / Apple App Store but the desktop client is not. So, there would be many people who will have their mobile clients updated but not the desktop client.

Why doesnt the Anki Desktop Client have a notification that there is a new update every now and then :question:

1 Like

There are occasional notifications, but not for every recent release.

Well I haven’t seen one for a long time…

Doing what you suggested versus showing people a warning in the mobile clients, which ones better? Also, what will happen in the worst case scenario?

Also, what will happen in the worst case scenario?

I’m not sure. Probably this for every preset:
image

1 Like

Since the complexity model has been rewritten in FSRS-5, will simply discarding or attributing two parameters not lead to an incorrect result?

Do you mean how difficulty is calculated? Initial difficulty is calcualted in a somewhat different way in FSRS-5, yes, but it’s fine. It shouldn’t cause catastrophic issues.
The two new parameters are responsible for how FSRS-5 treats same-day reviews. Setting them to 0 is equivalent to making FSRS pretend that same-day reviews don’t exist, which is what FSRS-4.5 does anyway.

If I take the default parameters of FSRS-5 and try to calculate the difficulty using the formula FSRS-4.5, I will simply get an increased initial difficulty.

If I try to do the opposite, I get negative difficulty for good and easy.

Imgur

5.16 -  e^(1.23*(3 - 1)) + 1=-5.54
5.16 -  e^(1.23*(4 - 1)) + 1=-33.88
1 Like

Difficulty is clamped between 1 and 10, internally (in Anki difficulty is displayed as a number between 0% and 100% for no reason). Any number <1 gets clamped to 1, and any number >10 gets clamped to 10.

But the resultant value will still be quite different from the ideal one. So, probably, we need a hack to interconvert the FSRS 4.5 and FSRS 5 values of other parameters too, particularly w4, w5 and w7.