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
This commit is contained in:
Jarrett Ye 2025-04-26 10:05:13 +08:00 committed by GitHub
parent 0321c26e73
commit a5778f3377
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 4 additions and 4 deletions

View file

@ -468,7 +468,7 @@ impl Collection {
self.get_config_bool(BoolKey::FsrsShortTermWithStepsEnabled); self.get_config_bool(BoolKey::FsrsShortTermWithStepsEnabled);
let fsrs_allow_short_term = if fsrs_enabled { let fsrs_allow_short_term = if fsrs_enabled {
let params = config.fsrs_params(); let params = config.fsrs_params();
if params.len() == 19 { if params.len() >= 19 {
params[17] > 0.0 && params[18] > 0.0 params[17] > 0.0 && params[18] > 0.0
} else { } else {
false false

View file

@ -116,10 +116,10 @@ impl Collection {
})?; })?;
progress_thread.join().ok(); progress_thread.join().ok();
if let Ok(fsrs) = FSRS::new(Some(current_params)) { 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(&params))?; let optimized_fsrs = FSRS::new(Some(&params))?;
let optimized_rmse = optimized_fsrs.evaluate(items.clone(), |_| true)?.rmse_bins; let optimized_log_loss = optimized_fsrs.evaluate(items.clone(), |_| true)?.log_loss;
if current_rmse <= optimized_rmse { if current_log_loss <= optimized_log_loss {
if num_of_relearning_steps <= 1 { if num_of_relearning_steps <= 1 {
params = current_params.to_vec(); params = current_params.to_vec();
} else { } else {