使用Pyomo和gurobipy获取Gurobi IIS

时间:2018-07-25 15:30:08

标签: gurobi pyomo

有人可以指导我完成使用gurobipy从Pyomo模型获取IIS的步骤吗?

opt = SolverFactory('gurobi',solver_io='python')

作为参考,这就是我在JuMP中使用的

function getIIS(m::JuMP.Model)
  grb_model = m.internalModel.inner
  num_constrs = Gurobi.num_constrs(grb_model)
  Gurobi.computeIIS(grb_model)
  iis_constrs = Gurobi.get_intattrarray(grb_model, "IISConstr",  1, num_constrs)
  m.linconstr[find(iis_constrs)]
end

因此,基本上,我需要访问内部gurobi模型以运行computeIIS函数,然后需要一种将行数组映射到实际Pyomo约束的方法。

谢谢!

2 个答案:

答案 0 :(得分:0)

使用后缀查看此Pyomo示例。我相信它正在做您想要的。

https://github.com/Pyomo/pyomo/blob/master/examples/pyomo/suffixes/gurobi_ampl_iis.py

答案 1 :(得分:0)

您可以在致电时将此作为选项传递给Gurobi 通过使用options_string解决函数。然后,Gurobi的Model.write()函数将写入文件。在这种情况下,您将编写一个.ilp文件,但是出于不同的目的存在其他文件格式。一个例子:

solver_parameters = "ResultFile=model.ilp" # write an ILP file to print the IIS

然后,您将在调用solve函数时添加options_string:

results = solver.solve(instance, options_string=solver_parameters) 

您还可以使用以下语法将多个选项字符串在一起。请注意LogToConsole和ResultFile选项的引号内的前导空白:

 solver_parameters = "TimeLimit=60" # set time limit (seconds)
            solver_parameters += " LogToConsole=0" # 0 =  turn off console output
            solver_parameters += " ResultFile=model.ilp" # write a MIP start file to warm start

此处找到的文档适用于使用Gurobi求解模型,底部的示例适用于任何Gurobi文件格式: http://www.gurobi.com/documentation/8.0/refman/solving_a_model2.html

最后,此链接说明了Gurobi可以写入的不同文件格式:http://www.gurobi.com/documentation/8.0/refman/model_file_formats.html#sec:FileFormats