I've noticed that for integer programming models with binary variables some use upper bound constraints and others use big M constraints in order to have two mutually exclusive choices.
I have trouble understanding the difference and when to use one instead of the other?
Example of a lower upper bound constraint assuming $y$ to be a binary variable : $x \leq 3y$
From this constraint I understand that x can be at most $= 3$ if $y = 1$ otherwise $x \leq 0$. However usually we have non-negativity constraints so $x = 0$ in this case.
Example of a big M constraint assuming $y$ to be a binary variable : $x_1 + x_2 + x_3 \leq 15 + M(1-y)$.
I understand that the expression at the left of the inequation can either be $\leq 15$ when $y = 1$ or $\leq \infty$. The latter suggest that we can have any values we want for left side.