在MATLAB上迭代使用bintprog

时间:2013-04-11 11:21:32

标签: matlab combinatorics linear-programming

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

考虑到bintprog的第一次调用给出了解决方案x,在某些后处理后没有充分解决物理问题,是否可以回忆bintprog并排除先前的解决方案x

1 个答案:

答案 0 :(得分:0)

你需要一个nogood cut。

假设您找到了一个解决方案\ 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表示法重写它。

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

抱歉格式化。我需要去,但我会找到一种更好地显示方程式的方法。