我正在尝试了解在 GAMS 中创建递归动态模型的正确方法。为此,我制作了一个由 2 个线性方程组成的玩具示例(又称蛛网模型)。现在它从随机点开始P(t=1)=40
并移动到平衡点(系统解)。
t
在循环内运行带有索引的简单代码似乎有些棘手。GAMS 总是抱怨 (!):
错误 50:循环控制指数出现在模型方程中
我一直在查看其他代码片段(例如),但找不到完整的示例来重现。玩弄代码时,我刚刚将另一个z
和 循环放入 中z
。我工作正常。
到目前为止一切顺利,但请注意 howt
仍然在循环内。我有点困惑。(至少我不知道这种编码的副作用。)
Set t /t1*t10/
* HERE IS THE TRICK
z /z1*z10/;
Parameters a /100/, b /2/, c /20/, d /1/;
Variables P(t), Qd(t), Qs(t), obj;
Positive Variables P, Qd, Qs;
Equations Demand(t), Supply(t), Equilibrium(t), Objective;
Demand(t).. Qd(t) =E= a - b * P(t);
Supply(t).. Qs(t) =E= c + d * P(t-1);
Equilibrium(t).. Qd(t) =E= Qs(t);
Objective.. obj =E= 1;
P.l('t1') = 40;
Model cobwebModel /all/;
Loop(z,
Solve cobwebModel using LP maximizing obj;
P.l(t+1) = (a - c + d * P.l(t)) / (b + d);
);
问题是:如何重构上述代码以使其符合适当的 GAMS 风格并准备扩展?