我有一个整数值有界变量,调用它X
。(周围某处0<=X<=100
)
我想要一个二进制变量,调用它Y
,例如Y=1
ifX >= A
和X <= B
, else 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
是变量,而不是参数。