Логика условных двоичных переменных в модели гамса

Это для модели в играх,

У меня есть двоичная переменная (B (N)) и реальная переменная (u (N)), где N - это набор. Я хочу, чтобы двоичная переменная равнялась нулю, когда u равно нулю, и равнялась единице, когда u не равно нулю.

Это было бы легко, если бы я мог использовать операторы if, но я не могу использовать их в уравнениях модели, поэтому это нужно делать с помощью математической логики ...


person John B    schedule 08.07.2015    source источник


Ответы (2)


Ничего страшного! Я нашел решение:

B(N) =L= rel_ne(u(N),0)
B(N) =G= rel_ne(u(N),0)

Эти швы должны работать нормально. Это, наверное, не самое элегантное решение, но все же.

rel_ne возвращает 1, если u (N) не равно 0, и возвращает 0 в противном случае.

person John B    schedule 08.07.2015

Я думаю, что еще одна возможность смоделировать эту ситуацию заключается в следующем:

B(N)*LB(N) =L= u(N) B(N)*UB(N) =G= u(N)

Где UB (N) - это верхняя граница, а LB (N) - нижняя граница для вещественной переменной u (N). Итак, когда u (N) равно 0, B (N) равно 0, а для положительного значения u (N) значение B (N) равно 1.

Если у вас нет явных верхних / нижних границ, просто установите 0 для LB и большое число для UB.

person Agustín Montagna    schedule 12.07.2021