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

Optimization SLSQP优化算法是如何工作的?,optimization,scipy,mathematical-optimization,openmdao,scipy-optimize,Optimization,Scipy,Mathematical Optimization,Openmdao,Scipy Optimize,我在openMDAO中使用SLSQP算法,但我很难理解它实际上是如何工作的。我只是在看一个普通抛物面的例子,它有两个设计变量,目的是在没有任何约束的情况下最小化f。通过为每次迭代打印出x、y和f的值(迭代可能不是正确的词),我可以看到,偶尔对每个设计变量(x、y)使用正向有限差分法计算一阶导数。然后用这些导数来求下一个x和y值,但是我看不到模式 另外,当我读到SLSQP方法时,二阶导数也是必需的。不过,我看不出这是经过计算的。 让我举一个我的输出的例子: iteration 1: x = 0 y

我在openMDAO中使用SLSQP算法,但我很难理解它实际上是如何工作的。我只是在看一个普通抛物面的例子,它有两个设计变量,目的是在没有任何约束的情况下最小化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
从最后两次迭代中,我们可以计算出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 我不知道如何获得这些值

此外,有时甚至在不计算该点的导数的情况下,就采取了一大步。可能是因为前一步太大,导致函数偏离最小值


我希望有人能给我解释一下,或者给我一个有用的关于所使用的精确算法的来源,或者给我一些可以用来更好地理解它的提示。非常感谢

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

您能提供您正在使用的代码吗?确切的算法在论文
Kraft,Dieter中解释。“序列二次规划的软件包”,Forschungsbericht-Deutsche Forschungs-und Versuchsanstalt fur Luft-und Raumfahrt(1988)
,但可能很难获得。对于更一般的治疗,
Nocedal、Jorge和Stephen J.Wright。《序列二次规划》,《数值优化》(2006):529-562.
应该会有所帮助。代码本身就来自于,它还有一个额外的问题,这个问题很好,但是社区不是更合适的地方吗?