【问题标题】:Create a dvar boolean Constraint创建一个 dvar 布尔约束
【发布时间】:2019-10-13 14:55:19
【问题描述】:

我正在使用 OPL CPLEX 12.9

我对以下约束的表述有疑问:

  • K[i][t] 是一个 dvar 布尔值,t 是时间索引。
  • 如果 K[i][t] == 0,它应该在两个小时内为零,然后再次变为 1。

我想实现例如以下结果

K[i][t] = [0 0 1 0 0 1 1 1 0 0 0 ]

我已经试过了:

range T = t_min..t_max;

range T1 = t_min-1 ..t_max+1;

dvar boolean K[I][T1];

forall ( i in I, t in T){ 

ct:

(K[i][t-1]==0) => (K[i][t]== 0) => (K[i][t+1]==1 || K[i][t+1]==0) &&

(K[i][t-1]==1) => (K[i][t]==1 || K[i][t]==0);

但在结果中,这些附带条件被忽略了。我得到像

这样的结果
K[i][t] = [0 0 1 0 1 1 0 0 1 1 0 ]

【问题讨论】:

标签: binary constraints cplex opl


【解决方案1】:

我认为您的条件为“如果 K[i][t] 为 0,则 K[i][t-1] 或 K[i][t+1] 也必须为零”。所以你需要

forall (i in ...) {
  (K[i][t_min] == 0) => (K[i][t_min+1] == 0);
  (K[i][t_max] == 0) => (K[i][t_max-1] == 0);
  forall(t in t_min+1..t_max-1)
    (K[i][t] == 0) => ((K[i][t-1] == 0) || (K[i][t+1] == 0));
}

【讨论】:

  • 非常感谢你们的帮助!它解决了我的问题,我现在真的很开心!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多