У меня есть ограниченная переменная с целочисленным значением, назовите ее X
. (Где-то около 0<=X<=100
)
Я хочу иметь двоичную переменную, назовите ее Y
, чтобы Y=1
, если X >= A
и X <= B
, иначе Y=0
.
Лучшее, что я придумал до сих пор, это следующее (где T<x>
вводятся двоичные переменные, а M - большое число)
(minimize Y)
(X - A) <= M*Ta
(B - X) <= M*Tb
Y <= Ta
Y <= Tb
Y >= Ta + Tb - 1
(Другими словами, введение двух бинарных переменных, которые являются истинными, если переменная удовлетворяет нижней и верхней границам диапазона соответственно, и присвоение результата двоичному умножению этих переменных)
Это... Вроде работает, но имеет пару существенных недостатков. В частности, это не определено строго - Y
может быть 1
, даже если X
находится за пределами диапазона.
Итак: есть ли лучший способ сделать это? В частности: есть ли способ строго определить его, или, если нет, способ, по крайней мере, предотвратить ложные срабатывания?
Изменить: для уточнения: A
и B
являются переменными, а не параметрами.