【问题标题】:linear equations with binary variables具有二元变量的线性方程
【发布时间】:2013-12-07 22:31:54
【问题描述】:

我有这些方程,我想为它们找到一个解决方案

0<=x1+x2+x3+x4+x5+x6<=3                
0<=x7+x8<=2   
2<=x1+x2+x3+x4<=4   
2<=x3+x4+x5<=3   
2<=x6+x7+x8<=3   

xi 的值为 0 或 1(xi 是二进制变量)

有什么算法可以解决这种方程和类似的方程

【问题讨论】:

标签: matlab linear-algebra linear-programming


【解决方案1】:

您确定您的问题不是binary integer programming

如果你只是想用这么少的变量来解决这个不等式,暴力搜索可能会起作用....构造 2^8 8*1 向量,并验证每个向量是否满足你的不等式(你当然可以用矩阵形式写你的方程)。

如果您只想要一个解决方案....您甚至可以手动完成:10101011

但一般的解决方案并不容易。检查此post。要在多项式时间内求解二进制整数线性方程,有一个paper,您可能需要一些时间来挖掘。

编辑:来自@Ben Voigt 的更新

branch-and-bound 通常可以有效地解决(大)整数(包括二进制)和混合整数问题。当然,这个问题太小了,不值得付出代价——穷举搜索就足够了。

【讨论】:

  • 感谢您的帮助.. 我正在寻找多项式算法来解决这个问题。
  • 为你更新一篇文章,伪代码包含在论文中,但理解原理需要时间。
  • 我的问题有一个特殊的形式,首先矩阵 A 是完全单模的,并且每个方程中的变量都是邻居,也许这会使问题更容易解决。
  • 你的解不满足2
  • 分支定界对于有效解决(大)整数(包括二进制)和混合整数问题通常很有效。当然,这个问题太小了,不值得开销——穷举搜索就足够了。 (尽管列侬,你可能想要使用正确的热力,exhaustivebrute force 而不是 brutal
【解决方案2】:

无论您使用哪种算法,我都会进行一些预处理以降低复杂性。二元变量之和总是>=0:

x1+x2+x3+x4+x5+x6<=3                
x7+x8<=2   
2<=x1+x2+x3+x4<=4   
2<=x3+x4+x5<=3   
2<=x6+x7+x8<=3  

二进制变量的总和总是

x1+x2+x3+x4+x5+x6<=3                
2<=x1+x2+x3+x4   
2<=x3+x4+x5   
2<=x6+x7+x8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多