From a5778f337753637127eefd6efb8e7a42fa652c7f Mon Sep 17 00:00:00 2001 From: Jarrett Ye Date: Sat, 26 Apr 2025 10:05:13 +0800 Subject: [PATCH] Fix/FSRS-6 doesn't give <1d intervals & use log loss instead of RMSE(bins) (#3948) * Fix/FSRS-6 doesn't give <1d intervals https://forums.ankiweb.net/t/anki-25-05-beta-1/59710/8?u=l.m.sherlock * use log loss instead of rmse to determine use which parameters --- rslib/src/scheduler/answering/mod.rs | 2 +- rslib/src/scheduler/fsrs/params.rs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rslib/src/scheduler/answering/mod.rs b/rslib/src/scheduler/answering/mod.rs index e9461279f..13006fa88 100644 --- a/rslib/src/scheduler/answering/mod.rs +++ b/rslib/src/scheduler/answering/mod.rs @@ -468,7 +468,7 @@ impl Collection { self.get_config_bool(BoolKey::FsrsShortTermWithStepsEnabled); let fsrs_allow_short_term = if fsrs_enabled { let params = config.fsrs_params(); - if params.len() == 19 { + if params.len() >= 19 { params[17] > 0.0 && params[18] > 0.0 } else { false diff --git a/rslib/src/scheduler/fsrs/params.rs b/rslib/src/scheduler/fsrs/params.rs index 13e588535..d313a6851 100644 --- a/rslib/src/scheduler/fsrs/params.rs +++ b/rslib/src/scheduler/fsrs/params.rs @@ -116,10 +116,10 @@ impl Collection { })?; progress_thread.join().ok(); if let Ok(fsrs) = FSRS::new(Some(current_params)) { - let current_rmse = fsrs.evaluate(items.clone(), |_| true)?.rmse_bins; + let current_log_loss = fsrs.evaluate(items.clone(), |_| true)?.log_loss; let optimized_fsrs = FSRS::new(Some(¶ms))?; - let optimized_rmse = optimized_fsrs.evaluate(items.clone(), |_| true)?.rmse_bins; - if current_rmse <= optimized_rmse { + let optimized_log_loss = optimized_fsrs.evaluate(items.clone(), |_| true)?.log_loss; + if current_log_loss <= optimized_log_loss { if num_of_relearning_steps <= 1 { params = current_params.to_vec(); } else {