首页 > 解决方案 > CPLEX 中带索引的模运算

问题描述

我正在使用 CPLEX,我想对“d”索引使用模运算,我想将 d+8 设置为 28 的余数。例如,如果 d 是 21,那么 (d+8) 的值应该是 29 % 28=1 。“x”是二元决策变量。

我想要这样的东西:

forall(e in employee, d in day) x[e][(d+8)%28]==x[e][d];

但这给了我一个错误。我怎样才能以适当的方式做到这一点?如果你能帮助我,我很高兴。

标签: cplexmodulo

解决方案


{string} employee={"me"};
range day=1..28;

dvar boolean x[employee][day];
minimize sum(e in employee,d in day) x[e][d];
subject to
{
  x["me"][1]==1;
 forall(e in employee, d in day) x[e][(d-1+8)%28+1]==x[e][d];
}

{int} x1PerEmployee[e in employee]={d | d in day : x[e][d]==1};

execute
{
  writeln(x1PerEmployee);
}

[{1 5 9 13 17 21 25}]

推荐阅读