我的一些观察意见太久了,无法发表评论。这是一个摘要。
可以完全解决您的问题的任何算法都可以用来精确地解决线性程序(即,在Sariel的解决方案中使用的“强线性编程”,目前没有多项式时间算法)。
自然的跟进是如果近似解(即“弱线性编程”)可以提供一个解决方案。尽管答案是肯定的,但看来该程序的停止条件需要的数量据我所知无法在多项式时间内计算。(即,该算法找到了不错的方法,但是很难证明这一点。)我的主要建议是对“ϵ-“最佳解决方案”,在这种情况下,这种方法很容易解决。(这种策略有效地排除了多面体的细小表面。)
总的来说,在考虑您目前对问题的陈述时,我一直在考虑效率问题。但这有一个合理的直觉:我们要抛出的对象(顶点,面等)是离散的,并且呈指数级增长。
(1.) 假设我们有一种可以完全解决您的问题的算法。请注意,包含提供的中点的任何面的任何裸露点将是原始线性程序的精确解决方案。因此,请执行以下操作。添加一个新的线性约束,说原始目标值必须等于最优目标值(现在我们知道),并设置一个新的目标约束,以最大化解的第一个坐标。对每个维度重复一次此过程,每次添加一个约束并选择一个新坐标以最大化。此过程将每次减小解决方案的规模;必然,当过程完成时,我们有一个0维仿射集,意味着一个点。因此与O(d) 中点求解算法的迭代(并且仅将问题描述增加一个数量多项式, d每次),解决了强大的线性规划问题。这表明,尽管Sariel的解决方案需要强大的线性编程,但无法完全解决您的问题。(编辑:请注意,我的证明假设一个紧凑的多面体(多面体)作为输入;否则它必须更努力地找到顶点。)
(2.)这是一个迭代方案,在每次迭代中使用完整的凸凸求解器,其求解将收敛为中点解的温和概念。选择一个正但递减的惩罚参数序列{λi}∞i=1↓0; 使这些几何形状下降是合理的,即λi=2−i。现在,对于每个i,大约最小化凸函数
⟨c,x⟩−λi∑j=1mln(⟨aj,x⟩−b),
哪里 ⟨c,x⟩ 是您最初的目标,并且 j 范围超过 m原始约束,现在通过对数障碍放置在物镜中(请注意,这是标准的)。现在,如果我们考虑最小化多面体的面(最大尺寸),请注意λi 和宽容 τ对于凸选择黑盒子,您的最佳近似值将接近此面,但是障碍会将其推向尽可能远的其他约束。换句话说,λi 如果减小,则原始线性物镜最终将主导一些使您远离适当面孔的挑剔障碍,但不会影响使您远离其他边界(尤其是目标面孔的边界)的障碍。
在理想的世界中,我们会坐下来分析确定理想的价值 λ,或者至少是一个停止时间,因此您不必解决无限多个问题。不幸的是,这似乎很难。例如,一种想法是确定任何尺寸大于0的面的最小宽度;这是一个明确定义的最小化问题,具有正最优值,因为存在有限的多个面(并且相对于每个面计算宽度)。这样,我们可以设置λ很小,以至于障碍物的影响在每个面的中心都很小。不幸的是,可能存在成倍的面孔,因此计算此数量是胡说八道。
我能想到的所有停止条件都具有这些计算困难。(此外,可以再次使用许多方法将其变成强大的线性规划求解器。)
出于这个原因,我的建议是构造一个``ϵ-close最佳中点'',然后通过选择解决 λ 和您的凸选择黑匣子公差 τ适当地。我认为这是一个合理的选择,因为您可能真的不关心最多最多有最大宽度的脸ϵ。
(一些最终意见。)似乎“中点”的概念至关重要。Sasho的评论指出,质心(质心?)是一个非常困难的问题,而要找到最大的内接球则很容易。我上面建议的对数壁垒通常不会与这些中点概念中的任何一个保持一致。另一方面,对于障碍物和球,您可以得出从质心到脸部相对边界的距离的下限;也许这对您更有用?
最后,根据您的描述,我相信您是指“目标面”具有尽可能大的尺寸?这是明确定义的,但是对于所有可能的较小尺寸,也都有解决方案面。无论如何,Sariel的方法和上述障碍方法都将在最大范围内起作用。