最大超体积单纯形的算法

时间:2014-06-17 16:08:20

标签: algorithm math geometry computational-geometry

给出 D 维空间中的一组点。找到最大可能 D -simplex的最佳算法是什么,其中所有顶点都在集合中?在代数上,它意味着我们必须找到 D + 1 点的子集,例如 D * D 矩阵的行列式,从行构造为第一个坐标的每个坐标的增量< strong> D 点和最后 D + 1 -st点,在集合上具有最大可能值(绝对值)。

我确定,所有 D + 1 所需的点都是给定点集的凸包顶点,但我需要算法,它不使用任何凸包算法,因为它们需要单纯形反过来,这些算法也需要启动polytope。

如果不可能在小于指数时间内获得单纯形,那么算法是什么,它给出了近似解决问题的可调比率运行时间/近似精度? / p>

3 个答案:

答案 0 :(得分:1)

我无法想到一个确切的解决方案,但你可以用迭代方法得到一个合理的近似值。请注意,我假设此N大于D+1;如果没有,那么我误解了这个问题。

首先,使用贪婪算法构造初始单纯形;选择前两个顶点作为两个最远点,下一个顶点最大化你的尺寸测量二维,接下来最大化它三个,依此类推。这在ND中具有多项式复杂度 你有一个初始的单纯形,你可以切换到迭代改进。例如,对于单形中的给定顶点,您可以迭代不在其中的点,测量大小度量的变化,如果您交换它们将导致这些变化。最后,你将它换成最大增量的那个(如果有的话)。对单纯形中的每个顶点执行一次此操作在ND中也是多项式。
为了在运行时成本和得到的单一数据的大小之间进行权衡,只需选择您愿意执行此操作的次数。

现在这是一个相对粗糙的本地优化算法,因此不能保证它会找到最大单纯形。然而,已经发现这样的方法导致对诸如旅行推销员问题的解决方案的相当好的近似,在某种意义上,虽然它们不是最优的,但是它们导致的距离不会大于在大多数情况下,实际的解决方案。

答案 1 :(得分:1)

Quickhull不需要找到最大单纯形,这是一种过度杀伤(问题太难了,并且不能保证接下来的步骤会更快)。

我建议您选择 D + 1 独立方向,并在每个方向上取最远点。这将为您提供良好的单一起始时间O(N.D²)。 (是因为有D+1方向,并且方向上距离的评估需要D次操作。)

无论如何要小心它可以退化(几个顶点是相同的)。

答案 2 :(得分:0)

我自己对解决方案的近似是采取一点,从中计算最低点并拒绝第一点(选择完全N=1点),然后以这种方式选择其他D - 1点,即非每个N - 1的定向N - 维度超体积(formula for S) - 点选择是最大的。最后,我发现N = D + 1'指向它的方式,定义的单纯形的面向D维度超体积(formula for V)的绝对值最大。我的总体复杂性是关于O(D * N * D^3)(单1...D + 1个顶点,N...N - D - 1剩余点,D^3D * M, M in {1,2,...,D}矩阵乘法复杂度的上估计值。该方法允许我们找到适当数量的线性独立点,或者找到子空间的维度以及子空间的非标准化和非正交基础。对于大量的点和大的维度,所提出的算法的复杂性并不比 quickhull 算法的复杂性占主导地位。

The implementation's repository