Skip to content

chore(bench): a benchmark that times interior point without crossover against simplex on the ladder - #1895

Merged
FBumann merged 4 commits into
mainfrom
claude/festive-carson-8x46sq-crossover
Oct 8, 2026
Merged

FBumann merged 4 commits into
mainfrom
claude/festive-carson-8x46sq-crossover

Conversation

@FBumann

@FBumann FBumann commented Oct 8, 2026 •

Copy link
Copy Markdown
Collaborator

Prompt: Add stacked PRs about the new things we discussed

#1879 merged into its stacked base after that base had already landed, so it never reached main. This PR re-lands it; the follow-up that asked for it was "Fiy it". A later follow-up dropped the how-to: "Do we really want this in the docs?" → "Drop it".

Note

The following content was generated by AI.

bench/crossover.py times HiGHS three ways on a ladder rung: simplex, interior point with crossover, and without. On rung m, no crossover was fastest only on transport, by 13%. No docs or src/ change.

What it is, and what changed from #1879
Measured on main: HiGHS, rung m, solve seconds

Method: python -m bench.crossover dispatch nodal transport storage --sizes m, then transport nodal again, at 45c540c (main dc2935e plus this branch, whose src/ is main's). Each run started after the 1-minute load average fell below 0.5 on 4 cores, and nothing else ran on the box. transport and nodal ran twice, and their cells are the range.

case simplex interior point with crossover without crossover
dispatch 8.71 s 9.91 s 9.24 s
nodal 3.81–3.93 s 1.94–2.01 s 39.2–41.2 s
transport 33.6–34.0 s 32.1–33.6 s 28.9–29.6 s
storage 72.1 s 228.0 s 207.3 s

On transport, the means are 29.25 s without crossover and 33.81 s for simplex: 13% less. On nodal, the means are 40.19 s without crossover and 1.98 s with it: 20 times as long. Every answer had duals. The largest objective gap to simplex was 6.7e-9 relative (dispatch, without crossover).

#1879 measured the same ranking on every case, on an earlier machine and polars 1.x: 14% on transport, 28 times on nodal.

Full output
dispatch m (2.17995e+09):  simplex 8.708           ipm 9.910 (-4.4e-16)            no crossover 9.236 (+6.7e-09)
nodal m (3.07336e+09):     simplex 3.934 / 3.805   ipm 1.940 / 2.013 (0)           no crossover 41.181 / 39.193 (+4.2e-12)
transport m (9.76456e+08): simplex 33.602 / 34.024 ipm 33.574 / 32.122 (+1.2e-16)  no crossover 28.893 / 29.613 (+1.6e-11)
storage m (9.62692e+08):   simplex 72.095          ipm 228.046 (-5.0e-16)          no crossover 207.286 (+3.1e-09)
Verification

On 94828e9: pixi run check (5325 passed, 566 skipped, 1 xfailed) and pixi run test-bench --i-know-another-is-running (264 passed, 16 skipped). The load guard was overridden because check had just loaded the box, and the harness tests assert correctness, not time.

Deliberately not done
  • Gurobi and Xpress are not measured: their bundled licences stop well below rung m.
  • Rung l is not measured: storage at m already takes over three minutes for interior point.

🤖 Generated with Claude Code

https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1

claude added 3 commits October 8, 2026 14:20
…, and when it paid on the benchmark models

Re-lands #1879, which merged into its stacked base after that base had
already landed, so it never reached main. The bench builds a model per way
now that keep= is gone (#1884), and the section says what an LP started from
such an answer begins from today.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1
@read-the-docs-community

read-the-docs-community Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Documentation build overview

📚 specsolve | 🛠️ Build #35019228 | 📁 Comparing 94828e9 against latest (8c7bd4b)

  🔍 Preview build  

No files changed.

@codspeed

codspeed Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 67 untouched benchmarks
⏩ 307 skipped benchmarks1


Comparing claude/festive-carson-8x46sq-crossover (94828e9) with main (35357c7)2

Open in CodSpeed

Footnotes

  1. 307 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩

  2. No successful run was found on main (76c77c3) during the generation of this report, so 35357c7 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩

The one fact specific to specsolve, that an answer without crossover
carries no basis, is already in the warm-start how-to. The rest was
solver-native option names and a benchmark verdict of measure it
yourself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1
@FBumann FBumann changed the title docs(solvers): how to solve an LP by interior point without crossover, and when it paid on the benchmark models chore(bench): a benchmark that times interior point without crossover against simplex on the ladder Oct 8, 2026
@FBumann
FBumann merged commit 7a5488c into main Oct 8, 2026
14 of 15 checks passed
@FBumann
FBumann deleted the claude/festive-carson-8x46sq-crossover branch October 8, 2026 15:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants