Python 带逻辑AND运算的混合整数规划IF-THEN

Python 带逻辑AND运算的混合整数规划IF-THEN,python,if-statement,linear-programming,integer-programming,mixed-integer-programming,Python,If Statement,Linear Programming,Integer Programming,Mixed Integer Programming,我试图用Python的纸浆模块在混合整数编程中建模以下约束: 给定线性规划变量:x1,x2,y1,y2其中x1,x2,y1,y2最终求解为整数值 if (x1<=y2 and y1<=x2) then a=1 else b=0 if(x1首先,这不是线性规划,而是混合整数规划,因为和约束不是线性的,也不是蕴涵。我还假设a和b都是二进制变量。然后,您可以将问题重新表述为: x1 > y2 + m*z1 y1 > x2 + m*z2 a + 1 >=

我试图用Python的纸浆模块在混合整数编程中建模以下约束:

给定线性规划变量:
x1,x2,y1,y2
其中x1,x2,y1,y2最终求解为整数值

if (x1<=y2 and y1<=x2) then a=1 else b=0
if(x1首先,这不是线性规划,而是混合整数规划,因为
约束不是线性的,也不是蕴涵。我还假设
a
b
都是二进制变量。然后,您可以将问题重新表述为:

x1    >  y2 + m*z1
y1    >  x2 + m*z2
a + 1 >= z1 + z2
a     <= z1
a     <= z2
a - b >= 0
首先,这不是线性规划,而是混合整数规划,因为
约束不是线性的,也不是蕴涵。我还假设
a
b
都是二进制变量。然后,您可以将问题重新表述为:

x1    >  y2 + m*z1
y1    >  x2 + m*z2
a + 1 >= z1 + z2
a     <= z1
a     <= z2
a - b >= 0

我发现了一个公式,无论给定的问题是什么,它都能对IF-THEN-ELSE起作用。 在回答的后面部分,我使用@mattmilten的回答中描述的
z1,z2
变量来处理
if语句中的
和条件

假设问题在于以下规范:

if α > 0 then β >= 0 else γ >= 0
那么

α - z * U_α <= 0          # (1)
α - (1 - z)(L_α - 1) > 0  # (2)
β - (1 - z)L_β >= 0       # (3)
γ - z * L_γ >= 0          # (4)
如果z==1 然后等式(1)和(4)是多余的,并且执行
Then条件
或(3)

如果z==0 然后等式(2)和(3)是多余的,并且强制执行
else条件
或(4)

对于这个问题 我们运行了两次,第一次使用α=α1,第二次使用α=α2

在哪里,

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}
α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. 
因此,我们的限制变成:

α1 - z1 * U_α1 <= 0          # (1-1)
α1 - (1 - z1)(L_α1 - 1) > 0  # (1-2)
α2 - z2 * U_α2 <= 0          # (2-1)
α2 - (1 - z2)(L_α2 - 1) > 0  # (2-2)
α1-z1*U_Uα10#(1-2)
α2-z2*U_Uα2 0#(2-2)

如果z1=1,那么我们的If条件的第一部分是真的。即x1我发现了一个公式,不管给出的问题是什么,它都能工作
If-then-ELSE
。 在回答的后面部分,我使用@mattmilten的回答中描述的
z1,z2
变量来处理
if语句中的
和条件

假设问题在于以下规范:

if α > 0 then β >= 0 else γ >= 0
那么

α - z * U_α <= 0          # (1)
α - (1 - z)(L_α - 1) > 0  # (2)
β - (1 - z)L_β >= 0       # (3)
γ - z * L_γ >= 0          # (4)
如果z==1 然后等式(1)和(4)是多余的,并且执行
Then条件
或(3)

如果z==0 然后等式(2)和(3)是多余的,并且强制执行
else条件
或(4)

对于这个问题 我们运行了两次,第一次使用α=α1,第二次使用α=α2

在哪里,

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}
α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. 
因此,我们的限制变成:

α1 - z1 * U_α1 <= 0          # (1-1)
α1 - (1 - z1)(L_α1 - 1) > 0  # (1-2)
α2 - z2 * U_α2 <= 0          # (2-1)
α2 - (1 - z2)(L_α2 - 1) > 0  # (2-2)
α1-z1*U_Uα10#(1-2)
α2-z2*U_Uα2 0#(2-2)

如果z1=1,那么If条件的第一部分为真。即x1我认为标签“线性规划”是合适的。是的,这是一个混合整数线性规划问题,但它仍然是线性的。我认为标签“线性规划”是的,这是一个混合整数线性规划问题,但它仍然是线性的。谢谢!我将问题改为混合整数规划,而不是原来的(不正确)线性规划。也添加了一个新的标签,因为以前没有混合整数规划标签。在这里,
如果a=1,那么b=0
,如果a=0,那么b=1
。我想
b=0
只有当我们处于
else
条件下。而
a=1
只有当我们处于
if then
条件下。在其他c中ases,所有的值都是允许的。最后一个约束是
a-b>=0
而不是
b=1-a
?是的,我认为你的公式是正确的。我误解了你的初始约束。你的公式没有强制执行else条件。只有if条件。我在下面输入了一个更好的答案,使用了
(1-z)
前两个条件中的每一个都有额外的条件以确保其有效。我仍然对您的答案进行了投票,因为除了新的约束之外,我还使用了z1、z2概念来考虑和条件。谢谢!我将问题改为混合整数规划,而不是原来的(不正确)线性规划。也添加了一个新的标签,因为以前没有混合整数规划标签。在这里,
如果a=1,那么b=0
,如果a=0,那么b=1
。我想
b=0
只有当我们处于
else
条件下。而
a=1
只有当我们处于
if then
条件下。在其他c中ases,所有的值都是允许的。最后一个约束是
a-b>=0
而不是
b=1-a
?是的,我认为你的公式是正确的。我误解了你的初始约束。你的公式没有强制执行else条件。只有if条件。我在下面输入了一个更好的答案,使用了
(1-z)
前两个条件中的每一个都有额外的条件以确保其有效。我仍然对您的答案投了更高的票,因为我使用了z1、z2概念以及新的约束来考虑和条件。