Originally posted by: SystemAdmin
The best way is to just use an indicator constraint:
x(i,j,k) = 1 -> A(i) >= B(j,k)
CPLEX supports those logical implications and would transform it into a big-M constraint automatically if it thinks this is useful in terms of numerics and performance. If not, it just leaves it as a logical condition and deals with it by branching.
If you want to create the big-M constraint manually (which I do not recommend), then you have to know an upper bound for the term B(j,k) - A(i), for example as the upper bound of B(j,k) minus the lower bound of A(i). If M is an upper bound for B(j,k) - A(i), then the constraint looks as follows:
B(j,k) - A(i) + Mx(i,j,k) <= M
As you can see, if x = 0 then the constraint is redundant because
B(j,k) - A(i) <= M
is always satisfied (since M is an upper bound for the difference). On the other hand, if x = 1 then the constraint reads
B(j,k) - A(i) <= 0
which is exactly what you want.
Tobias
#DecisionOptimization#MathematicalProgramming-General