【问题标题】:loop in GAMS for scenario generation in excel在 GAMS 中循环用于在 excel 中生成场景
【发布时间】:2017-03-17 13:48:06
【问题描述】:

我有一个优化模型,我尝试为不同的输入文件求解该模型,我将其准确称为“在不同场景下求解模型”。出于这个原因,我需要一个循环来从 excel 中读取每个不同工作表的数据。让我说清楚:例如,在下图中,我们有一个包含 4 个场景的数据,并且每个场景的工作表名称都会一个接一个地增加

对于每个场景,该数据必须以表格的形式读取,就像在 excel 文件中一样。

我尝试使用循环从不同的 Excel 表中读取数据。我可以在游戏中这样做吗?

在 GAMS 中,我可以从 excel 中获取数据,如下所示,但这仅适用于一种情况。我想制作一个 GAMS 代码,在循环语句中从 excel 表中读取所有场景的数据

Table   n(t,b)
$call =xls2gms r="nonbooked!A2:I9" i="excelveri.xlsx" o="nbooked.inc"
$include nbooked.inc
;

【问题讨论】:

标签: excel loops gams-math vba


【解决方案1】:

GAMS put_utility (https://www.gams.com/latest/docs/UG_Put.html#UG_Put_PutUtil) 和工具 GDXXRW (https://www.gams.com/latest/docs/T_GDXXRW.html) 是解决这个问题的关键。这是一个自包含(并且希望可以自我解释)的示例:

set i      / i1*i3 /
    j      / j1*j4 /
    sheets / Sheet1*Sheet3 /;

parameter data(i,j);
file fx; put fx;

* To make this example self contained, first prepare some data (using same mechanics as the reading)
loop(sheets,
* Create random data
  data(i,j) = uniformInt(0,9);
* Write data to GDX
  execute_unload 'data.gdx', data;
* Write GDX data to excel
  put_utility 'exec' / 'gdxxrw.exe data.gdx par=data rng=' sheets.tl:0 '!a1';
);

* Clear data to start fresh
data(i,j) = 0;

* Load data
loop(sheets,
* Write Excel data to GDX
  put_utility 'exec' / 'gdxxrw.exe data.xlsx par=data rng=' sheets.tl:0 '!a1';
* Load data from GDX
  execute_load 'data.gdx', data;
* Work with the data, just display as an example
  display data;
);

希望对你有帮助 卢茨

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多