Skip to content

Fix: scale ray infeasibility back to original units - #109

Open
LucasBoTang wants to merge 1 commit into
MIT-Lu-Lab:mainfrom
LucasBoTang:feature/restore-infeasibility-detection
Open

Fix: scale ray infeasibility back to original units#109
LucasBoTang wants to merge 1 commit into
MIT-Lu-Lab:mainfrom
LucasBoTang:feature/restore-infeasibility-detection

Conversation

@LucasBoTang

Copy link
Copy Markdown
Collaborator

Both infeasibility tests compare a ray's residual against that ray's objective value. The objective is converted back to the original problem's units; the residual is not.

Fix

  1. src/utils.cu: divide the two ray infeasibilities by constraint_bound_rescaling / objective_vector_rescaling (dual_slack_norm stays raw — it only normalizes the ray and cancels).
  2. src/utils.cu: eps_infeasible default 1e-12 → 1e-10. The fix raises every ratio, so the old constant is over-tight.
  3. src/cli.c: add --eps_infeasible <tol>.

Results

Mittelmann-49 + MIPLIB-383 feasible, Netlib-infeas-29 + MIPLIB-infeas-334, all with the fix applied.

eps_infeasible Netlib MIPLIB-infeas false positives
1e-6 27/29 312/334 7
1e-7 26/29 310/334 2
1e-8 25/29 310/334 1 (leo2)
1e-9 25/29 305/334 0
1e-10 24/29 300/334 0
1e-11 23/29 284/334 0
1e-12 21/29 265/334 0

The lowest ratio any feasible instance reaches is 5.176e-09 (leo2). 1e-10 is the first clean value and keeps the 21–28× margin the tolerance was originally calibrated to.

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