0

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

我想创建一个集合,其中包含在我的初始阶段获得的变量的单一值。为了初始化我的第二阶段,我创建了一个 getValue(X) 来恢复在 i,j,k 中索引的布尔变量的最佳值。后来,在索引“j”和“k”的双循环中,我尝试沿 i 维声明“X”的单一值的集合“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};

但我总是得到错误:“非法使用保留关键字”。我知道我的集合声明不好,但不知道如何声明它以使我的集合 S 包含 X[i][j][k] == 1 的 I 的值。

你能提供一些帮助吗?此致

4

1 回答 1

0

范围 I=1..2;范围 J=1..2;范围 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 | 我在我:v[i] == 1};

执行 { writeln(S); }

有帮助

问候

于 2015-10-16T16:59:32.193 回答