一种检测凸壳极限点的线性程序

时间:2016-11-14 17:11:04

标签: linear-programming convex-hull convex

我们如何制定一个线性程序,告诉我们是否有任意点x [j]∈X,其中X = {x1,...,xn}⊂Rn是X的凸包的极值点,是conv(X)?

根据这个线性程序的解决方案,我们应该能够声称“是的,x [j]是一个极端点”或“否”。

嗯,我脑子里想的是这样的:

{min: 0} s.t. x[ j ] = Σi ( a[ i ] * x[ i ] ); i ∈ {1, ... ,k}, ∀ j ∈ {1, ... ,k}

如果存在这样的[i],那意味着x [j]是其他x的线性组合,这似乎违反了极值点的定义。

但是,我认为这个LP并不涵盖整个背景。即,如果我们选择位于conv(X)内部的x [j](不在边缘上)并且不是其他的线性组合,该怎么办?然后该模型将导致错误的结果。在我看来,上面的模型会很好 iff 所选的x [j]位于conv(X)的边缘。

感谢。

1 个答案:

答案 0 :(得分:1)

你很亲密。当且仅当它可以被写为这些点的凸组合时,点属于convex hull of a finite set of points。此外,只有在没有其他两个点可以将其写为凸起的组合时,一个点才是一个极值点。

让兴趣点为x_k。然后,以下线性程序将完成这项工作:

enter image description here

其中x_ {ik}是要检查的点的i - 坐标(点k)。请注意,这一点应该是我们在等式右边所包含的点之一(即,问题总是至少有一个解决方案是lambda_k = 1而所有其他lambda都等于0.

如果这一点是一个极端点,那么你将得到的唯一解决方案是lambda_k = 1,其他lambdas = 0.否则,将弹出一个不同的解决方案(具有较小的lambda_k)。

(请注意,在您的问题描述中,点数和维度均为n),因此相应的索引(j和i)从1运行到n。< / p>

我希望这有帮助!