Если условие в целочисленном программировании

Я решаю задачу целочисленного программирования с условием

если a=0, то b=0 иначе b=1

где a целое число, а b двоичное

Я просмотрел предыдущий вопрос, похожий на этот, но не смог найти решение. пожалуйста, помогите определить уравнение ограничения в целочисленном программировании для вышеуказанных условий.


person shariq mohammad    schedule 05.12.2016    source источник
comment
Какие они?   -  person harold    schedule 05.12.2016
comment
a является целым числом, а b — двоичным   -  person shariq mohammad    schedule 05.12.2016


Ответы (2)


Первое ограничение простое: a=0 b=0 можно записать как b. Второе ограничение (a 1 b=1) более сложное. Если a M где M относительно мало, то вы можете записать это как M b a. В противном случае вам потребуется использовать функцию решателя, которая называется ограничения индикатора.

person Greg Glockner    schedule 05.12.2016
comment
спасибо за ответ, ограничение a ≥ b не выполняется, если a является отрицательным целым числом - person shariq mohammad; 05.12.2016
comment
Как правило, в целочисленном программировании нет отрицательных целых чисел. Предполагается нижняя граница нуля, если не указано иное. - person mattmilten; 06.12.2016

Используйте эти два ограничения:

a<=bM
b<=aM

где M — большое число (M>a). Когда a=0, 1-е ограничение избыточно, 2-е наложит b=0. Если a>0, то 2-е ограничение является избыточным, но 1-е ограничение заставит b получить значение 1 (если M достаточно велико).

person Faraz Ramtin    schedule 14.12.2016
comment
Поскольку b является двоичным, вы должны упростить второе ограничение до b ‹= a. - person Greg Glockner; 15.12.2016
comment
Грег, я неправильно понял твой предыдущий ответ, я думал, что (точка), которую ты поставил после М, — это двоеточие. По сути, я только что ответил на то, что вы уже сделали. M не требуется во втором ограничении, как вы упомянули. - person Faraz Ramtin; 16.12.2016