Skip to content

Commit 4876043

Browse files
physicsrobclaude
andcommitted
CP-SAT knobs: worker env, domain tightening, solver params, trace capture, secondary costs
From the d=8192 scheduling campaign (2026-06-09/10): - TW_CPSAT_WORKERS env (default 16, unchanged): the 64-CPU Modal compile container sets 64; confirmed num_search_workers reaches ortools. - tighten_domains: per-node [earliest, latest] layer domains via mode-aware propagation (per-sublayer earliest/latest; matches CP-SAT presolve's own bound exactly — proves the d8192 critical path = 50). Saves ~7s presolve + ~9s to first incumbent on the DOOM graph. - critical_path_layers(): public exact dependency-depth bound. - solver_params: generic CpSolver parameter overrides for experiments. - solution_trace: per-incumbent full-assignment capture (the basis of the trajectory analysis that killed secondary objectives). - Costs.earliness / Costs.waste: lexicographic secondaries, kept as MEASURED FAILURES — trajectory data shows waste RISES as layers fall (compaction stretches lifetimes) and earliness rewards irrelevant early-region shuffling; docstrings record the mechanism so they are not re-proposed. objective_scale on BuiltModel/SolveStats recovers the primary value. - NOTE: ortools 9.15 IntVar.Proto()/.proto returns corrupted memory (segfault); domain bounds are tracked at var creation instead. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent d2ec768 commit 4876043

2 files changed

Lines changed: 310 additions & 46 deletions

File tree

docs/cpsat_scheduler.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -604,8 +604,9 @@ correct for every tested geometry).
604604

605605
### Determinism
606606

607-
CP-SAT runs with `num_search_workers=16` and uses parallel worker
608-
strategies. Different runs may produce different `ScheduleAssignment`
607+
CP-SAT runs with `num_search_workers=16` by default (override with the
608+
`TW_CPSAT_WORKERS` env var — e.g. the 64-CPU Modal compile container
609+
sets it to 64) and uses parallel worker strategies. Different runs may produce different `ScheduleAssignment`
609610
values for the same model — different worker discovery orders find
610611
different optima of equal objective value. The compiled
611612
`HeadlessTransformer` differs across runs only in scheduling: token

0 commit comments

Comments
 (0)