GAMS - 单位阶跃函数

GAMS - Unit step function

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

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

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

即:

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

Endogenous function argument(s) not allowed in linear models

我正在使用 MIP (M固定 Integer 线性 P程序)模型。有没有办法在 GAMS 中使用阶跃函数?

我假设 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,则 y 也将为 0,因为等式 b。如果 x>0,y 将因方程 a 而变为 1。你应该选择尽可能小的 BigM 和尽可能大的(所以它应该是 x 可以取的最大值),而 SmallM 则相反。当然,这假定 x 存在类似下限和上限的东西,如果它不是 0...

希望对您有所帮助!

卢茨