如果在gurobi求解器中使用交互式求解器,则可以执行以下操作:
gurobi> m = read('model.mp')
gurobi> m.optimize()
[...]
Found heuristic solution: objective 821425.00000
然后中止并通过获取当前解决方案
gurobi> m.printAttr('X')
我希望在纸浆中具有相同的行为。特别是在致电之后:
prob = pulp.LpProblem(name="MIPProblem", sense=pulp.LpMaximize)
[...]
status = prob.solve(pulp.GUROBI_CMD(msg=True, keepFiles=1))
我想等到一定时间间隔后找到/中止第一个启发式解决方案,然后再获得Gurobi找到的当前最佳解决方案。我该怎么办?
答案 0 :(得分:0)
您可以使用pulp.GUROBI
或pulp.GUROBI_CDM
。
主要区别在于pulp.GUROBI
是 gurobipy (Gurobi Python界面)的包装,而pulp.GUROBI_CDM
使用命令行(即,它在文件中写入LP / ILP)然后调用求解器)。
让我们区分这两种情况:
案例1 :pulp.GUROBI
:
在这种情况下,您可以访问SolverModel对象。对于这些字段,您可以直接参考文档。但是,对于您的特定用例,您需要的是ObjBound。
一个小例子:
import pulp
...
status = prob.solve(pulp.GUROBI(timeLimit=1))
print(pulp.LpStatus[status]) # status
print(prob.solverModel.ObjBound) # best objective found
案例2 :pulp.GUROBI_CDM
:
在这种情况下,可以通过命令行解决问题,并从结果文件(即here)中读取解决方案
import pulp
...
status = prob.solve(pulp.GUROBI_CMD(options=[('TimeLimit','1')]))
print(pulp.LpStatus[status]) # status
print(pulp.value(prob.objective)) # best objective found
请注意, GUROBI_CMD确实提供了良好的解决方案状态 [see here],因此,即使没有提供解决方案,您也可以阅读“最佳”,因为Gurobi解决方案文件没有提供有关状态的信息。