迭代地找到线性/二进制编程问题的最佳k解

时间:2017-04-11 21:15:09

标签: r mathematical-optimization linear-programming lpsolve integer-programming

我正在解决最大化二进制编程问题(二进制编程与整数编程相同,但解决方案是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的关系图:

enter image description here

我想知道:lpSolve有问题吗?我的脚本有问题吗?客观函数值是否应该单调递减或者我的理解是否有偏差?

更新:我设法在R,lpSolveAPI的另一个lpSolve接口中复制所描述的过程,并按预期获得单调递减的图形。所以我认为lpSolve是有问题的。

0 个答案:

没有答案