Логическое ограничение в ILP
Я хочу написать следующее ограничение:
Позволять $z$ быть целочисленной переменной такой, что $0\le z\le M$, а также $t$ быть двоичной переменной, где $M$обозначает big-M. Логическое ограничение выглядит следующим образом:
если $z \leq M$ а также $z > 0$ тогда $t=1$;
если $z=0$ тогда $t=0$.
Это $z≤Mt$достаточный? В$t$ а также $z$ переменные не входят в мою целевую функцию, но переменные $t$ связано с другой переменной в целевой функции?
Большое спасибо, я ценю вашу помощь.
Ответы
Ограничение большого М $z \le M t$ обеспечивает соблюдение $z > 0 \implies t = 1$, что эквивалентно его противоположность $t = 0 \implies z = 0$, но не наоборот $$z = 0 \implies t = 0. \tag1$$ Укреплять $(1)$, считайте его противоположным $$t = 1 \implies z > 0 \tag2,$$ который вы можете обеспечить с помощью ограничения big-M $$\epsilon - z \le (\epsilon - 0)(1 - t),$$ эквивалентно, $$z \ge \epsilon t,$$ где $\epsilon > 0$ это допуск, который представляет наименьшее значение $z$ что вы сочтете положительным.