2015-10-13 34 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