From 69e699dc134419112956209a67cb0d62380d27cd Mon Sep 17 00:00:00 2001 From: Jake Probst Date: Wed, 18 Dec 2024 04:49:59 -0800 Subject: [PATCH] Fix easy days causing load balancer to disproportionately schedule graduates to the furthest day (#3643) * don't do easy days calculation if all days are the same ease --- rslib/src/scheduler/states/load_balancer.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/rslib/src/scheduler/states/load_balancer.rs b/rslib/src/scheduler/states/load_balancer.rs index 6cd59d538..e05feb1e0 100644 --- a/rslib/src/scheduler/states/load_balancer.rs +++ b/rslib/src/scheduler/states/load_balancer.rs @@ -219,12 +219,23 @@ impl LoadBalancer { ) }) .unzip(); + let easy_days_percentages = self.easy_days_percentages_by_preset.get(&deckconfig_id)?; - let percentages = weekdays + // check if easy days are in effect by seeing if all days have the same + // configuration. If all days are the same, we can skip out on calculating + // the distribution + let easy_days_are_all_the_same = easy_days_percentages .iter() - .map(|&wd| easy_days_percentages[wd]) - .collect::>(); - let expected_distribution = check_review_distribution(&review_counts, &percentages); + .all(|day| easy_days_percentages[0] == *day); + let expected_distribution = if easy_days_are_all_the_same { + vec![1.0; weekdays.len()] + } else { + let percentages = weekdays + .iter() + .map(|&wd| easy_days_percentages[wd]) + .collect::>(); + check_review_distribution(&review_counts, &percentages) + }; // calculate params for each day let intervals_and_params = interval_days