You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Add plan for #503: [Model] SchedulingWithIndividualDeadlines
* Implement #503: [Model] SchedulingWithIndividualDeadlines
* chore: remove plan file after implementation
* chore: minimize example fixture updates for #503
* chore: tighten scheduling CLI contract for #503
* fix: address review feedback for PR #678
* Fix formatting after merge with main
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Revert unrelated changes: README.md and pred inspect docs
Reverts the README.md build instruction change and the pred inspect
output format change in cli.md, which are outside the scope of this
model PR.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Xiwei Pan <xiwei.pan@connect.hkust-gz.edu.cn>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Given a set $T$ of $n$ unit-length tasks, a number $m inZZ^+$ of identical processors, a deadline function $d: T -> ZZ^+$, and a partial order $prec.eq$ on $T$, determine whether there exists a schedule $sigma: T -> {0, 1, dots, D - 1}$, where $D = max_(t in T) d(t)$, such that every task meets its own deadline ($sigma(t) + 1 <= d(t)$), every precedence constraint is respected (if $t_i prec.eq t_j$ then $sigma(t_i) + 1 <= sigma(t_j)$), and at most $m$ tasks are scheduled in each time slot.
3430
+
][
3431
+
Scheduling With Individual Deadlines is the parallel-machine feasibility problem catalogued as A5 SS11 in Garey & Johnson @garey1979. Garey & Johnson record NP-completeness via reduction from Vertex Cover, and Brucker, Garey, and Johnson sharpen the complexity picture: the problem remains NP-complete for out-tree precedence constraints, but becomes polynomial-time solvable for in-trees @bruckerGareyJohnson1977. The two-processor case is also polynomial-time solvable @garey1979.
3432
+
3433
+
The direct encoding in this library uses one start-time variable per task, with each variable ranging over its allowable deadline window. If $D = max_t d(t)$, exhaustive search over that encoding yields an $O^*(D^n)$ brute-force bound.#footnote[This is the worst-case search bound induced by the implementation's configuration space; deadlines can be smaller on individual tasks, so practical instances may enumerate fewer than $D^n$ assignments.]
3434
+
3435
+
*Example.* Consider $n = #ntasks$ tasks on $m = #nproc$ processors with deadlines #{deadline-pairs.join(", ")} and precedence constraints #{precs.map(p=> [$t_#(p.at(0) +1) prec.eq t_#(p.at(1) +1)$]).join(", ")}. The sample schedule $sigma = [#start-label]$ assigns #{slot-summaries.join("; ")}. Every slot uses at most #nproc processors, and the tight tasks #{tight-task-labels.join(", ")} finish exactly at their deadlines.
caption: [A feasible 3-processor schedule for Scheduling With Individual Deadlines. Tasks sharing a column run in the same unit-length time slot; the sample assignment uses slots $0, 1, 2$ and meets every deadline.],
/// Bits for first factor (for Factoring); also accepted as a processor-count alias for scheduling create commands
379
380
#[arg(long)]
380
381
pubm:Option<usize>,
381
382
/// Bits for second factor (for Factoring)
@@ -516,10 +517,10 @@ pub struct CreateArgs {
516
517
/// Storage costs for MultipleCopyFileAllocation (comma-separated, e.g., "1,1,1,1")
517
518
#[arg(long)]
518
519
pubstorage:Option<String>,
519
-
/// Deadlines for scheduling problems (comma-separated, e.g., "5,5,5,3,3")
520
+
/// Deadlines for MinimumTardinessSequencing or SchedulingWithIndividualDeadlines (comma-separated, e.g., "5,5,5,3,3")
520
521
#[arg(long)]
521
522
pubdeadlines:Option<String>,
522
-
/// Precedence pairs for MinimumTardinessSequencing (e.g., "0>3,1>3,1>4,2>4")
523
+
/// Precedence pairs for MinimumTardinessSequencing or SchedulingWithIndividualDeadlines (e.g., "0>3,1>3,1>4,2>4")
523
524
#[arg(long)]
524
525
pubprecedence_pairs:Option<String>,
525
526
/// Resource bounds for ResourceConstrainedScheduling (comma-separated, e.g., "20,15")
@@ -534,7 +535,7 @@ pub struct CreateArgs {
534
535
/// Deadline for FlowShopScheduling, MultiprocessorScheduling, or ResourceConstrainedScheduling
535
536
#[arg(long)]
536
537
pubdeadline:Option<u64>,
537
-
/// Number of processors/machines for FlowShopScheduling, MultiprocessorScheduling, or ResourceConstrainedScheduling
538
+
/// Number of processors/machines for FlowShopScheduling, MultiprocessorScheduling, ResourceConstrainedScheduling, or SchedulingWithIndividualDeadlines
538
539
#[arg(long)]
539
540
pubnum_processors:Option<usize>,
540
541
/// Binary schedule patterns for StaffScheduling (semicolon-separated rows, e.g., "1,1,0;0,1,1")
0 commit comments