我想将值分配给GAMS中的3-D表。但似乎它在Matlab中不起作用.....运气好吗?代码如下,问题出在最后几行:
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 :(得分:0)
对于3-D矩阵的最终分配应该使用PARAMETER而不是TABLE来完成。一般来说,我还会注意到TABLE是非常严格的(二维,代码中的文本输入)。您可能需要考虑使用$ GDXIN(或EXECUTE_LOAD)和一些用于加载xls或csv文件的GAMS实用程序。
作为MATLAB和GAMS的用户,我会注意到GAMS依赖于" indices"对于每个阵列,但否则它们可能非常相似。在您的情况下,max_cap(n,m,k)类似于每个容量级别场景下from_city和to_city之间的最大容量。您的矩阵需要声明为PARAMETER,它可以是任何n维(索引)矩阵,甚至包括SCALAR。
此外,如果您真的需要快速回答,请尝试GAMS邮件列表,全球精通GAMS用户的数量不能超过几千,因此可能很难在StackOverflow上找到快速答案 - 很棒,因为它是更常见的语言。