2

For this question, a region is a subset of Zd defined by finitely many linear inequalities with integer coefficients, where Zd is the set of d-tuples of integers. For example, the set of pairs (x, y) of non-negative integers with 2x+3y >= 10 constitutes a region with d=2 (non-negativity just imposes the additional inequalities x>=0 and y>=0).

Question: is there a good way, using integer programming (or something else?), to check if one region is contained in a union of finitely many other regions?

I know one way to check containment, which I describe below, but I'm hoping someone may be able to offer some improvements, as it's not too efficient.


Here's the way I know to check containment. First, integer programming libraries can directly check if a region is empty: in integer programming terminology (as I understand it), emptiness of a region corresponds to infeasibility of a model. I have coded up something using the gurobi library to check emptiness, and it seems to work well in practice for the kind of regions I care about.

Suppose now that we want to check if a region X is contained in another region Y (a special case of the question). Let Z be the intersection of X with the complement of Y. Then X is contained in Y if and only if Z is empty. Now, Z itself is not a region in my sense of the word, but it is a union of regions Z_1, ..., Z_n, where n is the number of inequalities used to define Y. We can check if Z is empty by checking that each of Z_1, ..., Z_n is empty, and we can do this as described above.

The general case can be handled in exactly the same way: if Y is a finite union of regions Y_1, ..., Y_k then Z is still a finite union of regions Z_1, ..., Z_n, and so we just check that each Z_i is empty. If Y_i is defined by m_i inequalities then n = m_1 * m_2 * ... * m_k.

So to summarize, we can reduce the containment problem to the emptiness problem, which the library can solve directly. The issue is that we may have to solve a very large number of emptiness problems to solve containment (e.g., if each Y_i is defined by only two inequalities then n = 2^k grows exponentially with k), and so this may take a lot of time.

Winnie
  • 25
  • 2
  • I am not sure I follow how your approach generalizes to many regions. In particular, to belong to the union of the regions does not imply that the intersection with the complement of every region is empty. Example: R1 = {(0,0), (0,2), (1,0), (2,2)}; R2 = {(1,0), (1,1), (3,1), (3,0)}. The region R = R1 union R2 \ {(0,0), (0, 1)} is indeed contained in the union of the two regions, but its intersection with the complements of R1 and R2 is not empty. – Ioannis Aug 15 '15 at 10:33

1 Answers1

0

You can't really expect a simple answer. Suppose that A is defined by all constraints of the form 0 <= x_i <= 1. A can be thought of as the collection of all possible rows of a truth table. Given any logical expression of the form e.g. x or (not y) or z, you can express it as a linear inequality such as x + (1-y) + z >= 1 (along with the 0-1 constraints). Using this approach, any Boolean formula in conjunctive normal form (CNF) can be expressed as a region in Z^n. If A is defined as above and B_1, B_2, ...., B_k is a list of regions corresponding to CNFs then A is contained in the union of the B_i if and only if the disjunction of those CNFs is a tautology. But tautology-checking is a canonical example of an NP-complete problem.

None of this is to say that it can't be usefully reduced to ILP (which itself is NP-complete). I don't see of any direct way to do so, though I suspect that some of the techniques used to identify redundant constraints would be relevant.

John Coleman
  • 51,337
  • 7
  • 54
  • 119
  • Thanks for your response. I should have said, in my situation d (=number of variables) is fairly small (around 15), but k (=number of regions in union) is large (around 100). So the case you mention (0 <= x_i <= 1) wouldn't be a problem in my setting, since even a brute force algorithm can reasonably check the 2^15 possibilities for x. But I don't know a good way to handle the non-boolean case, since the algorithm I outlined above would be horrible with k=100! – Winnie Aug 12 '15 at 15:41
  • I have in my office called *Optimization and Computational Logic* (by McAloon and Tretkoff) has a small section on something called *Disjunctive Programming* where they talk about unions of polyhedral regions. A Google search of the term has a number of hits and glancing at some of them makes it seem promising, but not in a very direct way. Interestingly, the branch and bound algorithm itself can be thought of as a solution method which works by expressing the original feasible region as a union of smaller feasible regions, so *maybe* some sort of branch and bound could work. – John Coleman Aug 12 '15 at 19:32