Issues with Markowitz Tolerances
回答済みHello,
I scaled my model completely according to the guidelines on the Gurobi website (it was recommended to keep the upper value of the RHS and matrix range and the objective function value in the range of e+4 or smaller).
The coefficients currently look like this:
-----------------------------------------------------------------------------------------------------------------------------
Coefficient statistics:
Matrix range [1e-03, 3e+03]
Objective range [1e+00, 1e+00]
Bounds range [0e+00, 0e+00]
RHS range [2e-02, 6e+03]
Concurrent LP optimizer: dual simplex and barrier
Showing barrier log only...
Presolve removed 2795471 rows and 1214271 columns (presolve time = 5s) ...
Presolve removed 2795471 rows and 1214271 columns
Presolve time: 6.82s
Presolved: 209152 rows, 446324 columns, 1057846 nonzeros
-----------------------------------------------------------------------------------------------------------------------------
However, I still get the warning message with the Markowitz tolerances:
-----------------------------------------------------------------------------------------------------------------------------
Crossover log...
44465 DPushes remaining with DInf 2.0054831e-01 29s
0 DPushes remaining with DInf 2.0054831e-01 29s
Warning: Markowitz tolerance tightened to 0.5
109260 PPushes remaining with PInf 4.0156260e-04 29s
0 PPushes remaining with PInf 0.0000000e+00 29s
Push phase complete: Pinf 0.0000000e+00, Dinf 2.8746339e-01 30s
Iteration Objective Primal Inf. Dual Inf. Time
153404 2.0314188e+03 0.000000e+00 2.874634e-01 30s
Extra simplex iterations after uncrush: 60
155499 2.0314188e+03 0.000000e+00 0.000000e+00 32s
Solved with barrier
Solved in 155499 iterations and 32.22 seconds (25.94 work units)
Optimal objective 2.031418811e+03
-----------------------------------------------------------------------------------------------------------------------------
Could you give me a hint why this problem occurs despite the scaling and how I could solve it ?
Marius
-
正式なコメント
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 try Gurobot, our chatbot interface offering instant, expert-level support. -
Hi Marius,
From the log file you posted, you should not worry much about the numerical properties of your model.
Yes, the Markowitz tolerance can be an indicator of numerical issues. However, it is often also set to improve stability of the Simplex algorithm when the Kappa value gets too big. It is normal behavior to adjust the Markowitz tolerance from time to time. So as long as you don't see this message too often in your log files and no other numerical issues rise up, your model should solve just fine.
Best regards,
Jaromił0 -
Hello Jaromił,
thank you very much for your answer!
I get this warning message only once in the log.
I was just a bit concerned because in addition to the warning message regarding the Markowitz tolerances, the number of iterations displayed in the log has also increased to 78 and the number of "Extra simplex iterations after uncrush" has increased to 60.When I specified the "dual simplex" method to solve the model, instead of the warning message regarding the Markowitz tolerances, I also got this warning message:
"Warning: unscaled dual violation = 9.00105e-06 and residual = 4.00178e-10".Could these be indications of numerical problems, or would you say that everything should still be fine?
Kind regards
Marius0 -
Hi Markus,
Could these be indications of numerical problems, or would you say that everything should still be fine?
In your warning message, the unscaled dual violation is only very little above the default FeasibilityTol. So as long as the final constraint violations are within the given tolerances, you should be good to go. You can print the solution violation via either reading the solution quality attributes such as, e.g., MaxVio. Alternatively, in Python you can use the printQuality.
If you notice that your final solution has unacceptable violations, you could try experimenting with the NumericFocus parameter since the warnings you get are rather light weight.
Best regards,
Jaromił0
投稿コメントは受け付けていません。
コメント
4件のコメント