Я относительно новичок в целых программировании и (опять же) застрял в формулировке ограничения.Целочисленное программирование: назначение абсолютного значения (в зависимости от значения переменной)
В моей упрощенной модели у меня есть (непрерывная) переменная с нижней границей LB ниже нуля и верхняя граница UB выше нуля. Теперь я хочу присвоить значение переменной другим переменным в зависимости от значения, которое приняла переменная.
Логика я хочу выразить это следующим образом:
LB > 0
UB > 0
-LB <= Variable1 <= UB
if Variable1 => 0:
Variable2 = Variable1
Variable3 = 0
else:
Variable2 = 0
Variable3 = abs(Variable1)
Как я могу описать это, используя линейную (в) Равенства?
Я думаю, я немного медленно соображает ..
Спасибо заранее!
** Редактировать: Для моделирования я использую Python, Pyomo и новейший решатель Gurobi.
*** Редактировать: Я сформулировал это следующим образом с помощью двоичной переменной. (Я знаю, что это квадратичная, но это может быть линеаризовано позже):
LB > 0
UB > 0
-LB <= Variable1 <= UB
0 <= Variable2 <= UB
0 <= Variable3 <= LB
Variable4 = Variable2 * BinaryVariable - Variable3 * (1-BinaryVariable)
Но теперь я до сих пор, чтобы убедиться, что Variable3 является 0, если Variable2> 0 и наоборот.
Любые идеи?
"смешанное целочисленное программирование" .... "в ... реале" ... Так это целочисленное программирование, или с плавающей точкой (псевдо-реальный)? Также на каком языке/каркасе/платформе/программе вы говорите здесь? Выражение логики любого типа обычно требует использования определенного языка. И что не так с логикой, которую вы уже выразили? Что вы пробовали, и что не работает? – twalberg
О, извините, вы правы! Это целочисленное программирование, а переменные непрерывны (см. Мое редактирование). Я ищу способ описать это с помощью (in) равенств. Для моделирования я использую Python, Pyomo и новейший решающий робот! –