Changelog
Generated from CHANGELOG.md in the project repository. Never maintained twice.
Unreleased
- fixedExplain:
analyzespreads demand over candidate resources and participants as exact shares instead of rounding each share up, so a one-slot activity with many candidate rooms no longer counts as a full slot in every one of them.
0.14.0
24 October 2026
- breakingDependencies: schedulr builds on
unifier0.6 instead of 0.5. The re-exportedCancellationTokenis now thepathwise0.3 type that unifier 0.6 uses. - addedDay rules:
DayRulewithDayRuleKindshapes one entity's occupancy per period bucket — minimum load, maximum span, a break between buckets, a free run inside a window, and a limit on sections of the window (SchedulingProblem::with_day_rule). - addedDay rules:
MaximumDistinctPerBucketlimits how many distinct groups of activities start in one bucket, e.g. at most five subjects a day (with_distinct_per_bucket). - addedGoals:
IsolatedBlockGoal,JointPresenceGoalandConcurrentFreeGoalscore lone blocks, days without shared activities and too many entities free at once. - addedGoals:
ActivityGoal(ActivityGoalKind,ProximityMode) scores the distribution of a set of activities across buckets. - addedGoals:
ResourceCostGoalranks the resources activities use (fallback rooms, a home room);RoomChangeGoalscores resource changes and travel between locations. - addedGoals:
IdleBoundskeeps one entity's free time inside a band and penalizes long gaps;TimePreferencescores occupancy of wanted or unwanted time windows. - addedSoft rules:
SoftPenaltyturns a hard rule — day rules, daily load, bucket patterns, bucket starts, active buckets, minimum breaks, activity relations — into a preference viasoft. - addedModel:
Activity::with_allowed_windowrestricts where an activity may start. - addedModel:
ResourceRequirement::with_minimum_capacity_inchecks a minimum size such as seats against a named capacity dimension;unitsstays the number of parallel uses. Details: Modeling. - changedSolving: resource capacity counts every unit over the limit instead of one violation per resource, so repairs no longer pile up clashes on one room or teacher;
explainnames only the overlapping activities. - changedSolving: free-time, distribution and resource-capacity scoring answer a move locally (
Objective::delta,Constraint::move_violations), several times more steps per second in timetable repairs. - changedExplain:
analyzecounts participants from requirements, with demand spread over the candidates. - changedContributors: ITC-2007 Track 3 instances (comp01, comp11) as an external benchmark with independent scoring; a repair test for a period blocked in a full timetable.