线性规划:找到所有最佳顶点

时间:2016-04-02 18:03:27

标签: julia linear-programming julia-jump

我想知道是否有一种很好的方式(最好使用JuMP)来获得线性程序的所有最佳解决方案(如果有多个最佳解决方案)。

一个例子

最小化两个概率分布之间的统计距离(Kolmogorov距离)。

min sum_{i=1}^{4} |P[i] - Q[i]| over free variable Q
P = [0.25,0.25,0.25,0.25]
sum_i P[i] = 1
Q[1] + Q[4] = 1
sum_i Q[i] = 1 -> Q[2],Q[3] = 0

注意我们可以将优化表示为线性程序,目标变为

min S >= sum_i S[i]
S[i] >= P[i]-Q[i]
S[i] >= Q[i]-P[i]

此问题没有唯一解决方案,而是最佳解决方案的子空间跨越

Q1 = [0.75,0,0,0.25]
Q2 = [0.25,0,0,0.75]

两者的最小距离均为0.5, 这两种解决方案的任何凸组合都是最优的。

我想知道是否有一种很好的方法可以找到所有这些最佳极值点(跨越最佳子空间的点)?

为什么我对此感兴趣;给出最大Bhattacharyya coefficient(凹函数)的点位于静态距离的最佳子空间的中间。

到目前为止,我试图找到最佳的P,Q对(参考我给出的例子),通过使算法有利于通过向此增加1.001的权重来缩小P [i],Q [i]之间的距离。总和中的期限。它似乎在某种程度上起作用,虽然我几乎无法确定。

3 个答案:

答案 0 :(得分:4)

有一种有趣的方法可以使用标准MIP求解器枚举所有可能的最佳LP解决方案(或者更确切地说,所有最佳LP基础)。基本上算法是:

step 1. solve LP/MIP
step 2. if infeasible or if objective starts to deteriorate: stop
step 3. add cuts (constraints) to the model to forbid current optimal solution
step 4. goto step 1 

有关示例,请参阅here

答案 1 :(得分:3)

LP解算器并非旨在枚举所有最佳解决方案。一旦知道最佳目标值,就可以定义包含所有最优解的多面体,然后使用顶点枚举算法来收集该多面体可能非常大的极值点集。所有最优解都是这些极值点的凸组合。来自Julia,您可以将wrapper用于cdd

答案 2 :(得分:2)

我不知道julia,但是有一个名为PPL的工具可以用来确定解决线性程序后解决方案polyedron的所有顶点。

在这里看到我的回答类似的问题: Find all alternative basic solutions using existing linear-programming tool