GAMS - единичная шаговая функция - PullRequest
0 голосов
/ 11 октября 2018

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

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 ixed I nteger Линейная P рограмм) модель.Есть ли способ использовать пошаговую функцию в GAMS?

1 Ответ

0 голосов
/ 12 октября 2018

Я предполагаю, что 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 наоборот.Это предполагает, конечно, что есть что-то вроде нижней и верхней границы для х, если это не 0 ...

Надежда, которая помогает!

Лутц

...