如何智能地尝试排除凸性?

计算科学 凸优化
2021-12-07 07:09:43

我想最小化一个复杂的目标函数,我不确定它是否是凸的。是否有一个很好的算法试图证明它不是凸的?当然算法可能无法证明这一点,在这种情况下我不知道它是否是凸的,这没关系;我只是想在花费大量时间尝试分析确定目标函数是否是凸的之前尝试排除凸性,例如通过尝试以已知为凸的标准形式重写问题。一种快速测试是尝试从各种起点最小化,如果以这种方式找到多个局部最小值,则它不是凸的。但我想知道是否有更好的算法是为了这个目标而设计的。

3个回答

对于所有的\ alpha定义域中的您可以简单地尝试为大量对和几个值验证此公式,例如f(αx+(1α)y)αf(x)+(1α)f(y)α(0,1)x,yx,yαα={1/4,1/2,3/4}

对于一些实际有用的凸性/非凸性验证测试,请参阅(自我免责声明,我是本文的第三作者):

R. Fourer、C. Maheshwari、A. Neumaier、D. Orban 和 H. Schichl,计算图中的凸性和凹性检测。凸性评估的树行走,INFORMS J. Computing 22 (2010), 26-43。

请注意,有许多函数在感兴趣的域中是凸的,但不容易被“训练”,即以结构化凸求解器(如CVX )所需的一种形式编写。

一个函数可以是非凸的,没有多个最小值。有多种优化方法可以应用(线性或非线性)共轭梯度迭代,在计算负算子范数时会被截断。负值表示负曲率的方向(凸泛函不会发生)。如果很少遇到负曲率,这些方法会在少量优化迭代中收敛。(如果有一个质量预条件子可用,内部步骤也应该快速收敛。)