У меня есть целочисленная линейная программа (ILP) с некоторыми переменными , которые предназначены для представления логических значений. В х I «ы ограничены целыми числами и держать либо 0 или 1 ( 0 ≤ х я ≤ 1 ).
Я хочу выразить логические операции над этими 0/1-значными переменными, используя линейные ограничения. Как я могу это сделать?
Более конкретно, я хочу установить (логическое И), у 2 = х 1 ∨ х 2 (логическое ИЛИ), и у 3 = ¬ х 1 (логическое НЕ). Я использую очевидную интерпретацию 0/1 как логические значения: 0 = ложь, 1 = истина. Как мне написать ограничения ILP, чтобы гарантировать, что y i связаны с x i по желанию?
(Это можно рассматривать как запрос на сокращение от CircuitSAT до ILP или запрос на способ выразить SAT как ILP, но здесь я хочу увидеть явный способ кодирования логических операций, показанных выше.)
Для НЕ, такое улучшение не доступно.
источник
Я нашел более короткое решение для XOR y = x1⊕x2 (x и y двоичные 0, 1)
только одна строка: x1 + x2 - 2 * z = y (z - любое целое число)
источник