【问题标题】:Iterative use of bintprog on MATLAB在 MATLAB 上迭代使用 bintprog
【发布时间】:2013-04-11 11:21:32
【问题描述】:

我们有一个问题表述,如this link 所示。

考虑到bintprog 的第一次调用给出了一个解决方案x,经过一些后处理并不能充分解决物理问题,是否可以调用bintprog 并排除先前的解决方案x

【问题讨论】:

  • 为什么不直接将其添加为约束?
  • @Bitwise 您可以向bintprog 添加两种类型的约束。第一个对应于不等式,第二个对应于等式。我已经对等式约束有了具体的论据,但我想不出一种方法来将不等式约束纳入我想要的东西。你有什么想法吗?
  • 不等式怎么样?如果你得到 x=3,则添加 x

标签: matlab combinatorics linear-programming


【解决方案1】:

你需要一个不好的剪辑。

假设您找到了一个解决方案 \hat{x},然后您认为该解决方案是不可行的(通过某种后处理)。让 x 和 \hat{x} 被 i 索引。

您可以添加以下形式的约束:

\sum_{i : \hat{x}_i = 0} x_i + \sum_{i : \hat{x} = 1} (1-x_i) \geq 1

这个约束是一个无良切割的例子:解必须与 \hat{x} 相差至少一个索引 i,否则它是不可行的。如果您的变量不是二元的,则可能会更复杂一些。

您可以通过将约束作为一行附加到您的约束矩阵并使用 bintprog() 函数重新求解来为您的解决方案添加一个不利因素。我会把它留给你,让你用 MATLAB 符号重写它。

你没有说你的后处理是做什么的,但是如果后处理可以从你的解决方案 \hat{x} 推断出其他解决方案也是不可行的,并且你可以添加多个每次迭代的行。这是基于逻辑的 Benders 分解的一种形式,其他不可行解决方案的推理称为求解推理对偶(与标准 Benders 分解相反,您正在求解线性规划对偶)。 More on logic based Benders decomposition 来自创造这个词的人,CMU 的 John Hooker。

抱歉格式化。我得走了,但我以后会想办法更​​好地显示方程式。

【讨论】:

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