获取正确的结果只有当设置InFeasTol参数
回答你好,
我有一个担忧关于Python Gurobi的参数设置。我知道我的数学模型制定的解决方案从Gurobi然而我得到一个不正确的价值,我相信原因是Gurobi给我为二进制变量值不是0或1。
澄清,x (i, j, k)是一个二进制变量,但这里是一个小的截图我从gurobi得到的结果:
正如你所看到的目标函数的值是28.2 gurobi获得的。然而正确的目标函数值(总距离我最小化)应该是33.4英里。现在相同的模型,当我设置一个参数公差的线后,我得到了正确的答案:
m.Params。IntFeasTol = 1 e-09
但这使计算时间从3秒显著增加到8分钟。
对于我的研究,我需要比较两个模型,只在一些限制条件是不同的。所以我需要两个模型中都得到相同的目标函数值,当我将这个参数设置为1 e-09第一个模型。但自从我得到正确的值在第二个模型没有了这个参数,它运行速度虽然是一个更大的模型(基于数量的变量约束),这使得我的比较没有意义,因为我需要运行在相同条件下两种车型。
有什么原因我得到错误的结果没有公差值?
0
-
嗨Azi,
有什么原因我得到错误的结果没有公差值?
每一个数学软件与公差由于浮点运算(用很少的例外情况)。因此,您获得的解决方案是正确的公差范围内。减少这些公差与设置IntFeasTol预计参数恶化性能,因为更多的繁琐计算。你可以尝试设置IntegralityFocus参数中可用的最新版本Gurobi这将使Gurobi关注真正的整数值,即。(\ \{0,1 \}\)在你的情况下,。请注意,使用这个参数很可能恶化性能。
为什么需要公差和更多细节可能增加困难,请看看这篇文章埃德·克洛茨在MIPs病态和数值不稳定。
最好的问候,
Jaromił0
请登录留下你的评论。
评论
1评论