Presolve

Presolve

设计了古罗比预解算法,使模型更小,更容易求解。然而,在某些情况下,预解可能会导致数值问题。下面的Python代码可以帮助您确定是否发生了这种情况。首先,读取模型文件,打印预解模型的汇总统计信息:

m = read(' gu罗比.rew') p = m.p olve() p. printstats ()
如果数值范围看起来比原始模型差得多,请尝试参数总= 0
m.reset() m.Params.Aggregate = 0 p = m.presolve() p. printstats ()
如果生成的模型在数值上仍然有问题,您可能需要使用该参数完全禁用预解Presolve = 0;尝试以上步骤使用
m.reset() m.Params.Presolve = 0 p = m.presolve() p. printstats ()

如果统计数据看起来更好总= 0Presolve = 0,您应该进一步测试这些参数。对于一个连续(LP)模型,您可以直接测试它们。对于MIP,您应该比较有和没有这些参数的LP松弛。下面的Python命令创建三个LP松弛:不使用预解的模型、使用预解的模型和使用预解的模型总= 0

m =阅读(gurobi.rew) r = m.relax () r.write (gurobi.relax-nopre.rew) p = m.presolve () r = p.relax () r.write (gurobi.relax-pre.rew) m.reset () m.Params.Aggregate = 0 p = m.presolve () r = p.relax () r.write(“gurobi.relax-agg0.rew”)
对于这三个文件,使用前面提到的技术来确定是否Presolve = 0总= 0提高了LP弛豫的数值。

最后,如果总= 0帮助数值,但使模型太慢,尝试AggFill = 0代替。