Gurobi技术问询:如何保存预求解后模型以重复使用
在Gurobi 7.5.2中保存预求解后模型以节省重复运行时间的方法
你之前尝试用.mps或.lp格式保存预求解后的模型,加载后仍会重新执行预求解,核心原因是这两种文本格式仅存储原始模型的结构信息,不会记录预求解过程中完成的约束合并、变量删减、上下界调整等简化结果。而Gurobi的二进制.grb格式可以完整保存模型的状态(包括预求解后的简化模型),正好满足你的需求。
具体实现步骤(Python 3.6)
运行预求解并保存为.grb格式
先加载或创建你的模型,开启完全预求解后执行优化(如果只想做预求解不求解,可以额外设置参数),最后将模型写入.grb文件:import gurobipy as gp from gurobipy import GRB # 加载原始模型(或自行创建模型) model = gp.read("your_original_model.lp") # 设置完全预求解模式(参数2表示开启所有预求解步骤) model.setParam(GRB.Param.Presolve, 2) # 执行优化(这一步会完成预求解过程) model.optimize() # 保存预求解后的完整模型状态到.grb文件 model.write("presolved_model.grb")加载预求解模型并跳过预求解步骤
下次运行时,直接加载.grb文件,然后关闭预求解参数,就可以直接基于预求解后的模型开始求解:import gurobipy as gp from gurobipy import GRB # 加载预求解后的.grb模型 presolved_model = gp.read("presolved_model.grb") # 关闭预求解,避免重复执行 presolved_model.setParam(GRB.Param.Presolve, 0) # 直接开始求解 presolved_model.optimize()
额外说明
.grb格式是Gurobi专属的二进制格式,会保存模型的所有状态信息,包括预求解结果、变量/约束的简化状态,甚至是之前的求解进度(如果有的话)。- 如果你只想执行预求解而不进行后续的优化,可以设置
GRB.Param.Method为-1,这样Gurobi会仅完成预求解步骤就停止,之后再保存模型即可。
内容的提问来源于stack exchange,提问作者Matthias Aschenbrenner
相关产品推荐
相关产品推荐

