在具有多个参数的标量函数中寻找鞍点

计算科学 优化 朱莉娅
2021-11-29 14:31:26

我有一个真正有价值的功能,我们称之为f(x,y),我想最大化xRd并将其最小化yRq. 过了一会儿,我意识到我正在寻找一个鞍点的解决方案。我对这类问题没有经验。

谁能告诉我有什么算法可以处理这些问题?我在 Julia 工作,所以如果有人知道 Julia 中的一些实现,这将进一步帮助我。

注意:这最初是在 CrossValidated 论坛上发布的,但有人建议我把它移到这里。

1个回答

这取决于是否f是可微分的xy,以及函数在x/y. 在最简单的情况下,您可以只写下必要的最优条件

(xf(x¯,y¯)yf(x¯,y¯))=(00)
对于鞍点(x¯,y¯), 在哪里xf(x,y)Rd是相对于的梯度x等,并将牛顿方法应用于该非线性方程组。

或者,您可以使用迭代方法(各种称为ascent-descentArrow--Hurwicz交替方向方法):x0,y0并设置

xk+1=xk+αkxf(xk,yk)yk+1=ykαkyf(xk,yk)
选择合适的步长αk>0. 有多种版本使用xk+1代替xk在更新中y或者(在重新排序迭代之后)反之亦然,或者包括一个外推步骤。

如果f不可微分但凸/凹,通过使用近端映射而不是梯度可以实现类似的方法;目前最广泛使用的特殊情况的方法f(x,y)=g(x)+h(y)原始对偶混合梯度方法的名称而闻名(或者通常,在提出它的论文的作者之后,Chambolle--Pock 方法)。

所有这些在 Matlab 中实现都相当简单(因此很容易移植到 Python 或 Julia)。

编辑:我应该指出,与非线性优化相比,没有找到非凸可微函数鞍点的一般理论(据我和谷歌所知);我熟悉的所有作品都假设凸面/凹面或非常具体的结构f(例如,作为凸函数的差异或来自约束优化问题的拉格朗日)。以上只是对这些论文中使用的两类粗略方法的描述。