Repository navigation
chore(bench): a benchmark that times interior point without crossover against simplex on the ladder - #1895
Merged
Conversation
…, 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
…main 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
Merging this PR will not alter performance
Comparing Footnotes
|
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#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.pytimes HiGHS three ways on a ladder rung: simplex, interior point with crossover, and without. On rungm, no crossover was fastest only ontransport, by 13%. No docs orsrc/change.What it is, and what changed from #1879
bench/crossover.pysolves a case's rung three ways: HiGHS's own choice (simplex on these LPs), interior point with crossover, and interior point without. It prints the solve seconds (diagnostics().seconds['solve']: the solve alone, not the build), whether the answer has duals, and the objective's gap relative to simplex. It is not an arm, and it writes no results file.bench/test_harness.pychecks that the three ways reach one optimum ondispatch2xs.docs/howto/solvers.md. It is dropped here. The one fact specific to specsolve, that such an answer carries no basis, is already indocs/howto/warm-start.md. The rest was each solver's own option names and a verdict of "measure on your own model". With it went the changelog line, and the type is nowchore.keep=is gone, so each way now gets a model built for it, and no solver state crosses from one way to the next.Measured on main: HiGHS, rung m, solve seconds
Method:
python -m bench.crossover dispatch nodal transport storage --sizes m, thentransport nodalagain, at45c540c(maindc2935eplus this branch, whosesrc/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.transportandnodalran twice, and their cells are the range.On
transport, the means are 29.25 s without crossover and 33.81 s for simplex: 13% less. Onnodal, 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 onnodal.Full output
Verification
On
94828e9:pixi run check(5325 passed, 566 skipped, 1 xfailed) andpixi run test-bench --i-know-another-is-running(264 passed, 16 skipped). The load guard was overridden becausecheckhad just loaded the box, and the harness tests assert correctness, not time.Deliberately not done
m.lis not measured:storageatmalready takes over three minutes for interior point.🤖 Generated with Claude Code
https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1