我正在解决最大化二进制编程问题(二进制编程与整数编程相同,但解决方案是0和1的向量)。我想找到最好的10种解决方案。我并不是指所有10个目标函数值必然相等的最佳10个解决方案 - 而是:我希望第一个解决方案是具有给定约束的最优解决方案;如果排除第一个解决方案,我希望第二个解决方案是最优的;如果排除第一和第二种解决方案,第三种解决方案必须是最优的,等等。
我在R中使用lpSolve包,它只提供单一的最佳解决方案。所以我写了一个脚本,试图迭代地找到最佳的k解决方案如下:
for (j going from 1 to k){
(1) given the set of constraints, find the best solution, and record it
(2) add a new constraint (such that the solution found in (1) is invalid) to the set of constraints
}
我的脚本重复(1)
和(2)
k次,并报告k个解决方案以及每个k解决方案的目标函数值。
现在,这是我的问题: 根据我的理解,对于最大化问题,第j个解决方案必须始终具有小于或等于第(j-1)个解决方案的客观值(对吗?),即客观值必须单调递减因为第j个解决方案和第(j-1)个解决方案满足所有相同的约束,除了第j个解决方案必须满足第(j-1)个解决方案不一定满足的一个附加约束。 / p>
然而,我的脚本不是这种情况。肯定存在下降趋势,但客观价值并非单调递减。下面是客观值与k的关系图:
我想知道:lpSolve有问题吗?我的脚本有问题吗?客观函数值是否应该单调递减或者我的理解是否有偏差?
更新:我设法在R,lpSolveAPI的另一个lpSolve接口中复制所描述的过程,并按预期获得单调递减的图形。所以我认为lpSolve是有问题的。