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

Julia 线性规划:找到所有最优顶点,julia,linear-programming,julia-jump,Julia,Linear Programming,Julia 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 注:我们可以将优化表述为线性规划,目标为 m

我想知道是否有一种很好的方法(最好使用跳跃)来获得线性规划的所有最优解(如果有多个最优解)

一个例子

最小化两个概率分布之间的统计距离(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, 这两个解的任何凸组合都是最优的

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

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


到目前为止,我试图找到最佳的p,Q对(参考我给出的例子),方法是使算法有利于缩小p[I],Q[I]之间的距离,在总和中给这个项加上1.001的权重。它似乎在某种程度上起作用,尽管我很难确定。

我不知道julia的情况,但有一个工具,叫做它,你可以在解线性规划后,用它来确定解的所有顶点

请参见我对类似问题的回答:
.

LP解算器的设计不是为了枚举所有最优解。一旦知道了最佳目标值,就可以定义包含所有最优解的多面体,然后使用顶点枚举算法来收集该多面体可能非常大的极值集。所有最优解都是这些极值点的凸组合。从Julia开始,您可以使用for。

有一种有趣的方法,可以使用标准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 

有关示例,请参见

您可能可以求解LP,然后尝试最大化Bhattacharyya系数,给定您求解的LP的目标函数值。即使您有所有的最优解(顶点),也不清楚如何找到基础多面体的最优面,以及如何执行搜索(在这些面上)以最大化Bhattacharyya系数。如果最优解位于“中间”,这可能是因为函数是凹的,那么最优顶点本身就没有什么用处;在您的线性程序中,必须对目标函数的每个项分解绝对值,即
min sum A[i]
服从
A[i]>=P[i]-Q[i]
A[i]>=Q[i]-P[i]
对于每个
1,我纠正了错误,谢谢;-)请注意,可能有大量的顶点:例如,是具有2^D顶点的D x D LP。然而,我不知道有多少人可以拥有相同的c。谢谢你!我们将尝试这种方法:)似乎非常简单,好奇我们将找到多少BF!现在我正试图实施这样一个计划,我不太确定我是否完全明白你说的话;我们是否必须假设我们的解是0-1整数解?或者我们使用0-1整数来跟踪我们已经知道的基本可行点?是什么让你相信x的解的值只能是0-1?我不这么认为。然而,我被引导去相信,当我看到这一点时,情况应该是这样的。我不确定我提出的问题适合哪种类型的切割。在简单的情况下,我可以假设我的变量Q[I]在极值点上为0-1,我可以将此信息提供给我的解算器。在这种情况下,您提出的削减:sum_{i s.t.knownP[i]=1}Q[i}您是否知道Polyhedra.jl+cdd的最小工作示例?我在文档中找不到任何关于如何使用Polyhedra的内容。我建议在相应的存储库中打开一个问题。