3
在零一整数线性编程(ILP)中表达布尔逻辑运算
我有一个带有一些表示布尔值的变量的整数线性程序(ILP)xiX一世x_i。的xiX一世x_i的被约束为整数并保持0或1(0≤xi≤10≤X一世≤1个0 \le x_i \le 1)。 我想使用线性约束对这些0/1值的变量表示布尔运算。我怎样才能做到这一点? 更具体而言,我想设置(布尔AND),ÿ 2 = X 1 ∨ X 2(布尔OR),和ÿ 3 = ¬ X 1(布尔非)。我使用0/1的明显解释为布尔值:0 =否,1 =否。如何编写ILP约束以确保y i与x i相关联?y1=x1∧x2ÿ1个=X1个∧X2y_1 = x_1 \land x_2y2=x1∨x2ÿ2=X1个∨X2y_2 = x_1 \lor x_2y3=¬x1ÿ3=¬X1个y_3 = \neg x_1yiÿ一世y_ixiX一世x_i (这可以被视为要求将CircuitSAT简化为ILP,或者要求将SAT表示为ILP的方法,但是在这里,我想看到一种编码上述逻辑运算的显式方法。)