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 #498: [Model] SequencingToMinimizeWeightedTardiness
* Implement #498: [Model] SequencingToMinimizeWeightedTardiness
* chore: remove plan file after implementation
* Fix merge-with-main issues: update example_db API, fix paper Typst blocks, format
- Update canonical_model_example_specs to use new ModelExampleSpec struct fields
- Fix duplicate #{ block opener in reductions.typ from merge
- Restore missing load-model-example and prefix-sums bindings for CumulativeCost
- Run cargo fmt to fix import line wrapping
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Fix CLI flag mismatch: map schema field 'lengths' to --sizes
The auto-generated Parameters section showed --lengths (from the schema
field name) while the Example and actual handler used --sizes. Add a
field-name override so both are consistent.
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 $J$ of $n$ jobs, processing times $ell_j inZZ^+$, tardiness weights $w_j inZZ^+$, deadlines $d_j inZZ^+$, and a bound $K inZZ^+$, determine whether there exists a one-machine schedule whose total weighted tardiness
3555
+
$sum_(j in J) w_j max(0, C_j - d_j)$
3556
+
is at most $K$, where $C_j$ is the completion time of job $j$.
3557
+
][
3558
+
Sequencing to Minimize Weighted Tardiness is the classical single-machine scheduling problem $1 || sum w_j T_j$, where $T_j = max(0, C_j - d_j)$. It appears as SS5 in Garey & Johnson @garey1979 and is strongly NP-complete via transformation from 3-Partition, which rules out pseudo-polynomial algorithms in general. When all weights are equal, the special case reduces to ordinary total tardiness and admits a pseudo-polynomial dynamic program @lawler1977. Garey & Johnson also note that the equal-length case is polynomial-time solvable by bipartite matching @garey1979.
3559
+
3560
+
Exact algorithms remain exponential in the worst case. Brute-force over all $n!$ schedules evaluates the implementation's decision encoding in $O(n! dot n)$ time. More refined exact methods include the branch-and-bound algorithm of Potts and Van Wassenhove @potts1985 and the dynamic-programming style exact algorithm of Tanaka, Fujikuma, and Araki @tanaka2009.
3561
+
3562
+
*Example.* Consider the five jobs with processing times $ell = (#lengths.map(v=>str(v)).join(", "))$, weights $w = (#weights.map(v=>str(v)).join(", "))$, deadlines $d = (#deadlines.map(v=>str(v)).join(", "))$, and bound $K = #bound$. The unique satisfying schedule is $(#schedule.map(job=>$t_#(job+1)$).join(", "))$, with completion times $(#completions.map(v=>str(v)).join(", "))$. Only job $t_#(tardy-jobs.at(0) +1)$ is tardy; the per-job weighted tardiness contributions are $(#weighted.map(v=>str(v)).join(", "))$, so the total weighted tardiness is $#total-weighted <= K$.
caption: [Single-machine schedule for the canonical weighted-tardiness example. The faded job is tardy; colored ticks mark the individual deadlines $d_j$.],
0 commit comments