Python 带逻辑AND运算的混合整数规划IF-THEN
我试图用Python的纸浆模块在混合整数编程中建模以下约束: 给定线性规划变量: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 >=
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概念以及新的约束来考虑和条件。