首页 > 解决方案 > GAMS 编译到 GDX 删除所有零值的列

问题描述

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

在我的 GAMS 用例中,我希望在 .gdx 文件中而不是在主 model.gms 脚本中定义一组静态变量。除非我定义仅包含零 (0) 值的列,否则这不是问题。当像这样定义一个表(“数据”)并选择“在 GAMS 工作室中使用 GDX 创建运行。我得到一个缺少列的 .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 vs 0。没有变化。为什么我不能将某些东西定义为零并将其保存在我的 .gdx 中?

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

标签: gams-math

解决方案


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


推荐阅读