我目前正在尝试加快MIP的速度。我正在考虑的一种方法是使用PuLP实现cut回调启发式(将大于0.9的宽松整数变量四舍五入的方法)。不幸的是,我不相信PuLP可以调用这种功能,并且我已经研究了mip模块和dippy,但是我不想跳到这些功能。因此,作为旁注,如果有人知道如何使用PuLP本地完成此操作,请告诉我...
这使我想到了主要问题。由于PuLP是包装器,并且可以与其他求解器一起使用,因此我确实看到Gurobi具有这样的功能,并且能够使用以下代码从PuLP将代码调用到Gurobi:
Lp_prob = plp.LpProblem('Problem', plp.LpMinimize)
sd = plp.solvers.GUROBI(mip=True)
sd.actualSolve(Lp_prob, callback=mycallback)
这是我要调用的函数:
def mycallback(model, where):
model._vars = model.getVars()
if where == GRB.Callback.MIPNODE:
for x in model._vars:
if model.cbGetNodeRel(x) > 0.9 and model.cbGetNodeRel(x) < 1.0:
model.cbSetSolution(x, 1.0)
else:
return
但是,在运行了几次之后,启发式方法并没有完全加快速度,实际上,它使速度变慢了。我想知道这是否正确实施,或者我缺少什么。任何帮助或建议,将不胜感激。