我设法用二元变量将问题建模为LP问题并解决它(使用PuLP和GLPK)。我相信我在某个地方读到你可以“将你的解决方案添加为新的约束”,以使解算器能够提出替代解决方案。不幸的是我无法找到我读到的地方,我无法看到如何“添加解决方案”以防止求解器提出以前的解决方案。如果我读的是正确的,有人可以解释一下如何做到这一点吗?
我是LP的新手。我已经搜索了答案,但很可能我失败了,因为我不知道正确的搜索条件。我知道通常枚举解决方案空间是不可行的,因为空间非常大。我只是想知道如何“添加解决方案”以防止解算器再次找到它。
答案 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。