GAMS:将循环中生成的输出保存到单个.gdx文件,而不覆盖以前的条目

时间:2017-11-20 09:38:38

标签: loops random indexing gams-math

我希望在GAMS中有3次运行的场景,我还想保存集合中随机选择的3个元素中的每一个"代码"到.gdx文件中,每个条目都不会被循环中下一个随机生成的输出覆盖。如何防止这种覆盖,以便我能够在一个output.gdx文件中保存循环中的每个随机生成的输出?以下是我目前的代码:

SET
      codes /aaa, aab, aac, aad, aae, aaf, aag, aah, aaj, aak, aal/
      selected(codes);

$gdxout outputs
loop((1,3),
randnumber = uniformint(1,11);
selected(codes)=ord(codes)=randnumber;
execute_unload 'output.gdx',selected;
display selected;
);
$gdxout

上面我的代码的结果给了我一个只有1个条目的.gdx文件 - 该组的最后一个(第3个)随机选择元素"代码"。对此的一些帮助将深表感谢。

1 个答案:

答案 0 :(得分:1)

你可以使用一个额外的“场景索引”来在执行循环时将结果存储在参数中,并在结尾处一次导出所有内容,如下所示:

SET
      codes /aaa, aab, aac, aad, aae, aaf, aag, aah, aaj, aak, aal/
      scenario /1*3/;

scalar
      randnumber;

parameter
      selected(scenario,codes);

loop(scenario,
  randnumber = uniformint(1,11);
  selected(scenario,codes)=ord(codes)=randnumber;
);

execute_unload 'output.gdx',selected;
display selected;

我帮忙! 鲁兹