L_α, L_β, L_γ # are constant lower bounds on α, β, γ (or values smaller than the lowest value they can take)
U_α # is a constant lower bounds on α
z # is a LP variable that can take values {0,1}
如果z == 1
等式(1)和(4)是冗余的,并强制执行 then condition 或(3)
如果z == 0
等式(2)和(3)是冗余的,并且强制执行 else condition 或(4)
对于这个问题
我们运行两次,第一次用α=α1,第二次用α=α2 .
哪里,
α1 = y2 - x1
z1 = decision variable for α1 with values {0,1}
α2 = y1 - x2
z2 = decision variable for α2 with values {0,1}
β # Currently unnecessary for my particular question.
γ # Currently unnecessary for my particular question.
2 回答
首先,这不是线性规划,而是混合整数规划,因为
AND
约束不是线性的,也不是暗示 . 我还假设a
和b
都是二进制变量 . 然后,您可以按如下方式重新制定问题:这里,
m
需要是一些(负)下限,即m < x1-y2
和m < y1-x2
.z1
和z2
都是二进制变量 . 要绕过<
不等式,您可能需要在前两个约束中添加一些小epsilon:我找到了一个适用于
IF-THEN-ELSE
的配方,无论给出什么问题 . 在答案的后半部分,我正在使用@ mattmilten的答案中描述的z1, z2
变量来处理if statement
中的AND condition
假设问题是以下规范:
然后,
哪里,
如果z == 1
等式(1)和(4)是冗余的,并强制执行
then condition
或(3)如果z == 0
等式(2)和(3)是冗余的,并且强制执行
else condition
或(4)对于这个问题
我们运行两次,第一次用α=α1,第二次用α=α2 .
哪里,
所以我们的约束成为:
如果z1 = 1,则if条件的第一部分为真 . 即 . X1 <= Y2
如果z2 = 1,则if条件的第二部分为真 . 即 . X2 <= Y1
现在,使用@ mattmilten的配方来确保两种条件:
这确保z1和z2都必须> = 1才能使a = 1 . 如果a = 1则b可以是b = 1或b = 0而不违反最后一个条件 .
如果a = 0,那么我们处于else条件,因此b必须为0 .