Repository navigation
docs(solvers): how to solve an LP by interior point without crossover, and when it paid on the benchmark models - #1879
Merged
FBumann merged 8 commits intoOct 8, 2026
Conversation
…or point with crossover and without Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1
…ive-carson-8x46sq-crossover
…e to the simplex one Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1
…, and when it paid on the benchmark models Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1
…e changelog names #1879 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
|
…ive-carson-8x46sq-crossover # Conflicts: # CHANGELOG.md
…ive-carson-8x46sq-crossover
…start' into claude/festive-carson-8x46sq-crossover # Conflicts: # CHANGELOG.md
An error occurred while trying to automatically change base from
claude/festive-carson-8x46sq-mipstart
to
claude/festive-carson-8x46sq-warm
October 8, 2026 14:16
FBumann
merged commit Oct 8, 2026
add46a2
into
claude/festive-carson-8x46sq-mipstart
13 checks passed
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.
The discussion it refers to began with: "What about basis, warmstaer initial solution etc? What kind of things would be reasonable to add to boost sovler performance?"
Note
The following content was generated by AI.
The solvers how-to now says how to leave crossover off on each sink and what that costs: no basis, so no
start=. On HiGHS at rungmit paid only ontransport, by 14%.bench/crossover.pymeasures this.What it is
docs/howto/solvers.mdgains "Solve an LP by interior point without crossover": the option on each sink, what the answer carries (duals, no basis), and the conclusion below with this PR's number.bench/crossover.pybuilds a case's rung once and solves it three ways, each from a fresh solver: HiGHS's own choice (simplex on these LPs), interior point with crossover, and interior point without. It prints solve seconds (diagnostics().seconds['solve'], the solve alone and not the build), whether the answer has duals, and the objective's gap relative to simplex. It is not an arm and writes no results file.bench/test_harness.pychecks that the three ways reach one optimum ondispatch2xs.src/change. A solve that would pick crossover itself, when nooutputs=needs a basis, was the idea in the discussion. These numbers do not support it on HiGHS.Measured: HiGHS, rung m, solve seconds
Method:
python -m bench.crossover <cases> --sizes m, each case built once and solved three ways withkeep='nothing'. HiGHS 1.15, atfcea065for the first run and6908ec1for the others: the bench script changed between them,src/did not. Each run started only after the 1-minute load average fell below 0.5 on 4 cores, and nothing else ran on the box.transportandnodalwere run three times,dispatchandstoragetwice; each cell is the range over those runs.On
transport, without crossover is fastest: 21.2 s against 24.7 s for simplex, the means of the three runs, 14% less. Onnodalit took 28 times as long as interior point with crossover: 33.2 s against 1.18 s, the means. Every answer had duals. The largest objective gap to simplex was 6.7e-9 relative (dispatch, without crossover), so the how-to says 7e-9.At rung
s(one run), the fastest way was the same as atmon every case excepttransport. There simplex was fastest: 0.86 s against 1.25 s without crossover.Full output
Verification
Gates:
ruff check .,ruff format --check .,zensical build --strict, andpytest bench/test_harness.py -k crossover_bench. Thesrc/tree is #1878's, whose full suite is green.Deliberately not done
m.lis not measured:storageatmalready takes over two minutes per way.src/. The numbers say HiGHS's default is the right default on these models.🤖 Generated with Claude Code
https://claude.ai/code/session_01GLBvwp6NU7YjszFz5QMRf1