如何在GAMS中将Table的一部分数据赋给另一个paramet
2019-07-24 本文已影响0人
柯西盗耳
1. 问题描述
假设有A是10行5列的parameter,B是一个100行5列的Table:
Set
i /i1*i10/
j /j1*j100/
c /c1*c5/;
Parameter
A(i,c);
Table B(j,c)
c1 c2 c3 c4 c5
j1 1 2 3 4 5
j2 6 7 8 9 10
j3 11 12 13 14 15
..;
问题是如何将B中连续的10行(比如前10行)数据赋给A。
2. 解决方法
方法1
可以用loop方法来完成:
loop((i,j) $ (ord(j)=ord(i)),
A(i,c)=B(j,c);
);
方法2
将A的维数扩展到B的维数
Parameter A(j,c);
A(j, c)$(ord(j) lt 11) = B(j, c);
但是这种方法会导致A中出现很多0元素,导致存储资源的浪费。
方法3
定义子集的方法:
Set i(j) /j1*j10/;
Parameter A(i, c);
A(i, c) = B(i, c);