Home > Blockchain >  ILP: Exclusive range for variable
ILP: Exclusive range for variable

Time:12-30

In an ILP, How can I write a constraint "X is not in the interval [Y, Y 10]" ?

Is it even possible?

CodePudding user response:

You didn't say, but I'm assuming x and y are non-negative integers and that the range you indicate to avoid is inclusive of endpoints...

You have an "or" condition there, so you will need to introduce a helper or "indicator" variable to handle the or condition, call it z, and a (constant) parameter for a reasonable upper bound on y, call it M:

z ∈ {0, 1}  # 0 if below y, 1 if above y 10
M > reasonable_upper_bound(y)

Then 2 constraints based on that info to either constrain x to the lower set of values or the upper, excluding the interval (of disinterest):

x <= (y - 1)   z * M
x >= (y   10   1) - (1 - z) * M    

Truth Table:

       z=0      z=1
x <=   y-1      ~M
x >=   ~0       y   11
  • Related