如果变量在整数线性程序的范围内,有没有办法将决策变量设置为true?

时间:2014-06-18 18:34:48

标签: linear-programming integer-programming

我有一个整数有界变量,称之为X。 (约0<=X<=100

我想要一个二进制变量,称之为YY=1 X >= AX <= 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

所以:有更好的方法吗?特别是:有没有办法严格定义它,或者如果没有,至少可以防止误报?


修改:澄清:AB是变量,而不是参数。

2 个答案:

答案 0 :(得分:1)

我认为以下有用。

(I)A * Y <= X <= B * Y + 100 * (1 - Y)

(II)(X - A) <= M * Ta

(III)(B - X) <= M * Tb

(IV)Y >= Ta + Tb - 1

所以X < A使:

(I)Y=0

和(II),(III),(IV)无所谓。

X > B制作:

(I)Y = 0

和(II),(III),(IV)无所谓。

A <= X <= B制作:

(I)Y = 1Y = 0

(II)Ta = 1

(III)Tb = 1

(IV)Y = 1

答案 1 :(得分:1)

通过扩展二元变量与连续变量的乘法,以线性形式重写loannis的答案:

  1. Tc <= M*Y
  2. Tc <= A
  3. Tc >= A - M*(1-Y)
  4. Tc >= 0
  5. Tc <= X
  6. Td <= M*Y
  7. Td <= B
  8. Td >= B - M*(1-Y)
  9. Td >= 0
  10. X <= Td + 100*(1-Y)
  11. (X - A + 1) <= M * Ta
  12. (B - X + 1) <= M * Tb
  13. Y >= Ta + Tb - 1
  14. 这似乎有效,尽管我还没有机会扩展它以证明它。此外,其中一些限制可能是不必要的;我没有检查过。


    我所做的扩展是根据以下规则:

    如果b是二进制变量,c是连续变量,0 <= c <= M,则y=b*c等效于以下内容:

    1. y <= M*b
    2. y <= c
    3. y >= c - M*(1 - b)
    4. y >= 0