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
Improve runtime and MIP gap closure on top of upstream latest, separating pure speedups from changes to the search path. Cross-checked upstream issues, PRs and relevant comments on 2026-09-25. This is a source/results review; no new solver benchmarks were run. Proposed gains remain hypotheses.
The three-seed hard-set comparison reports 2 vs 1 solved runs, 100 vs 97 feasible runs, unchanged mean gap of 55.7%, and worst overrun of 25.1 vs 282.4 seconds across 126 instance–seed pairs (42 instances). This supports better time-limit behavior, but does not establish a broad speedup. PDI needs correction below, and the run metadata records an active LLM server.
Upstream cross-check
Topic
Upstream evidence and current status
Implication
DSE preservation
PR #685, merged, already preserves DSE weights and notes scope for more. Issue #2230, closed, covers warm starts, recomputation, model changes and scaling.
Extend existing preservation; identify exactly which invalidation paths still cause unnecessary recomputation.
Strong branching and DSE
PR #688, closed unmerged; a maintainer comment says a different fix superseded it and reports sudden DSE-weight errors during strong branching.
Add freeze/unfreeze, strong-branching and full weight-recomputation comparisons. Historical evidence is a regression-test target, not proof the lab patch is wrong.
P1 optimizes invalidation cost after existing work. Preserve its recheck semantics.
Domain/probing changes
PR #3244, open, changes dual fixing, probing and domain-copy handling. A later comment reports neutrality on a larger set and loss of useful structure on neos-3046615-murg.
Keep scratch-buffer work independent of propagation semantics; inspect domain-copy behavior. Include neos-3046615-murg and neos-787933 in coverage. Do not treat the initial claimed gain as settled.
Clique structures
PR #3312, open, changes clique-table consistency through presolve. PR #2688, merged, fixes fixed-variable handling in clique merging.
Keep caches narrowly scoped, invalidate on mutation, preserve fixed/deleted-variable handling and recheck compatibility with #3312.
Related moving code, not the same optimization as clique traversal. Re-profile after upstream changes.
Time limits
Issue #3314, open, is the existing s100 report; lab #2 has the later diagnosis. Issue #1930, closed, distinguishes normal timing from expensive development profiling.
Separate deadline handling from speed. Use bounded-frequency checks and measure instrumentation overhead.
Build tuning
PR #1104, closed unmerged, documents static-library/user-preference LTO concerns and platform CI failures.
Use supported, opt-in build experiments; do not assume universally enabling LTO is safe or novel.
Searches covered open and closed issues/PRs for steepest, DSE, propagation, clique, dual fixing, time_limit, LTO, PGO, profile guided, changedbounds, markChangedCol and find_common. No exact hits were found for changedbounds, markChangedCol, find_common or PGO/profile guided. That is not proof equivalent work does not exist.
P0: Reproducibility and acceptance gate
Publish the exact benchmarked combined arm. At review, remote dev-tideseed and upstream latest both pointed to 6293630a84; bench/queue.txt contained only its header. Experimental branches exist, but this queue cannot reconstruct the documented combination. Record source SHA, ordered patches, compiler/version/flags, effective options, model checksum and binary hash.
Fix analyze.py: crash counts are omitted from PASS, and required --identical failures are printed after the verdict without changing it. Make both enforceable; compare solved counts on the same paired set.
Fix run.py resume validation: existing-file presence alone must not reuse results for changed binaries/options/time limits.
Fix hard.py: zero PDI with unavailable bounds must not score as excellent performance. Record bound trajectories; integrate a defined normalized gap over the same horizon, assigning worst-case gap while bounds are unavailable. Report overrun separately. Bootstrap over instances, retaining their seeds together.
Use a declared clean window for acceptance runs, separate diagnostic profiling from timing, and report correctness-check coverage. Missing reference objectives must not silently become evidence of correctness.
Split basis-restoration caching and cut-row weight carry into separate arms.
Measure cache hits/misses, BTRANs avoided, cache time, bytes copied and retained memory.
Compare current dense num_col + num_row entries against compact basic-variable/weight storage; test caching at actual basis-save points instead of every solve return, verifying coverage.
Add matrix/scaling-generation validity checks and sampled comparisons against full recomputation. Exercise freeze/unfreeze, strong branching, row add/delete and scaling changes.
Measure runtime and solution quality: reused floating-point weights can change pivoting/search. Node throughput alone is insufficient.
The lab's reported 24–27% recomputation shares justify priority, but cache overhead and end-to-end benefit need isolated measurement.
2. Reuse propagation scratch memory
The current source allocates a large changed-bounds array on each propagation call with pending work.
Reuse a grow-on-demand buffer, including cut-pool nonzero capacity in sizing as current code does.
Avoid deep-copying scratch storage with domains or unsafe sharing between simultaneous/reentrant uses.
Measure allocations, page faults, peak RSS and runtime; require identical-search checks for a pure storage change.
Profile first: the allocation is source-confirmed; its runtime share is not yet established.
Prototype lazy invalidation/generation stamps in markChangedCol(), preserving the recheck semantics from #3035. Simply returning when changedColFlag is already set is insufficient.
Cover row/column modification, deletion, compaction and new rows; shadow-check against existing flags.
Re-profile the reported 17.5% toguru hotspot after existing patches and upstream changes; historical profile shares are not necessarily additive.
4. Clique traversal locality and deadline handling
For C2, test a mutation-versioned contiguous adjacency view for collectCliques(), preserving visitation order where it affects decisions. Measure rebuild and memory costs.
Tune marking-versus-pairwise selection using measured adjacency/candidate costs; replace the fixed factor 16 only with held-out support.
Verify actual compiler flags instead of inferring them from build or wheel defaults.
Experiment order and acceptance
Complete P0.
Screen upstream, combined-without-DSE, DSE-cache-only, DSE-row-carry-only and propagation-buffer reuse in the same session, isolating each treatment's baseline.
Follow with P1, clique-locality and build experiments according to fresh profiles.
Test the winning combination on held-out MIPLIB and representative production instances, including short solves and long gap-limited runs.
Retain the documented speed gate: shifted geometric-mean ratio <= 0.97, paired-bootstrap CI upper < 1, solved count no lower, zero detected wrong answers, no crashes, and identical search where claimed. Define a separate acceptance rule for deadline/quality improvements so they are not mislabeled universal speedups.
Keep findings in this lab. This issue does not request an upstream post or PR.
Prepared with Codex from repository source, recorded results and upstream discussions.
Objective
Improve runtime and MIP gap closure on top of upstream
latest, separating pure speedups from changes to the search path. Cross-checked upstream issues, PRs and relevant comments on 2026-09-25. This is a source/results review; no new solver benchmarks were run. Proposed gains remain hypotheses.Reviewed lab snapshot: acc2726. Control:
6293630a84612d22e87a542d2f1fd2d1b6f07940.Existing evidence
The three-seed hard-set comparison reports 2 vs 1 solved runs, 100 vs 97 feasible runs, unchanged mean gap of 55.7%, and worst overrun of 25.1 vs 282.4 seconds across 126 instance–seed pairs (42 instances). This supports better time-limit behavior, but does not establish a broad speedup. PDI needs correction below, and the run metadata records an active LLM server.
Upstream cross-check
neos-3046615-murg.neos-3046615-murgandneos-787933in coverage. Do not treat the initial claimed gain as settled.toguruis affected.s100report; lab #2 has the later diagnosis. Issue #1930, closed, distinguishes normal timing from expensive development profiling.Searches covered open and closed issues/PRs for steepest, DSE, propagation, clique, dual fixing, time_limit, LTO, PGO, profile guided, changedbounds, markChangedCol and find_common. No exact hits were found for changedbounds, markChangedCol, find_common or PGO/profile guided. That is not proof equivalent work does not exist.
P0: Reproducibility and acceptance gate
dev-tideseedand upstreamlatestboth pointed to6293630a84; bench/queue.txt contained only its header. Experimental branches exist, but this queue cannot reconstruct the documented combination. Record source SHA, ordered patches, compiler/version/flags, effective options, model checksum and binary hash.--identicalfailures are printed after the verdict without changing it. Make both enforceable; compare solved counts on the same paired set.Prioritized solver experiments
1. Cheaper, more selective DSE preservation
Starting point: DSE patch.
num_col + num_rowentries against compact basic-variable/weight storage; test caching at actual basis-save points instead of every solve return, verifying coverage.The lab's reported 24–27% recomputation shares justify priority, but cache overhead and end-to-end benefit need isolated measurement.
2. Reuse propagation scratch memory
The current source allocates a large changed-bounds array on each propagation call with pending work.
3. Reduce repeated presolve invalidation walks (P1)
markChangedCol(), preserving the recheck semantics from #3035. Simply returning whenchangedColFlagis already set is insufficient.toguruhotspot after existing patches and upstream changes; historical profile shares are not necessarily additive.4. Clique traversal locality and deadline handling
collectCliques(), preserving visitation order where it affects decisions. Measure rebuild and memory costs.5. CPU tuning, LTO and PGO as separate build arms
Experiment order and acceptance
Keep findings in this lab. This issue does not request an upstream post or PR.
Prepared with Codex from repository source, recorded results and upstream discussions.