GAMS中具有变量的条件方程

时间:2018-05-28 15:22:45

标签: conditional gams-math

我需要你的帮助来解决我正在使用GAMS进行编程的“Little”问题。

在我的目标函数中,我有这个成员是z = [...] - TWC(j)* HS(j)。  其中HS(j)是变量。

现在,TWC(j)应该是一个像这样工作的参数:

当HS(j)<1时,

TWC(j)= 0。 1000

当HS(j)> = 1000时,

TWC(j)= 3.21。

知道如何在GAMS中实现这一点吗?我的尝试都失败了。

编辑:这就是我试过的我定义了一个名为TWCup(j)的等式:

TWCup(j)$(HS.l(j)&gt; = 1000).. TWC(j)= e = 3.21;

谢谢;)

1 个答案:

答案 0 :(得分:0)

可能不再与 OP 相关(因为这个问题已经超过 3 年了),但可能对其他关注这个问题的人有用。

如果 TWC(j) 是变量 HS(j) 的函数,则它不是参数。它是另一个变量。因此,您应该将 TWC(j) 定义为变量而不是参数。这可能是您收到错误的原因。

有一些方法可以解决您的问题:一种是实际将 TWC(j) 转换为变量。但这会将您的问题变成非线性,这可能是(或不是)问题。此外,这可能需要使用二进制变量,这也可能成为一个问题(无论是否再次出现)。

但我认为这个问题可以通过不同的 LP 规范来解决。成本函数 f(HS(j)) = TWC(j)*HS(j) 在部分和凸面方面是线性的,您可以使用辅助变量在标准 LP 中表示(假设您正在最小化)。

* declare auxiliary variable
Variable 
    w(j);

* declare equations for linear by part cost function
Equation
    costfun1(j)
    costfun2(j);
;

* define costfun1 and costfun2
costfun1(j).. w(j) =g= 0;
costfun2(j).. w(j) =g= -3210 + 3.21*HS(j);  


*redefine objective function (note that I changed to plus because I assumed this is a cost function that you are minimizing)
z = [...]+w(j)

此解决方案非常依赖于问题。我假设您正在最小化并且我将目标函数中的符号更改为“+”。如果不是这种情况,这将不起作用(不会是凸面的)。然后我们需要检查其他方法。

但这里的要点是强调作为变量的函数的东西也是变量。但是您可能可以选择重新表述您的问题以解决问题。