在 GAMS 中编写循环并将结果打印在一个 excel 文件中
Writing loop within GAMS and printing the results on one excel file
我正在 GAMS 中解决一个模型,这是一个大型模型,称之为“利润”,但我希望在其中改变一个特定的参数,称之为 alpha(j),其中 alpha 代表定义在不同的参数一组“j”的值,然后查看关键变量的结果如何随其变化。
调用循环索引“i”,我希望通过每次将 alpha(j) 从全向量 alpha(j) 的初始值增加 0.05 来 运行 模型,然后看看变量 X 和 Y 是如何变化的:
Set i / 1*20/ ;
*上面我设置了index从1到20,然后第一次迭代的alpha初始值为0。
*然后我写循环
loop(i, alpha(j,i+1) =alpha(j)+0.05
solve mymodel using lp maximizing profit;
);
*然后我希望将结果写入 excel GDX 文件。
*基线
execute_unload "resultsloop.gdx"
X Y ;
execute 'gdxxrw.exe resultsloop.gdx var=XXX rng=XXX !a1'
execute 'gdxxrw.exe resultsloop.gdx var=X.L rng=X!a1'
execute 'gdxxrw.exe resultsloop.gdx var=Y.L rng=Y!a1'
;
这有两个问题-一个我有,另一个我可以预见。
第一个问题是我收到错误消息“维度不同 - 符号使用声明的 more/less 索引引用”。我不确定如何解决这个问题。
第二个问题(我可以预见)是excel结果的写作。理想情况下,我希望每个变量的结果按循环编号堆叠在一列中。按照目前的情况,我只会得到一个 excel 文件,只有与循环结束对应的结果。
非常感谢任何帮助!!
关于第一个问题:那个问题可能是由赋值引起的alpha(j,i+1) =alpha(j)+0.05
。正如错误消息所说,对于 alpha
,您在左侧引用了两个维度 (j,i+1
),在右侧引用了一个维度 (alpha(j)
)。其中一个一定是错误的。将其与您的声明进行比较(您没有在此处分享)。
关于第二个问题:我会在 GAMS 中将结果收集到一个参数中,并在最后一次将其全部写入 [=19=],就像在这个虚拟代码中一样:
parameter profitI(i)
someIndexedOverJVarI(i,j);
loop(i,
alpha(j) =alpha(j)+0.05;
solve mymodel using lp maximizing profit;
profitI(i) = profit.l;
someIndexedOverJVarI(i,j) = someIndexedOverJVar.l(j);
);
execute_unload "results.gdx" profitI;
execute 'gdxxrw.exe results.gdx par=profitI rng=XXX!a1';
我正在 GAMS 中解决一个模型,这是一个大型模型,称之为“利润”,但我希望在其中改变一个特定的参数,称之为 alpha(j),其中 alpha 代表定义在不同的参数一组“j”的值,然后查看关键变量的结果如何随其变化。
调用循环索引“i”,我希望通过每次将 alpha(j) 从全向量 alpha(j) 的初始值增加 0.05 来 运行 模型,然后看看变量 X 和 Y 是如何变化的:
Set i / 1*20/ ;
*上面我设置了index从1到20,然后第一次迭代的alpha初始值为0。
*然后我写循环
loop(i, alpha(j,i+1) =alpha(j)+0.05
solve mymodel using lp maximizing profit;
);
*然后我希望将结果写入 excel GDX 文件。
*基线
execute_unload "resultsloop.gdx"
X Y ;
execute 'gdxxrw.exe resultsloop.gdx var=XXX rng=XXX !a1'
execute 'gdxxrw.exe resultsloop.gdx var=X.L rng=X!a1'
execute 'gdxxrw.exe resultsloop.gdx var=Y.L rng=Y!a1'
;
这有两个问题-一个我有,另一个我可以预见。
第一个问题是我收到错误消息“维度不同 - 符号使用声明的 more/less 索引引用”。我不确定如何解决这个问题。
第二个问题(我可以预见)是excel结果的写作。理想情况下,我希望每个变量的结果按循环编号堆叠在一列中。按照目前的情况,我只会得到一个 excel 文件,只有与循环结束对应的结果。
非常感谢任何帮助!!
关于第一个问题:那个问题可能是由赋值引起的alpha(j,i+1) =alpha(j)+0.05
。正如错误消息所说,对于 alpha
,您在左侧引用了两个维度 (j,i+1
),在右侧引用了一个维度 (alpha(j)
)。其中一个一定是错误的。将其与您的声明进行比较(您没有在此处分享)。
关于第二个问题:我会在 GAMS 中将结果收集到一个参数中,并在最后一次将其全部写入 [=19=],就像在这个虚拟代码中一样:
parameter profitI(i)
someIndexedOverJVarI(i,j);
loop(i,
alpha(j) =alpha(j)+0.05;
solve mymodel using lp maximizing profit;
profitI(i) = profit.l;
someIndexedOverJVarI(i,j) = someIndexedOverJVar.l(j);
);
execute_unload "results.gdx" profitI;
execute 'gdxxrw.exe results.gdx par=profitI rng=XXX!a1';