我需要你的帮助来解决我正在使用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;
谢谢;)
答案 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)
此解决方案非常依赖于问题。我假设您正在最小化并且我将目标函数中的符号更改为“+”。如果不是这种情况,这将不起作用(不会是凸面的)。然后我们需要检查其他方法。
但这里的要点是强调作为变量的函数的东西也是变量。但是您可能可以选择重新表述您的问题以解决问题。