Skip to content

Improve infeasibility detection - #112

Merged
ZedongPeng merged 17 commits into
MIT-Lu-Lab:mainfrom
ZedongPeng:improve_infeasibility_detection
Oct 26, 2026
Merged

ZedongPeng merged 17 commits into
MIT-Lu-Lab:mainfrom
ZedongPeng:improve_infeasibility_detection

Conversation

@ZedongPeng

Copy link
Copy Markdown
Collaborator

No description provided.

ZedongPeng and others added 17 commits September 20, 2026 02:10
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.
@ZedongPeng
ZedongPeng merged commit 724894e into MIT-Lu-Lab:main Oct 26, 2026
20 checks passed
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.

1 participant