我是GAMS的初学者。因此,我的问题与条件中变量的使用有关。我以为这是“编程流控制功能”,但我找不到包含变量而不是参数的示例。
在我的任务中,代码开头只有一组(t)。在“方程式”块中,GAMS对(t)的多个值(例如,对于t = 1..5)执行变量D(t)。 我只想提取D(t)的正值。 例如,我执行了D(t):3,-2、5,-4、1 我想要D2(t):3、0、5、0、1
我知道,不允许将美元条件与变量一起使用。同样,出于相同的原因,我不能使用loop + if构造。例如,我尝试编写类似这样的内容,但是出现了很多错误(D2(t)被声明为应有的样子):
Equation1(t).. loop (t,
if ((D(t) < 0),
D2(t) = D(t) - D(t);
);
);
那么,如何添加条件以及应该在哪里放置代码?
答案 0 :(得分:0)
(不是专家,但我必须回答,因为我没有足够的声誉来评论)
我假设您有两个不同的数学程序,并且您要运行第二个程序并使用第一个程序的某些结果。如果是这种情况,您上面显示的代码位于两次运行之间,则不需要“等式”部分。
此外,在获得解决方案之后,您可以使用.l(解决方案中变量的级别)访问其值。然后,您可能还声明变量D2的值等于变量D的值。如果仅在第二次运行之前将值(级别)赋予变量D2,则模型将被允许在更改之前搜索过程(如果您可能的话)。您可以通过固定变量D2的值来代替它,而不是使用D2.fx(t)来使用D2.l(t)。
loop (t,
if ((D.l(t) < 0),
D2.l(t) = D.l(t) - D.l(t);
else
D2.l(t) = D.l(t);
);
);
or
loop (t,
if ((D.l(t) < 0),
D2.fx(t) = D.l(t) - D.l(t);
else
D2.fx(t) = D.l(t);
);
);
我希望这个答案对您有所帮助:)