从昂贵的搜索到整数编程或约束编程?

时间:2015-07-10 07:26:42

标签: math constraint-programming integer-programming

考虑m乘n矩阵M,其所有条目都是0或1.对于给定的M,问题是是否存在非零向量v,其所有条目都是-1,0或1,其中Mv = 0.例如,

      [0 1 1 1]
M_1 = [1 0 1 1]
      [1 1 0 1]

在这个例子中,没有这样的矢量v。

      [1 0 0 0]
M_2 = [0 1 0 0]
      [0 0 1 0]

在此示例中,向量(0,0,0,1)给出M_2v = 0。

给定m和n,我想找到是否存在这样的M,以便没有非零v,使得Mv = 0。

如果m = 3n = 4,则答案为,如上所示。

我目前正在通过尝试所有不同的M和v来解决这个问题。

  

但是,是否可以将问题表示为整数   编程问题或约束编程问题,所以我可以使用   现有的软件包,比如SCIP,可能更多   高效。

3 个答案:

答案 0 :(得分:6)

这个问题可能比编程更具数学性。我还没有找到最终的答案,但至少有一些想法在这里:

我们可以通过以下方式重新陈述问题。

  

问题A:修复正整数mn。设Sn维向量的集合,其条目为01。是否有mn矩阵M,其条目为01,这样,对于任意两个不同的向量v_1v_2 SMv_1,向量Mv_2M不同。 (或者,您可以这样说,矩阵n,被视为m的应用 - 维向量到S - 维向量,在集合(m, n)上是单射的。 )

简而言之:给出M对,是否存在这样的内射Mv_1 = Mv_2

问题A等同于原始问题。实际上,如果v_1v_2中的两个SM(v_1 - v_2) = 0 v_1 - v_2 0,那么我们会1,而- 1只会{ {1}},mn作为条目。反过来显然也是如此。

另一个重新解释是:

  

问题B:让Sn为正整数,01维向量的集合,其条目为m和{ {1}}。我们可以在r_1, ..., r_m中找到S向量v_1,这样,对于v_2中的任何一对不同向量Sr_i,都存在一个<v_1, r_i> != <v_2, r_i>,满足<x, y>?这里m是通常的内在产品。

简而言之:我们可以在S中选择S向量来区分M中的所有人,将内部产品与所选产品区分开来吗?

问题B等同于问题A,因为您可以在m中使用S向量识别矩阵(m, n)

在下文中,我将自由地使用这两个问题的描述。

让我们调用n对&#34; 好对&#34;如果问题A(或B)的答案是

对于问题B的描述,很明显,对于给定的m,存在最小(m, n),使得m(n)是一对好的。让我们为与m相关联的最小n撰写m

同样,对于给定的n,有一个最大(m, n)(m, n)是好的。这是因为,如果M是好的,即问题A中有一个内射n' <= n,那么对于任何n - n',删除{{1}的任何M列将给出一个单独的M'。让我们为与n(m)相关联的最大n撰写m

因此,任务变为计算函数m(n)和/或n(m)

我们首先证明了几个引理:

  

引理1:我们有m(n + k) <= m(n) + m(k)

证明:M m(n) n (m(n), n) {}} {}} K m(k) k (m(k), k) (m(n) + n(k)) (n + k) 1}}对[M 0] [0 K] 的内射矩阵,然后(m(n) + 1, n + 1)v_1矩阵

v_2

适用于(n + k)对。要查看此内容,请nk为任意一对不同的m(n)维向量。我们可以将它们分成两部分:第一个m(k)条目和最后m(n)个条目。如果它们的第一部分不相等,则可以通过上述矩阵的第一m(n + 1) <= m(n) + 1行之一来区分它们;如果它们的第一部分是相等的,那么它们的第二部分必须是不同的,因此它们可以通过上述矩阵的最后m(n) <= n行之一来区分。

  

备注:序列k = 1因此是subadditive序列。

一个简单的推论:

  

推论2:我们m(n),因此m(4) <= 3

证明:在引理1中取m(4n) <= 3n

请注意,从O(n)的其他已知值可以获得更好的上限。例如,由于我们知道m(n) >= n / log2(n + 1),因此我们有T。无论如何,这些总是给你m(n)上限。

下一个引理会给你一个下限。

  

引理3:{0, 1, ..., n}

证明:让m(n)成为n维向量的集合,其条目位于M。任何ST矩阵v都会提供从MvM的地图,并将T发送到S

由于存在T使得上述地图是单射的,因此集合(n + 1)^m的大小必须至少是集合S的大小。 2^n的尺寸为(n + 1)^m(n) >= 2^nm(n) >= n / log2(n + 1)的尺寸为U,因此我们有:

n

或等效地,1

返回编程

我不得不说我还没有想出一个好的算法。 您可以将问题重新表述为Set Cover Problem,如下所示:

0成为包含- 1Sw条目的S维向量集合,让C_w如上所述。 U中的每个向量C_w = {v in U: <w, v> != 0}都提供了m w的子集C_w。问题是:我们是否可以找到U向量n = 10,以便子集{{1}}的并集等于{{1}}。

一般的封面问题是NP完整的,但在上面的Wiki链接中有一个整数线性程序公式。

无论如何,我认为这不会比{{1}}更进一步。

如果我有进一步的结果,我会继续编辑这个答案。

答案 1 :(得分:3)

我认为使用布尔矩阵乘法将允许您解决Mv = 0问题,只有1&amp; s&amp; 0更有效率。使用这种方法,您应该能够解决,而不必担心由于RHS等于零而导致的排名缺陷。以下是使用BMM的一些算法的文档链接:

http://theory.stanford.edu/~virgi/cs367/lecture2.pdf

答案 2 :(得分:0)

如果我理解了这个问题,那么如果存在矩阵M(线性变换),则需要给定的m,n,其具有平凡的核,即Ker(M)= {0}。

回想一下,这与M的Nullspace为零0,Null(M)= 0相同。

对于系统Mv = 0,如果矩阵M的秩等于v的维数,则零空间为{0}。所以你的问题归结为询问是否存在具有秩dim的mxn矩阵(v) =米。 这种形式的问题已经在这里讨论了

Generate "random" matrix of certain rank over a fixed set of elements

您还可以根据决定因素来构建此问题,因为如果M具有determinant = 0,那么nullspace是非常重要的。因此,您可以根据{-1,0,1}中带有所需行列式的条目构建矩阵来考虑这个问题。

我希望这会有所帮助。