完全单模块矩阵与二进制变量

时间:2013-12-07 16:13:38

标签: matlab

请帮助我解决这个问题

我有完全单模块矩阵A乘以二进制变量X的集合。

表示A * X <= B

如何在多项式时间内解决这个问题。我有兴趣找到一个可行的解决方案。

例如我有:

A= [ 1  1  1  0  0  0  0  0 ;
     0  0  1  1  1  1  0  0 ;
     0  0  0  0  1  1  1  1 ;
     1  1  1  1  1  0  0  0 ;
     0  0  0  0  0  1  1  1 ;
    -1 -1 -1 -1  0  0  0  0 ;
     0 -1 -1 -1 -1  0  0  0 ;
     0  0  0 -1 -1 -1 -1  0 ;
     0  0  0  0  0 -1 -1 -1 ];

B= [ 2 ; 2; 2; 3; 2;-3;-3;-2;-2];

1 个答案:

答案 0 :(得分:0)

这可以通过优化工具箱中的bintprog(二进制整数编程)轻松解决:

x = bintprog(ones(size(A,2),1),A,b)

返回

x =

      0
      1
      1
      1
      0
      0
      1
      1

您可以轻松确认A*x收益b。当然,并不能保证这是唯一的解决方案。有关bintprog算法和调整选项的更多信息,请参阅this article。根据{{​​3}},bintprog所基于的分支定界方法可能具有多项式时间复杂度。

此外,正如@thewaywewalk指出的那样,this Wikipedia page也可以被利用:

x = lsqlin(A,b,A,b,[],[],zeros(size(A,2),1),ones(size(A,2),1))