Postsolve for infeasibility certificates - #48
Conversation
|
For each of the 29 netlib infeasible LPs I ran the full pipeline end to end:
Only 11 of the 29 are reduced without being detected infeasible outright, so only those reach the postsolve. For all 11 the lifted ray is a valid Farkas certificate of the original problem, and the Farkas support matches exactly between the reduced and original problems, so the lift is faithful.
|
|
This is awesome, thank you so much for submitting this contribution. Sorry for the delay with getting back to you. Two comments from me below and one regression test from Uncle Claude (I'm very happy to discuss and reconsider in case you don't agree on something. And in case Uncle Claude is wrong, please let me know.):
I also asked Uncle Claude for a correctness review. Please see the attached file. Once again, thank you for this contribution. I'll make sure to be much faster with feedback in the next round. |
|
Thanks for digging into this. For the sign convention, you're right, but it's deliberate: I followed Gurobi. It draws the same distinction between its own two attributes, for a If we go with one convention, one of the two ends up reversed against the solver and users have to negate the ray themselves. I'd rather keep it and just document both conventions in I'll get on the rest in the meantime. |
Interesting! Didn't know that.
Totally fine with me to go with the simpler approach of just documenting it. Perhaps just add a comment above postsolve_primal_infeas_ray and postsolve_dual_infeas_ray in PSLP_API.h?
Awesome, let me know if there's anything I can do to help. |
|
On the file split: I left It could also be in an independent shared file. Let me know what you think. |
|
Also added the sign convention comment above both functions in |
|
Awesome, great contribution! Merging. |
What it does
PSLP's postsolve maps a solution of the reduced problem back to the
original problem, but not the certificate returned when the problem is
infeasible or unbounded. This PR adds that mapping for both cases:
Interface
Tests
tests/test_ray_postsolve.h:certificate validity.