我使用LP弛豫开发了SCIP / MIP模型,该模型依赖于0-1变量的分支。但是,由于我还没有弄清楚如何使用相关的SCIP回调,因此效率非常低。 这是我的代码:
isMIP = False
while True:
model.optimize()
if isMIP:
print("Optimal value:", model.getObjVal())
break
else:
print("Intermediate value:", model.getObjVal())
x,y,u = model.data
fracvars = []
for j in y:
w = model.getVal(y[j])
if w > 0.001 and w < 0.999:
fracvars.append([j,abs(w-0.5)])
if fracvars:
fracvars.sort(key = itemgetter(1))
min_var, min_value = min([(val[0],val[1]) for val in fracvars])
model.freeTransform()
model.chgVarType(y[min_var],"I") # the very inefficient part...
print("Integer constraint on y[%s]" % min_var)
else:
isMIP = True
有人可以帮我加速代码吗?非常感谢。
答案 0 :(得分:1)
请参阅http://scip.zib.de/doc-5.0.1/html/BRANCH.php了解如何编写分支规则,http://scip.zib.de/doc-5.0.1/html/SEPA.php用于切割平面分隔符(我仍然不确定您要做什么......)。这是C插件的描述,但是等效应该存在于PySCIPOpt中,或者如果你知道你需要的话,应该很容易添加。