【问题标题】:create boolean constraints in CPLEX在 CPLEX 中创建布尔约束
【发布时间】:2019-09-23 10:27:31
【问题描述】:

我在 CPLEX 12.9 中使用 OPL

在我的模型中,我有这两个 dvar 布尔值,X[p][t]Y[t]。 我要写:

(Y[t] == 1) => (X[u][t] == 0);

但也应该有可能

(Y[t] == 0) && (X[u][t] == 0);

但它不起作用。 我希望有人有一个想法。

【问题讨论】:

    标签: boolean cplex opl


    【解决方案1】:

    如果你写

    (Y[t] == 1) => (X[u][t] == 0);
    

    唯一不可能的情况是

    (Y[t] == 1) && (X[u][t] == 1);
    

    【讨论】:

    • 是的,场景应该是:(Y[t] == 1) => (X[u][t] == 0);或 (Y[t] == 0) && (X[u][t] == 0);但是如果我写 (Y[t] == 1) => (X[u][t] == 0);所有决策变量的程序输出都是“无值”
    • 这意味着由于其他原因您的模型不可行。接下来你可以做的是命名你的约束,然后你会得到一些放松/冲突
    • 感谢您的建议!你能给我一个例子,我可以如何命名我的约束吗?如果我命名了我的约束,那么我应该使用 CP Solver 吗?或者我可以用 OPL 解决吗
    • ct:xibm.com/support/knowledgecenter/SSSA5P_12.7.0/… 上的特定文档
    • David Nehme 和 Alex Fleischer 非常感谢您的帮助和建议!您的帮助解决了我的问题!
    【解决方案2】:

    条件 (y[t] == 1) => (x[u][t] == 1) 可以用以下线性约束表示。

    y[t] + x[u][t] <= 1

    只要 y 和 x 是二进制文件。如果 y[1] 为 1,则 x[u][t] 只能取 0 的值。如果 y[t] 为 0,则 x[u][t] 可以为 0 或 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多