在GAMS中将二维数组转换为一维

时间:2016-08-23 13:17:11

标签: arrays multidimensional-array gams-math

我在gams中有一个二维数组,我想将其转换为一维数组。

即。 我有

set i /i1*i100/ 
set j /j1*j100/
parameter array(i,j)

现在我喜欢这样的事情:

set n /n1*n10000/
parameter one_dim_array(n) 

上面数组的所有元素都应该成为one_dim_array的元素,通过遍历所有行和所有列并写出值。

我试过了:

parameter index /0/
loop(i,
loop(j,
one_dim_array(n%index%) = array(i,j);
index = index + 1;
)) 

然而,GAMS似乎并不理解这个n%index%表示法并返回一个错误,它不是一个集合。有什么方法可以绕过这个?

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用匹配运算符(http://www.gams.com/help/index.jsp?topic=%2Fgams.doc%2Fuserguides%2Fmccarl%2Fdefining_a_tuple_with_the_matc.htm)在n和i,j之间建立映射,这可以像以下一样用于分配:

set i /i1*i100/
    j /j1*j100/
    n /n1*n10000/
    nijMap(n,i,j) /#n:(#i.#j)/;

parameter array(i,j)
          one_dim_array(n);

array(i,j)       = uniform(0,1);
one_dim_array(n) = sum(nijMap(n,i,j), array(i,j));

我希望有所帮助! 最好, 鲁兹