Turning off presolve improves efficiency immensly
AnsweredDear Gurobi community,
I have a question about the use of presolve and its impact on performance.
I have a large MILP model for which presolve is able to remove a good amount of rows and columns. Nonetheless, if I disable it, the performance increases greatly. By leaving presolve with its default value, and after obtaining the LP relaxation, Gurobi is unable to even find a first feasible solution. On the other hand, by disabling presolve (setting its value to 0), not only can I find a feasible solution fast but the overall performance is quite good.
Given this, could you please tell me if this is to be expected and give me some insights on what may be happening?
Thanks in advance. Any insights will be very helpful.
-
Official comment
This post is more than three years old. Some information may not be up to date. For current information, please check the Gurobi Documentation or Knowledge Base. If you need more help, please create a new post in the community forum. Or why not try our AI Gurobot?. -
To understand what's happening, can you post logs from your tests?
0 -
Thank you for your availability.
In the link I provide the logs (for 600s runs) for test using pure ILP and MILP versions of the model with and without presolve. The size of the logs was to large just to paste them directly in the comment box.
https://drive.google.com/open?id=1kRWB1dHf8MHb_y66QgDr8urnq_3jyJ40
The first log corresponds to the ILP model without presolve; the second corresponds to the MILP model without presolve; the third corresponds to the ILP model with presolve and; the fourth log corresponds to the MILP model with presolve.
As you may see, the use of presolve has a negative impact on solving the problem.
I hope that this sufficient. I'm available for any further clarifications if needed.
Thank you very much for your time. Any insights you may provide me will be very helpful.
0 -
Thanks for the logs. Looks like your runs with default presolve need to be more aggressive at finding an integer feasible solution. Try setting ZeroObjNodes to something like 500 or 1000; same for MinRelNodes. You should also try adding MIPFocus=1.
0 -
Thank you very much for your feedback. I really appreciate it.
Since I wish to understand and describe the model in its original form (the reason why I remove presolve), I need to run the model with no changes in the optimizer's parameters. Nonetheless, I've tried your suggestion and the MIPFocus = 1 helped obtaining a feasible solution, but the performance is still far from the 'no presolve' alternative.
I'm unable to understand why the large difference in performance, when the objective of presolve would be, at least in my understanding, to help improving the performance by removing "redundant" rows and columns. For me, it is very counter-intuitive.
Thank you once more for your time. If you have any other insights or ideas of what may be the reason for these results, they would be very much appreciated.
0
Post is closed for comments.
Comments
5 comments