2016-08-23 105 views
0

我有一個gams中的二維數組,我想將其轉換爲一維數組。將二維數組轉換爲GAMS中的一維

I.e. 我

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%索引%符號並返回一個錯誤,這不是一組。有什麼辦法可以繞過這個?

非常感謝!

+0

順便說一句,我試過每一個「n%index」的組合,有和沒有引號,兩者似乎都不起作用 – nonick

回答

0

你可以建立n和I,J之間的映射使用匹配運算符(http://www.gams.com/help/index.jsp?topic=%2Fgams.doc%2Fuserguides%2Fmccarl%2Fdefining_a_tuple_with_the_matc.htm),可用於分配喜歡這裏:

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)); 

我希望幫助! 最好的, Lutz

+0

完美,幫助!非常感謝! :-) – nonick