如何在GAMS中将Table的一部分数据赋给另一个parameter

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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。