Логическое выражение в линейной программе

Я должен выразить условие И в линейной программе. Булева переменная z принимает значение 1, если обе булевы переменные x и y принимают значение 1. В противном случае z принимает значение 0. Как мне записать это в линейной программе?


person Arun Sen    schedule 29.07.2020    source источник
comment
Отвечает ли это на ваш вопрос? cs.stackexchange.com/questions/12102/   -  person DV82XL    schedule 29.07.2020


Ответы (1)


В чистой линейной программе логические выражения невозможны.

Если вы находитесь в (смешанной) целочисленной программе и все x, y, z являются двоичными переменными, вы можете реализовать AND следующим образом.

  • z >= x+y-1
  • z <= x
  • z <= y

Здесь первое обеспечивает z=1, если x=y=1, а последние два заставляют z=0, если любое из двух не равно 1.

Как отметил @Erwin Kalvelagen в комментариях, это лучше расслаблено, чем формулировка с использованием 2z <= x+y.

person SimonT    schedule 29.07.2020
comment
Большое спасибо. С первым разобрался, а со вторым не разобрался. Еще раз спасибо за вашу помощь. - person Arun Sen; 29.07.2020
comment
Это совершенно правильно. Однако более сильная формулировка: z ≤ x, z ≤ y, z ≥ x+y-1. Это настолько жестко, что мы можем ослабить x, чтобы оно было непрерывным между 0 и 1. Иногда это может иметь значение. - person Erwin Kalvelagen; 04.08.2020
comment
Хорошая точка зрения! Я понял это сам после ответа на вопрос. Я просто еще не изменил ответ. Но спасибо, что снова указали на это. - person SimonT; 04.08.2020
comment
Теперь я изменил ответ, чтобы показать более сильную формулировку. - person SimonT; 04.08.2020