преобразовать двумерный массив в одномерный в 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% и возвращает ошибку, что это не набор. Любой способ обойти это?

Большое спасибо!


person nonick    schedule 23.08.2016    source источник
comment
Кстати, я пробовал все комбинации n%index, с кавычками и без них, и оба не работают.   -  person nonick    schedule 23.08.2016


Ответы (1)


Вы можете построить сопоставление между 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));

Надеюсь, это поможет! Лучший, Лутц

person Lutz    schedule 24.08.2016
comment
Отлично, это помогло! Большое спасибо! :-) - person nonick; 25.08.2016