获取根节点放宽解决方案



我正在研究Gurobi/Python的B&C框架,我想检索根节点问题的最佳解决方案。我该怎么做?

谢谢。

我们很可能想要使用 MIPNODE 回调。 请注意,在根节点求解期间,每个切割通道将调用一次 MIPNODE 回调。MIPNODE_NODCNT值将保持在 0,直到根节点完成。如果从根节点期间查询松弛值,则第一个 MIPNODE 回调将给出没有切割平面的松弛,最后一个回调将在应用所有根切割后提供松弛。

下面是一个示例,该示例在根节点的每个切割通道处查询松弛解决方案(用于计算目标值,用于说明目的(,并在根节点完成后退出优化。

import sys
from gurobipy import *
def mycallback(model, where):
    if where != GRB.Callback.MIPNODE:
        return
    nodecount = model.cbGet(GRB.Callback.MIPNODE_NODCNT)
    if nodecount > 0:
        print("Root node completed, terminate now")
        model.terminate()
        return
    if model.cbGet(GRB.Callback.MIPNODE_STATUS) == GRB.Status.OPTIMAL:
        x = model.cbGetNodeRel(model._vars)
        objval = 0.0
        for idx, c in enumerate(model._coef):
            objval += x[idx] * c
        print(f"Root relaxation value: {objval}")
if len(sys.argv) < 2:
    print('Usage: callback.py filename')
    quit()
model = read(sys.argv[1])
model._vars = model.getVars()
model._coef = [v.obj for v in model._vars]
model.Params.OutputFlag = 0
model.optimize(mycallback)

如果使用示例模型p0033.mps(与 Gurobi 安装中的示例一起分发(运行上述代码,则应看到:

Read MPS format model from file /Library/gurobi811/mac64/examples/data/p0033.mps
Reading time = 0.00 seconds
P0033: 16 rows, 33 columns, 98 nonzeros
Root relaxation value: 2839.4918382913806
Root relaxation value: 2941.4
Root relaxation value: 2952.0
Root relaxation value: 2953.325
Root relaxation value: 2966.7142857142853
Root relaxation value: 2972.0083333333337
Root relaxation value: 2973.171211242146
Root relaxation value: 3023.0025940337223
Root relaxation value: 3033.999999999998
Root relaxation value: 3056.7500000000005
Root relaxation value: 3057.8333333333335
Root relaxation value: 3057.8333333333335

相关内容

最新更新