-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Separate presolve routines for LP / MIP? #17
Comments
I think that this would be OK. I'm a bit concerned that it does not mesh well with user configuration: what if I want to run presolve that mixes together LP and MIP presolve routines? But, I'm not sure this is something anyone would realistically want to do. I guess worst case, someone could write their own presolve loop using the How different would the two main functions be? |
At first, I guess the simplest would be to duplicate such routines. There aren't that many though, and they are not very complicated.
Likely very similar. The two can be wrapped as follows function apply!(ps, ::GenericPresolve, config)
if ps.pb0.is_continuous
apply!(ps, LPPresolve(), config)
else
apply!(ps, MIPPresolve(), config)
end
return nothing
end |
I guess this also makes it easier to eventually add QP support. This design seems fine by me. I would like to avoid duplicating the actual reductions, but having two slightly different top-level presolve reductions is fine. |
The question of how MIP reductions (resp. LP reductions) should handle continuous (resp integer) variables has come up a few times now.
It might make sense to fully separate LP reductions from MIP reductions (incidentally, we already have
src/lp
andsrc/mip
), at least for now.We can still have a "meta-main"
presolve!
function that would check whether a problem is LP/MIP and call the appropriate LP/MIP-specific "main" presolve. Data structures likeProblemData
and style conventions can also be shared.Pros:
Cons:
@joehuchette what do you think?
The text was updated successfully, but these errors were encountered: