我们有一个问题表述,如this link所示。
考虑到bintprog
的第一次调用给出了解决方案x
,在某些后处理后没有充分解决物理问题,是否可以回忆bintprog
并排除先前的解决方案x
?
答案 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。
抱歉格式化。我需要去,但我会找到一种更好地显示方程式的方法。