在运行cplex模型“docplex(python)”时,我注意到cplex多次重复相同的间隙值(超过300次)。没有任何改进,还有大量节点有待探索(即使问题不够大,节点数:50,变量数:8655,约束数:16950)。我在问这是否是一个正常的结果,是否有参数可以帮助解算器指导搜索,比如在不停止解算器的情况下更改搜索空间?
(附件,您可以看到日志输出)[1]:https://www.mediafire.com/file/s9sofxhze8em31y/log_output_2.pdf/file
Tags:
sascha是正确的:存在一些众所周知很难解决的小MIP问题。 本文是一篇很好的参考文献。 其他建议:将read datacheck参数设置为2,以排除潜在的数值问题 尝试非标准的mip强调值,如果最佳界限被卡住,3可能会给出良好的结果,而4有时会给出非常好的结果。MIP emphasis 5可以帮助您设置一个时间限制,因为它试图尽早计算出好的解决方案
docplex代码:
如果这不起作用,请发布CPLEX日志的较大摘录,从头开始
从完整日志中,我可以从建模助手中看到许多此类警告(read.datacheck=2)
这意味着约束的右侧太小。CPLEX以浮点数形式进行计算,本质上是不精确的;因此,所有计算均受公差限制。 约束满足度公差为1e-6,在其他术语中为约束,例如
X+2 Y>;=三,
可通过公差范围为1e-6的CPLEX解决方案满足要求
简而言之:不要使用1e-6以下的系数或常数(绝对值)。 使用如此微小的数值只能在无用的数值问题上干扰cplex。 使用纯0或删除约束。 例如,一个约束,如:
应该写
系数的相同规则:避免系数低于1e-7。如果您的数据包含它们,请过滤它们或缩放数据。 建议在整个模型中,系数的数量级范围不应超过1e+6,换句话说,最大值与最小值的比率应保持在1e+7以下;否则,数字上的麻烦是意料之中的
至于参数,我看到您正在使用强分支。只有当它真的有帮助的时候才使用它,因为它的CPU非常昂贵。 我还注意到您将线程限制为2,为什么不让cplex使用尽可能多的线程
总之,首先修复这些微小的系数,然后在没有强分支和完整线程的情况下尝试
从您的新日志中,我看到所有数据问题都已修复,这很好。尽管如此,mip搜索还是被卡住了,最佳界限没有移动。 你的问题主要是二进制变量,所以高度组合;这些问题可能很难解决。 尽管如此,还是有一些一般性建议:
此外,您可以尝试“抛光”启发式,它有时会给出很好的结果。要在给定间隙值后切换到抛光,请使用cplex interactive中的“set mip strategy polishafter mipgap 0.40”,这将在通过40%间隙阈值时切换抛光
如果什么都不起作用,那么模型公式本身可能存在问题。一个想法是设置一个简单的目标(比如某个变量或二进制文件的总和),看看情况会有什么改善。 如果是,问题在于找到更好的解决方案,如果不是,问题在于找到可行的解决方案。在后一种情况下,可行性泵(mip策略fpheur 1或2)可能会有所帮助
相关问题 更多 >
编程相关推荐