【问题标题】:How to check if the solution of an LP is binary in GuRoBi如何在 GuRoBi 中检查 LP 的解是否为二进制
【发布时间】:2019-12-11 09:41:58
【问题描述】:

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

【问题讨论】:

  • 这个条件对于解值 >= intFeasTol 的所有变量都为真 - 与条件的第二部分是否为真无关。因此,例如,您没有区分 0.5 和 1.0。这需要是 and 运算符。
  • @mattmilten 我在手机上输入问题,但无法访问我的源代码。我解决了这个问题。

标签: linear-programming gurobi mixed-integer-programming


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-11-23
    • 1970-01-01
    • 2022-01-13
    • 2011-03-06
    • 1970-01-01
    • 2018-05-09
    • 2013-09-12
    • 2022-10-13
    • 2011-01-13
    相关资源
    最近更新 更多