Gurobi stopping criteria
Hello. I hope this is the right place to ask this kind of question. I use the barrier algorithm (no crossover) and after reading the documentation on the stopping conditions [1,2,3], it is not clear to me
1) whether the stopping conditions use scaled residuals or whether they are absolute;
2) what norm is used to measure those residuals.
If the residuals are scaled, is it possible to know what kind of scaling is applied?
Many thanks in advance.
Sincerely,
Dominique
[1] https://www.gurobi.com/documentation/9.1/refman/optimalitytol.html#parameter:OptimalityTol
[2] https://www.gurobi.com/documentation/9.1/refman/barconvtol.html#parameter:BarConvTol
[3] https://www.gurobi.com/documentation/9.1/refman/feasibilitytol.html#parameter:FeasibilityTol
-
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?. -
Hello Dominique,
1. I believe the residual values are unscaled, and
2. the norm is simply the max (or \(\ell_{\infty}\)) norm.
You can find a bit more info here,
https://www.gurobi.com/documentation/9.1/refman/barrier_logging.html
https://www.gurobi.com/documentation/9.1/refman/tolerances_and_user_scalin.html
Hope this helps & you are doing well:)
1 -
Thanks Yuriy! I'm well, thank you. I hope the same goes for you!
Also, do we understand correctly from [4] that Gurobi doesn't scale the problem before solving? We're just trying to run fair benchmarks.
Thanks again!
[4] https://www.gurobi.com/documentation/9.1/refman/grb_tolerances_and_the_lim.html
0 -
Hi Dominique,
Gurobi scales the problem before solving. The article [4] describes how to properly scale the problem before providing it to Gurobi to make the solver's life easier. You can turn off scaling with the ScaleFlag parameter. The objective scaling can be controlled with the ObjScale parameter.
Best regards,
Jaromił0 -
Hi Dominique,
sorry I have somehow missed your Q:( and thank you Jarek! (yes, we do scale)
Wish you stay well in 2021!! (we are fine in Calgary, it is a bit cold now, about -30C, but no complains otherwise:))
0 -
Hello,
Following Dominique's question, I tried to solve problems without scaling. I set ScaleFlag to 0 and ObjScale to 1. However, when I access the DualResidual and ConstrResidual, I do not find the same values as the latest displayed by the Barrier Logging. Is this normal, or am I doing something wrong? (the crossover is deactivated)
Best regards,
Geoffroy
0 -
Hi Geoffroy,
could you please elaborate on
> I do not find the same values as the latest displayed by the Barrier Logging
perhaps with the snapshot of the log, and a brief explanation on how check those internally?
Thank you,
0 -
Hi Yuriy,
Thank you for your answer. Here is a snapshot of the log.
Then, I check the ConstrResidual and DualResidual with GRBgetdblattr. The ConstrResidual value is 1.87e-12, and the DualResidual value is 1.43e-10, which are different than the latest values displayed by the Barrier logger.
I deactivated Presolve, ScaleFlag, Crossover, and I set Objscale to 1 for this test.
Best regards,
Geoffroy
0
Post is closed for comments.
Comments
8 comments