【问题标题】:convert two dimensional array into one dimensional in GAMS在 GAMS 中将二维数组转换为一维数组
【发布时间】:2016-12-30 08:27:14
【问题描述】:

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

即 我有

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% 表示法,并返回一个它不是集合的错误。有什么办法可以规避这个?

非常感谢!

【问题讨论】:

  • 顺便说一句,我尝试了“n%index”的所有组合,带引号和不带引号,但似乎都不起作用

标签: arrays multidimensional-array gams-math


【解决方案1】:

您可以使用匹配运算符 (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));

希望对您有所帮助! 最好的, 卢茨

【讨论】:

  • 完美,有帮助!非常感谢! :-)
猜你喜欢
  • 2016-02-18
  • 2018-02-19
  • 2020-03-26
  • 2012-09-16
  • 2012-03-08
  • 2021-11-23
相关资源
最近更新 更多