# Logical constraint in ILP

I want to write the following constraint:

Let $$z$$ be an integer variable such that $$0\le z\le M$$, and $$t$$ be a binary variable where $$M$$ denotes big-M. The logical constraint is as follows:

• if $$z \leq M$$ and $$z > 0$$ then $$t=1$$;

• if $$z=0$$ then $$t=0$$.

Is this $$z≤Mt$$ sufficient? The $$t$$ and $$z$$ variables are not in my objective function but variable $$t$$ is connected to another variable in the objective function?

Thank you very much, I appreciate your help.

## 1 Answer

The big-M constraint $$z \le M t$$ does enforce $$z > 0 \implies t = 1$$, equivalently its contrapositive $$t = 0 \implies z = 0$$, but not the converse $$z = 0 \implies t = 0. \tag1$$ To enforce $$(1)$$, consider its contrapositive $$t = 1 \implies z > 0 \tag2,$$ which you can enforce via big-M constraint $$\epsilon - z \le (\epsilon - 0)(1 - t),$$ equivalently, $$z \ge \epsilon t,$$ where $$\epsilon > 0$$ is a tolerance that represents the smallest value of $$z$$ that you would consider to be positive.

• $z$ is asserted to be integer, so $\epsilon=1$. – prubin Aug 15 '20 at 20:55
• Yep. Thanks, @prubin! – RobPratt Aug 15 '20 at 20:56
• @RobPratt Thank you very much for your answer. You've been a great help. – che Aug 15 '20 at 22:09