我需要使用 step函数来计算参数中非零元素的数量。我正在考虑的步进函数如下:
在互联网上搜索解决方案后,我意识到我们可以在GAMS中创建逐步函数,但是对于x> 1,我需要一个连续函数。 我尝试了以下代码来重现类似步骤的功能:
round(1 / (1 + exp(-x)) - 0.01)
这是:
不幸的是,此公式不适用于GAMS。当我尝试运行代码时,出现此错误:
Endogenous function argument(s) not allowed in linear models
我正在使用 MIP ( M 固定的 I 整数线性 P 图表)模型。是否可以在GAMS中使用步进功能?
答案 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