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 优化算法是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章