Add root node presolve using Papilo#234
Add root node presolve using Papilo#234rapids-bot[bot] merged 131 commits intoNVIDIA:branch-25.10from
Conversation
aliceb-nv
left a comment
There was a problem hiding this comment.
Thanks a lot for the great work Rajesh and Hugo!!
Approving with a few comments :)
Also, could you perhaps add a few tests ensuring third-party presolve works well? Checking infeasibility detection, for example
cpp/src/mip/solve.cu
Outdated
|
|
||
| // FIXME:: reduced_solution.get_stats() is not correct, we need to compute the stats for the | ||
| // full problem | ||
| full_sol.post_process_completed = true; // hack |
There was a problem hiding this comment.
full_problem.post_process_solution() should be able to be called right? Since it's on the original problem with no presolving, it should be a no-op
There was a problem hiding this comment.
I think yes, you're right
There was a problem hiding this comment.
Calling full_problem.post_process_solution requires an unecessary call to preprocess_problem
|
Looks like we at least need a definition added to the lp-milp-settings.rst document, also looking at Python stuff for any gaps .... |
Handle dual post solve.
|
/ok to test de00644 |
rgsl888prabhu
left a comment
There was a problem hiding this comment.
Few minor requests
| problem = detail::problem_t<i_t, f_t>(reduced_problem); | ||
| presolve_time = presolve_timer.elapsed_time(); | ||
| CUOPT_LOG_INFO("Third party presolve time: %f", presolve_time); | ||
| } |
There was a problem hiding this comment.
Not for this PR, but we might want to add an setting to write out the presolved model.
|
/ok to test faf0200 |
rgsl888prabhu
left a comment
There was a problem hiding this comment.
Minor change, rest looks good. awesome work @hlinsen
|
/ok to test b490069 |
|
/ok to test acae869 |
|
@hlinsen Lets also add details on papilo being by default available in one and not in another, lets add it in FAQ and any other places where we can highlight this behavior |
|
/ok to test 69a5d2b |
|
/merge |
This PR implements: - Adapters to presolve/postolve before/after running the solver - Fetching of Papilo headers through Cmake - System install of boost for pip wheel - Runtime boolean parameter to enable the feature (true by default for MIP, false for LP). Notes: - LP is off by default due to some presolvers not supporting dual post solve. These presolvers can be disabled but reduction quality is impacted. - Post-solve status can appear as fail due to absolute/relative tolerances. Papilo uses absolute tolerance during post solve checks. Advice is to set relative tol in cuOpt to a very small value. - TBB is disabled. To be enabled in a follow up PR for parallel presolve. Fixes NVIDIA#277 Credits to: @rg20 Authors: - Hugo Linsenmaier (https://github.com/hlinsen) - Rajesh Gandham (https://github.com/rg20) - Ramakrishnap (https://github.com/rgsl888prabhu) - Trevor McKay (https://github.com/tmckayus) Approvers: - Alice Boucher (https://github.com/aliceb-nv) - Ramakrishnap (https://github.com/rgsl888prabhu) - Robert Maynard (https://github.com/robertmaynard) URL: NVIDIA#234
This PR implements:
Notes:
Fixes #277
Credits to: @rg20