open-spaced-repetition / fsrs-rs

FSRS for Rust, including Optimizer and Scheduler
https://crates.io/crates/fsrs
BSD 3-Clause "New" or "Revised" License
185 stars 19 forks source link

Feat/minimal workload for optimal retention #165

Closed L-M-Sherlock closed 8 months ago

L-M-Sherlock commented 8 months ago

I refactor the approach to calculate the optimal retention. Now the optimizer will output the optimal retention to minimize the workload/cost per memorization.

image

Ideally, the user only needs to input learn_span in the new optimizer for retention. So it's easier to use than the previous implementation.

image

By the way, we may notice users that desired retention < optimal retention is worse than desired retention > optimal retention. Because the former means less memorization & more workload and the latter means more memorization & more workload.

dae commented 8 months ago

So we can remove deck size and minutes/day, but I presume we still need to expose the daily new and review limits?

L-M-Sherlock commented 8 months ago

So we can remove deck size and minutes/day, but I presume we still need to expose the daily new and review limits?

Only Days to simulate matters in the new approach, whose goal is to minimize the workload. The review limit fixed the workload in some level, so I don't recommend including it.

The new limit doesn't affect the optimal retention because we only consider the relative workload. The workload is proportional to new limit.

dae commented 8 months ago

Sorry, to confirm, do you mean we should not add either? Or do you mean we should just add the new limit?

L-M-Sherlock commented 8 months ago

We only need Days to simulate. I have made necessary modifications in Anki's part in the PR.

dae commented 8 months ago

This is still in simulator config:

    pub learn_limit: usize,
    pub review_limit: usize,

Would it make sense to remove these in the future? (not urgent)

L-M-Sherlock commented 8 months ago

Would it make sense to remove these in the future? (not urgent)

Yeah it's still in simulator config because they are useful if we want to provide built-in simulator in the future. They are just useless in optimizing the retention.