schedulrv0.14.0

Changelog

Generated from CHANGELOG.md in the project repository. Never maintained twice.

Unreleased

  • fixedExplain: analyze spreads 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 unifier 0.6 instead of 0.5. The re-exported CancellationToken is now the pathwise 0.3 type that unifier 0.6 uses.
  • addedDay rules: DayRule with DayRuleKind shapes 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: MaximumDistinctPerBucket limits how many distinct groups of activities start in one bucket, e.g. at most five subjects a day (with_distinct_per_bucket).
  • addedGoals: IsolatedBlockGoal, JointPresenceGoal and ConcurrentFreeGoal score 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: ResourceCostGoal ranks the resources activities use (fallback rooms, a home room); RoomChangeGoal scores resource changes and travel between locations.
  • addedGoals: IdleBounds keeps one entity's free time inside a band and penalizes long gaps; TimePreference scores occupancy of wanted or unwanted time windows.
  • addedSoft rules: SoftPenalty turns a hard rule — day rules, daily load, bucket patterns, bucket starts, active buckets, minimum breaks, activity relations — into a preference via soft.
  • addedModel: Activity::with_allowed_window restricts where an activity may start.
  • addedModel: ResourceRequirement::with_minimum_capacity_in checks a minimum size such as seats against a named capacity dimension; units stays 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; explain names 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: analyze counts 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.