В этом случае я бы отбросил обе идеи и придерживался булевых выражений:
x.Not() OR y.Not()
AND
x OR y
или, если ortools это поддерживает:
x XOR y
(= псевдокод -> не обязательно любой здравомыслящий синтаксис)
Это так просто, как может, и может быть очень эффективно рассмотрено при распространении юнитов. Более того, 2-SAT-объекты могут работать внутренне (implication-graph и т. Д.).
Нет необходимости рассуждать о целочисленных арифметических значениях c (включая потенциальные каналы bool / int) или глобальных ограничениях. .
Вышесказанное иногда используется в SAT, когда разлагает все по-разному, запрещая все возможные пары.
(ortools может быть умным, чтобы проанализировать свои подходы, чтобы получить ту же самую формулировку, но, возможно, нет -> почему бы не помочь, если это так просто)