集合声明中的 CPLEX OPL 错误

CPLEX OPL error in set declaration

我正在 CPLEX OPL 中实现两阶段方法。

我想创建一个集合,其中包含在初始阶段获得的变量的单一值。为了初始化我的第二阶段,我创建了一个 getValue(X) 来恢复在 i、j、k 中索引的布尔变量的最佳值。后来,在索引 "j" 和 "k" 的双循环中,我尝试声明 "X" 沿 i 维的单一值的集合 "S"。

但是,我没有做出正确的集合声明...我已经尝试使用:

var S = {i | i in I : X[i][j][k] == 1};
int S = {i | i in I : X[i][j][k] == 1};
{int} S = {i | i in I : X[i][j][k] == 1};

但我总是得到错误:"Illegal use of a reserved keyword"。我知道我的集合声明不好但不知道如何声明它以使我的集合 S 包含 X[i][j][k] == 1.[=11 的 I 值=]

能否请您提供一些帮助? 最好的问候

range I=1..2; range J=1..2; range K=1..2; int X[i in I][j in J][k in K]=(i==1)&&(j==1)&&(k==1)?1:0;

int v[i in I]=1<=sum(j in J,k in K )(X[i][j][k] == 1); {int} S = {i | i in I : v[i] == 1};

execute { writeln(S); }

有帮助

问候