GAMS- 在循环中操纵表达式
GAMS- manipulating expression within a loop
我有一个维度为 i 行和 j 列的矩阵,其中一个特定元素称为 x(i,j),其中 i 是植物,j 是市场。在标准 GAMS 符号中:
Sets
i canning plants / seattle, san-diego /
j markets / new-york, chicago, topeka / ;
现在,我还想创建一个循环,随着时间的推移 - 持续 5 个周期。本质上,假设我定义
设置t时间段
/period1
period2
period3
period4
period5
/ ;
参数
time(t)
/ period1 1,
period2 2,
period3 3,
period4 4,
period5 5
/ ;
基本上,我想重新运行这个循环,它包含一堆其他命令,但我希望从第 2 期开始重新定义这个矩阵,看起来像这样:
x("seattle",j)=x("seattle",j)+s("new-york",j)
x("new-york",j)=0'
本质上,在循环中,我希望矩阵 x(i,j) 在第 2 期后看起来有所不同,其中列 x("seattle",j) 替换为以前的 x("seattle", j)+s("new-york",j) 并且列 x("new-york",j) 设置为 0。
循环将像这样开始:
loop
(t,
...
Option reslim = 20000 ;
option nlp = conopt3 ;
solve example using NLP maximizing VARIABLE ;
) ;
我不确定如何在循环中为每个大于 2 的周期重新定义这个矩阵。
请注意:在周期 2 之后,矩阵看起来相同。变化只发生一次(即,矩阵元素不会从前一个周期开始循环,而是只切换 once ,在周期 2 结束时,然后保持不变。
非常感谢任何帮助!
您可以使用 $ 条件仅在 period2
的循环中进行此更改,如下所示:
x("seattle",j)$sameAs(t,'period2')=x("seattle",j)+s("new-york",j);
我有一个维度为 i 行和 j 列的矩阵,其中一个特定元素称为 x(i,j),其中 i 是植物,j 是市场。在标准 GAMS 符号中:
Sets
i canning plants / seattle, san-diego /
j markets / new-york, chicago, topeka / ;
现在,我还想创建一个循环,随着时间的推移 - 持续 5 个周期。本质上,假设我定义
设置t时间段
/period1
period2
period3
period4
period5
/ ;
参数
time(t)
/ period1 1,
period2 2,
period3 3,
period4 4,
period5 5
/ ;
基本上,我想重新运行这个循环,它包含一堆其他命令,但我希望从第 2 期开始重新定义这个矩阵,看起来像这样:
x("seattle",j)=x("seattle",j)+s("new-york",j)
x("new-york",j)=0'
本质上,在循环中,我希望矩阵 x(i,j) 在第 2 期后看起来有所不同,其中列 x("seattle",j) 替换为以前的 x("seattle", j)+s("new-york",j) 并且列 x("new-york",j) 设置为 0。
循环将像这样开始:
loop
(t,
...
Option reslim = 20000 ;
option nlp = conopt3 ;
solve example using NLP maximizing VARIABLE ;
) ;
我不确定如何在循环中为每个大于 2 的周期重新定义这个矩阵。
请注意:在周期 2 之后,矩阵看起来相同。变化只发生一次(即,矩阵元素不会从前一个周期开始循环,而是只切换 once ,在周期 2 结束时,然后保持不变。
非常感谢任何帮助!
您可以使用 $ 条件仅在 period2
的循环中进行此更改,如下所示:
x("seattle",j)$sameAs(t,'period2')=x("seattle",j)+s("new-york",j);