Я предполагаю, что a
, b
и c
являются здесь всеми переменными решения. Чтобы построить ваше ограничение, вам нужно добавить новую двоичную переменную - назовем ее x
- которая будет равна 1, если a > b
, и 0 в противном случае. Вам также нужна большая константа M
. Затем добавьте следующие ограничения:
Mx >= a - b
M(1-x) >= b - a
x in {0,1}
Логика такова: если a > b
, то x
должно равняться 1 по первому ограничению (а x
может равняться 1 по второму ограничению). Если b > a
, то 1-x
должно равняться 1 по второму ограничению, то есть x
должно равняться 0 (а x
может равняться 0 по первому ограничению).
Далее нам нужно ограничение, которое говорит, что если x = 1
, то c = beta
, иначе c = 0
:
c = beta * x
Примечание : Приведенная выше логика позволяет c
равняться либо 0, либо бете, если a = b
; решатель решит. Вам нужно c
равным 0, если a = b
?
Еще одно примечание : В формулировках типа "big- M
", подобных этой, всегда лучше сохранять M
как можно меньшим, сохраняя при этом действительность ограничений. В этом случае это означает установку M
на максимально возможную (или вероятную) разницу между a
и b
. Если ваша модель небольшая, это не будет иметь большого значения, но если у вас много этих переменных решения, то это может иметь большое значение.