gams 指定具有大量零的通量网络(稀疏矩阵)
gams specify network of flux with lots of zeros (sparse matrix)
我尝试使用 gams 来查找 material 跨节点网络的流量。我定义了
set edge(i,n,nn);
positive variable flux(i,n,nn);
y.up(i,n,nn)$( not edge(i,n,nn)) = 0;
我的意图是定义从节点n到nn的矩阵i的flux
变量的3D矩阵,然后使用集合edge
来指定哪个完整图形可以有质量流。
这显然有效,但是当我尝试将 y 保存到 gdx 文件中时,我有很多零。我只需要 y 的子集,其中 edge(i,n,nn) 为真。
我如何在保存 gdx 文件时对 y 进行子集化。
谢谢!
您可以将内容存储在简化参数中:
Parameter yLevel(i,n,nn);
yLevel(i,n,nn)$edge(i,n,nn) = y.l(i,n,nn);
execute_unload 'result.gdx' yLevel;
请注意:您真的需要完整的 y(i,n,nn) 吗?这可能在很大程度上取决于索引集的大小。或者您可以修改您的模型以仅使用 y(i,n,nn)$edge(i,n,nn)?
我尝试使用 gams 来查找 material 跨节点网络的流量。我定义了
set edge(i,n,nn);
positive variable flux(i,n,nn);
y.up(i,n,nn)$( not edge(i,n,nn)) = 0;
我的意图是定义从节点n到nn的矩阵i的flux
变量的3D矩阵,然后使用集合edge
来指定哪个完整图形可以有质量流。
这显然有效,但是当我尝试将 y 保存到 gdx 文件中时,我有很多零。我只需要 y 的子集,其中 edge(i,n,nn) 为真。
我如何在保存 gdx 文件时对 y 进行子集化。
谢谢!
您可以将内容存储在简化参数中:
Parameter yLevel(i,n,nn);
yLevel(i,n,nn)$edge(i,n,nn) = y.l(i,n,nn);
execute_unload 'result.gdx' yLevel;
请注意:您真的需要完整的 y(i,n,nn) 吗?这可能在很大程度上取决于索引集的大小。或者您可以修改您的模型以仅使用 y(i,n,nn)$edge(i,n,nn)?