如何在GuRoBi中检查LP的解是否为二进制

我目前正在实施自己的启发式方法来解决gurobi python界面中的MILP问题。我的所有变量在开始时都是连续的,在某个时间点,解变为整数,这是我的终止条件。

现在,要检查变量的二元性,我遍历所有变量,并检查它们是否为0或1,如下所示:

for var in model.getVars():
    if (var.x >= intFeasTol and var.x <= 1.0-intFeasTol):
        break 

其中intFeasTol = 10^-4。我正在尝试查看最佳解决方案中的任何变量值在公差范围内是否不是0或1。

是否有更好的方法或api调用来检查解决方案是否为二进制?

changshengccs 回答:如何在GuRoBi中检查LP的解是否为二进制

您可以更高效地执行此操作,而无需使用numpy进行(python)循环。

intFeasTol = 1e-4
xs = np.array(model.getAttr('X',model.getVars())
int_inf = (xs > intFeasTol) & (xs < 1.0 - intFeasTol)

如果只有一些变量是二进制变量,则将它们保留在列表中(而不是调用model.getVars()),或为vtype“ B”过滤它们。

本文链接:https://www.f2er.com/2943150.html

大家都在问