2011-09-21 119 views
2

我想爲GAMS中的3D表格分配值。但它似乎不能像Matlab一樣工作.....運氣好嗎?代碼是其次,問題是在最後幾行:GAMS,矩陣直接分配

Sets 
     n   nodes      /Sto , Lon , Par , Ber , War , Mad , Rom/
     i   scenarios     /1 * 4/
     k   capacity level   /L, N, H/; 

alias(n,m); 

Table balance(n,i) traffic balance for different nodes 
     1  2  3  4 
Sto  50  50  -50  -50 
Lon  -40  40  -40  40 
Par  0  0  0  0 
Ber  0  0  0  0 
War  40  -40  40  -40 
Mad  0  0  0  0 
Rom  -50  -50  50  50 ; 

Scalar r fluctuation rate of the capacity level 
/0.15/; 

Parameter p(k) probability of each level 
/L 0.25 
    N 0.5 
    H 0.25/; 

Table nor_cap(n,m) Normal capacity level from n to m 
      Sto Lon  Par  Ber  War  Mad  Rom 
Sto  0  11  14  25  30  0  0 
Lon  11  0  21  0  0  14  0 
Par  14  21  0  22  0  31  19 
Ber  25  0  22  0  26  0  18 
War  30  0  0  26  0  18  22 
Mad  0  14  31  0  18  0  15 
Rom  0  0  19  18  22  15  0 ; 

Table max_cap(n,m,k) capacity level under each k 
max_cap(n,m,'N')=nor_cap(n,m) 
max_cap(n,m,'L')=nor_cap(n,m)*(1-r) 
max_cap(n,m,'H')=nor_cap(n,m)*(1+r); 

回答

0

最後分配到3 d矩陣應與參數來做到,而不是表。一般來說,我還會注意到TABLE是非常嚴格的(2維,代碼內部的文本輸入)。您可能需要考慮$ GDXIN(或EXECUTE_LOAD)和一些GAMS實用程序來加載xls或csv文件。

作爲MATLAB和GAMS的用戶,我會注意到GAMS依賴於每個數組的「索引」,但否則它們可能非常相似。在你的情況下,max_cap(n,m,k)就像每個容量級別場景下from_city和to_city之間的最大容量。你的矩陣需要被聲明爲一個PARAMETER,它可以是任何n維(索引)矩陣,甚至包括一個SCALAR。

另外,如果您真的需要快速回答,請嘗試GAMS郵件列表,全球精通GAMS用戶的數量不能超過幾千,因此可能很難在StackOverflow上找到快速答案 - 真棒就像更常用的語言一樣。