Repository navigation
Patch Papilo to skip unchanged coefficients in sparsify - #2267
ramakrishnap-nv wants to merge 1 commit into
Conversation
changeRow called the coefficient-changed callback even when the merged value equalled the old one. The Sparsify activity update asserts that the old and new coefficients differ, so sub-MIP presolve aborted in builds with assertions on (INCUMBENT_CALLBACK_TEST, about 1 in 100 runs). Only call the callback when the value changes. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
CI Test Summary✅ All 21 test job(s) passed. |
Description
SparseStorage::changeRowin Papilo called the coefficient-changed callback even when the merged value equalled the old one. The Sparsify activity update asserts the two differ, so a sub-MIP presolve aborted in builds with assertions on (theINCUMBENT_CALLBACK_TESTcrash inmip_solve.initial_solution_survives_papilo_crush, seen in CI run 41664476906 on #2247).This adds a small patch that only calls the callback when the value changes. Release builds are unaffected, since they have no asserts and an unchanged-value callback did nothing harmful.
I reproduced the crash about 1 in 100 runs on an assertion-enabled build of main. With the patch, 500 runs had no Papilo abort, and 4 runs hit the old condition and passed.
Upstream: scipopt/papilo#103 (issue) and scipopt/papilo#104 (PR). When a Papilo update includes it, this patch and the
PATCH_COMMANDcan be removed.The other abort seen in those runs,
current_incumbent.size() == leaf_problem.num_cols, is #1909 and is not changed here.Checklist
🤖 Generated with Claude Code