这个二进制数是否有特定的名称或 属性 来获取它们?

do this binary numbers have a specific name or property to get them?

我想要二进制数,开头或结尾只有0,例如,

1111111 01111110 001111111 000111000

但没有:

01001 0011101

他们有具体的名字吗?属性可以得到吗?

我正在寻找类似于线性整数优化条件的东西,我的解决方案必须具有这种形式,但我想不出我可以添加任何条件来确保

此致,

这在混合整数程序中不太好表达。大多数涉及此的问题更适合替代方法(SAT 求解、SMT 求解、约束编程)。

当然可以做到,但是求解器会有一些工作,因为公式很重要并且引入了很多二元变量(MIP 求解器的基本方法在这里不会很好地工作;不良完整性差距)。

我不会给你一个完整的解决方案,而是一些关于如何制定这个的基本想法,我也指出它是多么困难和繁琐(有替代的公式;实际上是无限的;但没有什么更简单).

这里的基本思想如下:

  • 你的二进制数是由 N 个二进制变量构成的
    • 我们称他们为x
  • 你引入了N辅助二进制变量l(左)
    • l[i] == 1 意味着:每个 l[j]i<j0
  • 你引入了N辅助二元变量r(对)
    • r[i] == 1 意味着:每个 r[j]i>j0
  • 您为每个位置添加以下约束 k
    • x[k] == 0 暗示:l[i] == 1 for i < k OR r[i] == 1 for i>k
    • 想法::
      • 如果某处有零,要么左边全部为零,要么右边全部为零(或表示:至少一侧;但可以是两侧)

要阐明这一点,您还需要两个想法:

  • A: 如何制定相等性检查?
  • B:如何表述蕴涵
    • 备注:a -> b == not a or b(命题演算)
    • (这是之前错误陈述的,OP更正)

这些在 MIP 中很常见,您会在许多整数规划书籍、教程和论文中找到解决方案。 Here is an example(从指标变量开始)。

另一个小通用公式:

  • 如果a是二进制,b是二进制:
    • a OR b 等同于:a+b >= 1(后者是准备用于 MIP 的线性表达式)

备注:我上面的idea-setting中的公式在索引(i vs. i-1, vs. i+1)和二元关系(<vs .<=)。您需要自己做实际的数学运算,并从想法本身中学习!

备注2:这种约束在MIP中很麻烦,但在SAT和CP中更容易制定。