GAMS compile to GDX drops column with all zero values

GAMS compile to GDX drops column with all zero values

注意:更新(但未解决)如下

在我的 GAMS 用例中,我希望在 .gdx 文件中而不是在主 model.gms 脚本中定义一组静态变量。这不是问题,除非我定义了一个仅包含零 (0) 值的列。像这样定义 table(“数据”)并选择“运行 with GDX Creation in GAMS studio。我得到一个缺少列的 .gdx 文件。

Set indexA  /ch1*ch5/;

Table data(indexA, *) 

        A_min    A_max   B_min    B_max    
ch1     1        10      0        7
ch2     2        10      0        6
ch3     3        10      0        5
ch4     4        10      0        4
ch5     5        10      0        3;

复制并粘贴 .gdx 内容:

IndexA *        Value
ch1    A_min    1
ch1    A_max    10
ch1    B_max    7
ch2    A_min    2
ch2    A_max    10
ch2    B_max    6
ch3    A_min    3
ch3    A_max    10
ch3    B_max    5
ch4    A_min    4
ch4    A_max    10
ch4    B_max    4
ch5    A_min    5
ch5    A_max    10
ch5    B_max    3

第 'B_min' 列无处可寻。当尝试将此 .gdx 加载回我的脚本时,它在我尝试访问 'B_min' 时出现错误,并显示“标签未知”。如果我将值更改为非零,这不是问题,但我需要它为零!我试过使用 0.0 与 0。没有变化。为什么我不能将某些东西定义为零并将其保存在我的 .gdx 中?

编辑/更新: 我为此创建了一个丑陋的解决方法。我在 gams 中将我所有的“B_min 值设置为 -1,用列创建了我的 .gdx 文件,但是错误的值。使用 GAMS [=29= 将 .gdx 文件加载到 python ], 遍历 'data' 中的每个条目以将 -1 值更改为 0 并保存它。这个新的 .gdx 文件现在可以在我的测试模型中使用。我仍然真的很想为其他人解决这个零问题我的团队不打算使用此解决方案 python API.

为了效率,GAMS 不存储默认值,因此参数中没有零。您可能可以做的是设置 $onEps。这会将您的零转换为 eps,它在数值上仍然为零,但会进入 GDX 文件。