【问题标题】:Generate data using for loop in GAMS在 GAMS 中使用 for 循环生成数据
【发布时间】:2017-07-18 13:04:00
【问题描述】:

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 中建模相同。请帮忙。

【问题讨论】:

    标签: gams-math


    【解决方案1】:

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

    c(i,j,k)$(ord(k)<=plan(j,i)) = sub(j,i);
    

    【讨论】:

      【解决方案2】:

      首先,您必须将最终输出 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););
          );
        );
      );
      

      【讨论】:

      • 感谢您的回复。如何使用相同的 C(i,j,k) 作为索引来制定我的约束?
      • 不确定你的意思。你能补充更多细节吗?
      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 2021-11-16
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      相关资源
      最近更新 更多