0

plan是数据中的矩阵。

for i = 1:5
  for j = 1:3
    for k = 1:plan(j,i)
      C(i,j,k) = SUB(j,i);
    end
  end
end

如何在GAMS. 请帮忙。

4

2 回答 2

1

不熟悉 GAMS 的用户经常过度使用循环。在 GAMS 中显式循环是个例外:通常我们希望使用隐式循环。喜欢:

c(i,j,k)$(ord(k)<=plan(j,i)) = sub(j,i);
于 2017-07-21T12:22:05.197 回答
-1

首先,您必须将最终输出 C 视为具有给定维度的矩阵。也就是说,必须事先确定第三维 k 的大小。可能是所有 plan(j,i) 值的最大值。所以我将把索引 k 的最大值称为大写 K。在这种情况下,你可以这样做:

SET i /1*5/;
SET j /1*3/;
SET k /1*K/;

Loop (i,
  Loop (j,
    Loop (k,
      If (ord(k) <= plan(j,i), C(i,j,k) = SUB(j,i););
    );
  );
);
于 2017-07-19T07:26:26.640 回答