Repository navigation
Improve infeasibility detection - #112
Merged
ZedongPeng merged 17 commits intoOct 26, 2026
Merged
Conversation
The relative margin that the objective term of a ray must clear to count as an infeasibility certificate (t3 >= delta) was a compile-time constant of 1e-8. Expose it as a solver parameter with the same default: --infeasible_obj_margin on the CLI, InfeasibleObjMargin / infeasible_objective_margin in Python. It must be non-negative; 0 reduces the condition to a plain sign test. Detection results are unchanged.
The infeasibility check accepts a ray when max viol / max |A||d| is at most eps_infeasible. Both maxima were taken in the equilibrated space of the preconditioner; take them in the units of the original problem instead: eps is then a relative perturbation of the matrix as given, independent of the rescaling settings, and judged in the same units as the optimality residuals. OSQP, SCS and PDLP test their certificates in the original space as well. On the 334 MIPLIB infeasible/unbounded instances the detected set is unchanged (318 with and without presolve) and detection takes on average 6% (presolve off) and 3% (on) fewer iterations. No false claim on 413 feasible instances, but the closest run moves from 3.2e-5 to 1.08e-8 (ns1688926): a row with very large coefficients that the projected ray satisfies by sign can dominate the activity and hide a violated row, so test_huge_objective_and_huge_row with presolve off is now an expected failure and the Python README asks for coefficient ranges within about 1/InfeasibleTol. Details in docs/infeasibility_detection.
…th external linkage
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.
No description provided.