2015-10-13 33 views
0

我在CPLEX OPL中实现了两阶段方法。设置声明中的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的值。

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

回答

0

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); }

可以帮助

问候

+0

感谢您的帮助@AlexFleischer!我是CPLEX OPL的新手,你能帮我理解代码吗?首先初始化范围I,J和K(为什么只有两个元素?我多一点,比如nI,nJ和nK)。稍后,将X定义为一个二进制数,每当i = j = k = 1时取一个整数值,否则为零。对?但是X值是作为第一阶段模型的最优值给予我的。我怎么能将你的主张扩展到每维度的nI,nJ和nK元素? – Jacko