Skip to content

Feat: infeasibility detection - #106

Merged
ZedongPeng merged 5 commits into
MIT-Lu-Lab:mainfrom
LucasBoTang:feature/restore-infeasibility-detection
Sep 4, 2026
Merged

Feat: infeasibility detection#106
ZedongPeng merged 5 commits into
MIT-Lu-Lab:mainfrom
LucasBoTang:feature/restore-infeasibility-detection

Conversation

@LucasBoTang

Copy link
Copy Markdown
Collaborator

Summary

Adds primal/dual infeasibility detection to the main solve loop. The earlier implementation (removed in #71) was unreliable; this is a new integration:

  • On every termination evaluation, compute_infeasibility_information() builds ray estimates from the current fixed-point residual, and check_termination_criteria() returns PRIMAL_INFEASIBLE / DUAL_INFEASIBLE when the certificate ratio is at or below the new eps_infeasible (default 1e-14).
  • eps_infeasible is exposed to Python as InfeasibleTol, with validation and a README entry.
  • The infeasible/unbounded tests are re-enabled with InfeasibleTol=1e-6.
  • Version bumped to 0.3.1.

Verification

  • pytest test/: 55 passed.

  • MIPLIB instances (feasible): no false infeasibility declarations.

  • Netlib infeasible set (29 instances):

    presolve ε detected time limit false optimal
    off 1e-4 12/29 16 1
    off 1e-6, 1e-8 12/29 17 0
    PSLP 1e-4 22/29 6 1
    PSLP 1e-6, 1e-8 22/29 7 0

    Not every instance is caught, but this is a clear improvement over the previous implementation.

Comment thread python/README.md Outdated
@LucasBoTang
LucasBoTang force-pushed the feature/restore-infeasibility-detection branch from c0a289e to 7888dfd Compare September 4, 2026 18:56
@ZedongPeng
ZedongPeng merged commit 66e0a0e into MIT-Lu-Lab:main Sep 4, 2026
18 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.

2 participants