Как назначить двоичную переменную в AMPL по отношению к другой переменной

У меня проблема с AMPL-моделированием. Можете ли вы помочь мне определить двоичную переменную u, которая предположила бы равным нулю, когда другая переменная x также равна 0 и 1, когда x отличается от 0?

Я пытался использовать логические выражения, но решатель, с которым я работаю (cplex и minos), не позволяет этого.

Моя идея:

subject to:
u || x != u && x
1 ответ

Возьмем M "большая" константа, такая как x < M, и предположим, что x является целым числом (или x >= 1, если x является непрерывным). Вы можете использовать два ограничения:

u <= x (if x=0, then u=0) x <= M*u (if x>0, then u=1)

с u двоичной переменной.

Если теперь x является непрерывным и не обязательно больше 1, вам придется адаптировать указанные выше ограничения (например, первое ограничение здесь не будет проверено с помощью x=0.3 и u=1).

Общая идея заключается в том, что вы можете (во многих случаях) заменить эти логические ограничения неравенствами, используя тот факт, что если a и b являются логическими переменными, то утверждение "a подразумевает b" может быть записано как b>=a (если a=1, то b=1).

licensed under cc by-sa 3.0 with attribution.