GAMS - функция шага единицы

Мне нужно использовать пошаговую функцию, чтобы подсчитать количество ненулевых элементов в параметре. Рассматриваемая мной ступенчатая функция следующая:

f (x) = {0 if x = 0 else 1} График ступенчатой ​​функции (где f (0) = 0)

После поиска решения в Интернете я понял, что мы можем создавать пошаговые функции в GAMS, но мне нужна непрерывная функция для x> 1. Я попробовал следующий код, чтобы воспроизвести пошаговую функцию:

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

который:

пошаговая функция  введите описание изображения здесь

К сожалению, эта формула не работает с GAMS. Когда я пытаюсь запустить код, я получаю такую ​​ошибку:

Endogenous function argument(s) not allowed in linear models

Я работаю с моделью MIP (M смешанная I nteger Linear P program). Есть ли способ использовать пошаговую функцию в GAMS?


person Cynnexis    schedule 11.10.2018    source источник


Ответы (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, y также будет 0 из-за уравнения b. И если x> 0, y станет 1 из-за уравнения a. BigM вы должны выбрать как можно меньше и как можно больше (так должно быть максимальное значение x), а SmallM наоборот. Это, конечно, предполагает, что есть что-то вроде нижней и верхней границы для x, если это не 0 ...

Надеюсь, это поможет!

Лутц

person Lutz    schedule 12.10.2018