【发布时间】:2015-08-11 16:51:39
【问题描述】:
对于这个问题,region 是 Zd 的子集,由具有整数系数的有限多个线性不等式定义,其中 Zd 是整数 d 元组的集合。例如,非负整数对(x, y) 与2x+3y >= 10 的集合构成了一个具有d=2 的区域(非负性只是强加了额外的不等式x>=0 和y>=0)。
问题:有没有一种好方法,使用整数规划(或其他方法?)来检查一个区域是否包含在有限多个其他区域的联合中?
我知道一种检查收容的方法,我将在下面描述,但我希望有人能够提供一些改进,因为它不是太有效。
这是我知道的检查收容措施的方法。首先,整数编程库可以直接检查区域是否为空:在整数编程术语中(据我理解),区域的空性对应于模型的不可行性。我使用 gurobi 库编写了一些代码来检查空虚,它在实践中似乎对我关心的那种区域效果很好。
现在假设我们要检查一个区域 X 是否包含在另一个区域 Y 中(问题的一个特例)。令Z 是X 与Y 的补集的交集。那么X 包含在Y 中当且仅当Z 为空。现在,Z 本身并不是我所理解的区域,而是区域Z_1, ..., Z_n 的联合,其中n 是用于定义Y 的不等式数量。我们可以通过检查每个Z_1, ..., Z_n 是否为空来检查Z 是否为空,我们可以按照上面的说明进行操作。
一般情况可以用完全相同的方式处理:如果Y 是区域Y_1, ..., Y_k 的有限联合,那么Z 仍然是区域Z_1, ..., Z_n 的有限联合,因此我们只需检查每个区域Z_i 为空。如果Y_i 由m_i 不等式定义,那么n = m_1 * m_2 * ... * m_k。
总而言之,我们可以将包含问题简化为空性问题,图书馆可以直接解决。问题是我们可能必须解决大量的空性问题来解决遏制(例如,如果每个Y_i 仅由两个不等式定义,那么n = 2^k 与k 呈指数增长),因此这可能需要很多时间。
【问题讨论】:
-
我不确定我是否遵循您的方法如何推广到许多地区。特别是,属于区域的并集并不意味着与每个区域的补集的交集是空的。示例:R1 = {(0,0), (0,2), (1,0), (2,2)}; R2 = {(1,0), (1,1), (3,1), (3,0)}。区域 R = R1 union R2 \ {(0,0), (0, 1)} 确实包含在两个区域的并集中,但它与 R1 和 R2 的补集的交集不为空。
标签: gurobi integer-programming