SLSQP 优化算法是如何工作的?

Posted

技术标签:

【中文标题】SLSQP 优化算法是如何工作的?【英文标题】:How does the SLSQP optimization algorithm work? 【发布时间】:2020-05-05 14:08:47 【问题描述】:

我在 openMDAO 中使用 SLSQP 算法,但我无法理解它的实际工作原理。我只是在看常见的抛物面示例,它有 2 个设计变量,旨在最小化 f,没有任何约束。通过打印每次迭代的 x、y 和 f 的值(迭代可能不是正确的词),我可以看到有时使用每个设计变量 (x, y) 的前向有限差​​分来评估一阶导数。然后使用这些导数来查找下一个 x 和 y 值,但是我看不到模式。

此外,当我阅读 SLSQP 方法时,还需要二阶导数。但是,我没有看到它被计算出来。 让我举一个输出的例子:

iteration 1:
x = 0
y = 0
f = 22

iteration 2:
x = 0.01
y = 0
f = 21.9401

iteration 3:
x = 0
y = 0.01
f = 22.0801

从这最后 2 次迭代中,我们可以计算出 df/dx = 5.99 , df/dy = -8.01

下一次迭代恰好是:

x = 5.99
y = -8.01
f = -25.9597

然后从这个点再次计算两个有限差分:df/dx = 2.02 , df/dy = 2.02

那么下一次迭代有变量:x = 8.372726, y = -6.66007 而且我不知道如何获得这些值。

此外,有时甚至不计算此时的导数就迈出了一大步。可能是因为上一步太大导致函数偏离最小值。

我希望有人可以向我解释或为所使用的确切算法提供有用的资源,或提供任何可用于更好地理解它的提示。非常感谢!

【问题讨论】:

你能提供你正在使用的代码吗? 论文Kraft, Dieter. "A software package for sequential quadratic programming." Forschungsbericht- Deutsche Forschungs- und Versuchsanstalt fur Luft- und Raumfahrt (1988).中解释了确切的算法,但可能很难获得。对于更一般的治疗,Nocedal, Jorge, and Stephen J. Wright. "Sequential quadratic programming." Numerical optimization (2006): 529-562. 应该会有所帮助。代码本身来自toms-733,其中多了一个source 这个问题很好,但math.stackexchange.com 社区不是更合适的地方吗? 【参考方案1】:

Dieter Kraft 描述的算法是一种准牛顿法(使用 BFGS),应用于由损失函数和等式和不等式约束组成的拉格朗日函数。因为在每次迭代中,一些不等式约束是有效的,有些则不是,所以在下一次迭代中忽略不活跃的不等式。使用拉格朗日函数中的活动约束子集在每一步求解等式约束问题。

【讨论】:

以上是关于SLSQP 优化算法是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

漫画:如何优化 “字符串匹配算法”?

几种常见的优化算法

最优化算法——常见优化算法分类及总结

几种常见的优化算法

搜索引擎对SEO优化工作排名算法及影响因素的现状分析

sci-kit learn 库中算法的参数是如何优化的?