【发布时间】:2016-04-02 18:03:26
【问题描述】:
我想知道是否有一种很好的方法(最好使用 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(凹函数)的点位于静态距离的最佳子空间的中间。
到目前为止,我已经尝试通过添加 1.001 的权重来使算法有利于最小化 P[i],Q[i] 之间的距离,从而找到最优的 P、Q 对(参考我给出的示例)总和中的术语。它似乎在某种程度上起作用,虽然我很难确定。
【问题讨论】:
-
您可能可以求解 LP,然后在给定您求解的 LP 的目标函数值的情况下尝试最大化 Bhattacharyya 系数。即使您拥有所有最佳解决方案(顶点),也不清楚您将如何找到底层多面体的最佳面,以及如何执行搜索(在这些面上)以最大化 Bhattacharyya 系数。如果最优解位于“中间”,这可能是因为函数是凹的,那么最优顶点本身就没有什么用处。
-
我试图直接编辑问题,但显然我不能;在您的线性程序中,必须对目标函数的每个项分解绝对值,即
min sum A[i]服从A[i] >= P[i] - Q[i]和A[i] >= Q[i] - P[i]对于每个1 <= i <= 4 -
我修正了错误,谢谢;-)
-
请注意,可能存在大量顶点:例如,Klee-Minty cube 是具有 2^D 顶点的 D x D LP。但是我不知道有多少人可以拥有相同的 c 。 x .
标签: julia linear-programming julia-jump