如何使用变量GAMS添加条件

时间:2020-10-02 08:29:12

标签: variables conditional-statements gams-math

我是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); 
     ); 
);

那么,如何添加条件以及应该在哪里放置代码?

1 个答案:

答案 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);
     ); 
);  

我希望这个答案对您有所帮助:)

相关问题