【问题标题】:Linear Programming: Find all optimal vertices线性规划:找到所有最优顶点
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢!我们将尝试这种方法 :) 看起来很简单,很好奇我们会找到多少 bfs!
  • 现在我正在尝试实施这样的方案,我不太确定我是否完全明白你在说什么;我们是否必须假设我们的解决方案是 0-1 整数解决方案?还是我们使用 0-1 整数来跟踪我们已经知道的基本可行点?
  • 是什么让你相信 x 的解值只能是 0-1?
  • 这不是我所相信的。然而,当我看到link 时,我被引导相信这应该是这种情况。我不确定哪种削减适合我提出的问题。
  • 在简单的情况下,我可以假设我的变量 Q[i] 在极值点上为 0-1,我可以将此信息提供给我的求解器。在这种情况下,您提出的削减: sum_{i s.t. knownP[i] = 1} Q[i}
【解决方案2】:

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

【讨论】:

  • 您是否知道 Polyhedra.jl + cdd 的最小工作示例?我在文档中找不到有关如何使用多面体的任何信息。
  • 我建议在相应的存储库上打开一个问题。
【解决方案3】:

我不知道 julia,但是有一个名为 PPL 的工具,您可以在求解线性规划后使用它来确定解多面体的所有顶点。

在此处查看我对类似问题的回答: Find all alternative basic solutions using existing linear-programming tool.

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多