GAMS-单位步进功能

时间:2018-10-11 20:30:33

标签: gams-math

我需要使用 step函数来计算参数中非零元素的数量。我正在考虑的步进函数如下:

f(x)={0 if x = 0 else 1} Plot of step function (where f(0)=0)

在互联网上搜索解决方案后,我意识到我们可以在GAMS中创建逐步函数,但是对于x> 1,我需要一个连续函数。 我尝试了以下代码来重现类似步骤的功能:

round(1 / (1 + exp(-x)) - 0.01)

这是:

step-like function enter image description here

不幸的是,此公式不适用于GAMS。当我尝试运行代码时,出现此错误:

Endogenous function argument(s) not allowed in linear models

我正在使用 MIP M 固定的 I 整数线性 P 图表)模型。是否可以在GAMS中使用步进功能?

1 个答案:

答案 0 :(得分:1)

我假设x是您代码中的变量?然后,您可以尝试这样的操作(如果x是一个参数,那会更容易):

Equation        a, b;
Variable        x;
Binary Variable y;

Scalar BigM   / 1e3/
       SmallM /1e-3/;

a.. y*BigM   =g= x;
b.. y*SmallM =l= x;

因此,如果x = 0,则由于方程b,y也将为0。如果x> 0,则由于方程a,y将变为1。您应该选择尽可能小和尽可能大的BigM(因此它应该是x可以取的最大值),反之则选择SmallM。当然,这是假设x的上下界,如果不为0 ...

希望有帮助!

Lutz