【问题标题】:binary variable depending on a continuous variable (mixed integer programming in cplex)取决于连续变量的二进制变量(cplex 中的混合整数编程)
【发布时间】:2022-01-05 23:32:29
【问题描述】:

我正在尝试为涉及二进制变量 v 和连续变量 i 的 MIP 问题制定一个约束,例如:

如果 i = 0,v = 0,并且 如果 i > 0,v = 1

我还没有想到解决方案,我不确定是否有解决方案。非常感谢任何建议。谢谢!

【问题讨论】:

    标签: constraints cplex mixed-integer-programming


    【解决方案1】:

    您可以依赖逻辑约束。 在 OPL 中你可以写

    dvar boolean v;
    dvar float+ i;
    
    subject to
    {
      v==!(i==0);
    }
    

    你也可以用all CPLEX APIs做同样的事情

    【讨论】:

      【解决方案2】:

      您还可以使用“传统”Big-M 公式对此进行建模,该公式在互联网上的许多地方和许多教科书中都有记载。

      通常这是在一对这样的约束中完成的:

      i <= M * v
      

      如果 v 为零,则强制 i 为零,如果 i 不为零,则 v 必须为 1,这满足了您的大部分要求,但仍然允许 i = 0 和 v = 1。在许多情况下,目标试图最小化包括 v 在内的一些表达式,这可能足以在 i=0 时鼓励 v=0。但是不要陷入对 M 使用非常大的值的愚蠢错误,因为这会对您的线性松弛和可能的整体性能产生不利影响。

      如果 i 为零,您可能还需要添加进一步的约束以强制 v 为零,例如:

      v <= i
      

      如果 i 为零,则直接将 v 强制为零。

      【讨论】:

      • 非常感谢。这行得通!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多