如何在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);
上一篇下一篇

猜你喜欢

热点阅读