添加解决方案作为约束来枚举线性编程问题的解决方案

时间:2016-06-12 09:25:15

标签: enumeration linear-programming

我设法用二元变量将问题建模为LP问题并解决它(使用PuLP和GLPK)。我相信我在某个地方读到你可以“将你的解决方案添加为新的约束”,以使解算器能够提出替代解决方案。不幸的是我无法找到我读到的地方,我无法看到如何“添加解决方案”以防止求解器提出以前的解决方案。如果我读的是正确的,有人可以解释一下如何做到这一点吗?

我是LP的新手。我已经搜索了答案,但很可能我失败了,因为我不知道正确的搜索条件。我知道通常枚举解决方案空间是不可行的,因为空间非常大。我只是想知道如何“添加解决方案”以防止解算器再次找到它。

2 个答案:

答案 0 :(得分:0)

您可以为您的问题添加一个客观截止值,这将使您之前的解决方案不可行,但这很可能会切断其他解决方案 - 尤其是对于退化问题。

This是一个密切相关的问题,可能会有所帮助。请参阅我的答案,了解如何添加目标截止值。

答案 1 :(得分:0)

具有二进制变量的LP不再是LP(而是MIP)。禁止先前找到的整数解x*(i)的约束可以表述如下。

  • P subset of I为与x*(i)=1的索引对应的集合。
  • Q subset of I成为与x*(i)=0
  • 的索引相对应的集合

显然P+Q=I。将以下约束添加到模型中:

sum(i in P, x(i)) - sum(i in Q, x(i)) <= p - 1

其中p是集P的基数(元素数)。该约束的推导是here