Presolve

Presolve

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

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

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

m = read('gurobi.rew') r = m.r orelax () r.s write('gurobi.relax-nopre.rew') p = m.r ost ('gurobi.relax-pre.rew') r = m.r ost () m.r params . aggregate = 0 p = m.r oplve () r.s ost ('gurobi.relax-agg0.rew') r = r.s ost ('gurobi.relax-agg0.rew')
对于这三个文件,使用前面提到的技术来确定是否Presolve = 0总= 0改进LP松弛的数值。

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