apsis-rs/crates/ops
ApsisRS contributors 5da069e966 scheduler: find the earliest start from a swept busy profile
The search listed every time feasibility could change and tested each in
turn, which recomputed the load profile of every resource once per
candidate. The profile does not depend on the candidate, so it is now
swept once: the intervals where a resource has no room are cut from its
availability windows, and the earliest surviving start is read off the
front. The result is confirmed with the direct test and the enumeration is
kept as the fallback, so the sweep is an accelerator and never a second
definition of what is feasible.

The demand of a placed task is read through a vector indexed by task
identifier rather than by scanning the task list or by hashing, because the
identifier is a small dense integer and an array index beats both. Two
thousand random scenarios confirm the two forms agree exactly.

On the crowded case, where every task competes for one resource and the
capacity is the binding constraint, planning three thousand two hundred
tasks falls from 6.7 to 3.7 seconds.
2026-09-30 18:54:03 +08:00
..
apsis-conflict workspace: remove dependencies that are declared but never used 2026-09-26 23:36:38 +08:00
apsis-resource workspace: remove dependencies that are declared but never used 2026-09-26 23:36:38 +08:00
apsis-schedule workspace: remove dependencies that are declared but never used 2026-09-26 23:36:38 +08:00
apsis-scheduler scheduler: find the earliest start from a swept busy profile 2026-09-30 18:54:03 +08:00
apsis-task workspace: remove dependencies that are declared but never used 2026-09-26 23:36:38 +08:00