如何检查 LP 的解决方案是否在 GuRoBi 中是二进制的

How to check if the solution of an LP is binary in GuRoBi

我目前正在实施自己的启发式方法来解决 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 调用来检查解是否为二元解?

您可以使用 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".

过滤它们