在零一整数线性编程(ILP)中表达布尔逻辑运算


58

我有一个带有一些表示布尔值的变量的整数线性程序(ILP)X一世。的X一世的被约束为整数并保持0或1(0≤X一世≤1个)。

我想使用线性约束对这些0/1值的变量表示布尔运算。我怎样才能做到这一点?

更具体而言,我想设置(布尔AND),ÿ 2 = X 1 ∨ X 2(布尔OR),和ÿ 3 = ¬ X 1(布尔非)。我使用0/1的明显解释为布尔值:0 =否,1 =否。如何编写ILP约束以确保y i与x i相关联?ÿ1个=X1个∧X2ÿ2=X1个∨X2ÿ3=¬X1个ÿ一世X一世

(这可以被视为要求将CircuitSAT简化为ILP,或者要求将SAT表示为ILP的方法,但是在这里,我想看到一种编码上述逻辑运算的显式方法。)

Answers:


66

逻辑AND:使用线性约束ÿ1个≥X1个+X2-1个,ÿ1个≤X1个,ÿ1个≤X2,0≤ÿ1个≤1个,其中ÿ1个被限制为一个整数。这加强了所需的关系。(很整洁,您可以只用线性不等式做到这一点,是吧?)

逻辑OR:使用线性约束ÿ2≤X1个+X2,ÿ2≥X1个,ÿ2≥X2,0≤ÿ2≤1个,其中ÿ2被限制为一个整数。

逻辑非:使用ÿ3=1个-X1个。

逻辑蕴涵:为了表达ÿ4=(X1个⇒X2)(即,ÿ4=¬X1个∨X2),我们可以调整为逻辑或的结构。特别地,使用线性约束ÿ4≤1个-X1个+X2,ÿ4≥1个-X1个,ÿ4≥X2,0≤ÿ4≤1个,其中ÿ4被限制为一个整数。

强制逻辑蕴涵:以表达X1个⇒X2必须持有,只需使用线性约束X1个≤X2(假设X1个和X2都已经约束到布尔值)。

XOR:为了表达ÿ5=X1个⊕X2(异或的X1个和X2),则使用线性不等式ÿ5≤X1个+X2,ÿ5≥X1个-X2,ÿ5≥X2-X1个,ÿ5≤2-X1个-X2,0≤ÿ5≤1个,其中ÿ5被约束为一个整数。


另外,还有一种技巧是,在制定包含零一(布尔)变量和整数变量混合的问题时,通常可以提供帮助:

投给布尔(版本1):假设有一个整数变量X和要定义ÿ使得ÿ=1个如果X≠0和ÿ=0如果X=0。如果附加地知道0≤X≤ü,则可以使用线性不等式0≤ÿ≤1个,ÿ≤X,X≤üÿ ; 但是,这仅在您知道上限和下限时才有效X。或者,如果您知道|X|≤ü。(即-ü≤X≤ü)对于某一常数ü,那么你可以使用所描述的方法在这里。仅当您知道 |的上限时,才适用 x ||X|

转换为布尔值(版本2):让我们考虑相同的目标,但是现在我们不知道X的上限。但是,假设我们知道X≥0。这就是在线性系统中表达约束的方式。首先,引入一个新的整数变量Ť。添加不等式0≤ÿ≤1个,ÿ≤X,Ť=X-ÿ。然后,选择目标函数,以使Ť最小。仅当您还没有目标函数时,这才有效。如果你有ñ非负整数变量X1个,…,Xñ并希望所有的人都投以布尔值,使ÿ一世=1个,如果X一世≥1个和ÿ一世=0,如果X一世=0,那么您能介绍ñ变量Ť1个,…,Ťñ与不等式0≤ÿ一世≤1个,ÿ一世≤X一世,Ť一世=X一世-ÿ一世并定义目标函数以最小化Ť1个+⋯+Ťñ。同样,这仅适用于定义目标函数的其他操作(如果除了对布尔值进行强制转换之外,您还打算仅检查所得ILP的可行性,而不是尝试最小化/最大化变量的某些功能)。


对于一些优秀的实践问题和可行的示例,我建议制定整数线性程序:A Rogues'Gallery。


哪个线性规划求解器可以解决这个问题?因为采用* .lp或* .mps格式,约束的一侧必须是固定整数而不是变量。
— boxi 2015年

4
@boxi,我对* .lp或* .mps格式一无所知,但是每个整数线性编程求解器都应该能够解决这个问题。请注意,如果您有类似,这相当于Ÿ - X ≥ 0,这可能是你想要的格式。X≤ÿy−x≥0
— DW

-我再次检查。lp_solve可以解决它,但是例如qsopt不能解决。我不知道为什么。但感谢<3
— boxi 2015年

@boxi,我刚查了QSopt在线小程序GUI,一旦我改变了它可以处理这类约束的到X - Ÿ ≤ 0,所以我不知道发生了什么事。(我使用* .lp格式。)如果任何ILP求解器无法处理这些系统,我都会感到惊讶。如果您对QSopt有其他疑问,则应该将其带到QSopt支持论坛。X≤ÿX-ÿ≤0
— DW

1
@Pramod,好收获!感谢您发现该错误。你是绝对正确的。我问了一个有关如何为该案例建模的新问题,当我们得到一个答案时,我将更新此答案。
— DW

19

可以在一个范围约束而不是三个约束中建模逻辑与关系(就像在另一种解决方案中一样)。因此,不是将三个约束 它可以使用单范围约束被写入 0 ≤ X 1 + X 2 - 2 ý 1 ≤ 1

ÿ1个≥X1个+X2-1个,ÿ1个≤X1个,ÿ1个≤X2,
类似地,对于逻辑OR: 0 ≤ 2 ý 1 - X 1 - X 2 ≤ 1
0≤X1个+X2-2ÿ1个≤1个。
0≤2ÿ1个-X1个-X2≤1个。

如果不是,则没有这样的改进。

通常,对于(Ñ -WAY AND)的约束将是: 0 ≤ &Sigma; X 我 - ñ Ÿ ≤ ñ - 1ÿ=X1个∧X2∧⋯∧Xññ 类似地,对于OR: 0 ≤ Ñ ý - Σ X 我 ≤ ñ - 1

0≤∑X一世-ñÿ≤ñ-1个。
0≤ñÿ-∑X一世≤ñ-1个。

本文中有一个非常类似的方法:ncbi.nlm.nih.gov/pmc/articles/PMC1865583
— Abdelmonem Mahmoud Amer

3

我发现XOR y =x1⊕x2的更短解决方案(x和y是二进制0、1)

仅一行:x1 + x2-2 * z = y(z是任意整数)


要表达ILP中的相等性,您需要两个不相等性。此外,为避免解X1个=1个,X2=0,ž=200,ÿ=-1990≤ÿ≤1个

≠b
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.