SCIP - 积分分离

时间:2018-05-03 09:09:09

标签: python mathematical-optimization scip

我使用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

有人可以帮我加速代码吗?非常感谢。

1 个答案:

答案 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中,或者如果你知道你需要的话,应该很容易添加。