Jer*_*oen 6 optimization mathematical-optimization scipy openmdao scipy-optimize
我在 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
Run Code Online (Sandbox Code Playgroud)
从最后 2 次迭代中,我们可以计算出 df/dx = 5.99 , df/dy = -8.01
下一次迭代恰好是:
x = 5.99
y = -8.01
f = -25.9597
Run Code Online (Sandbox Code Playgroud)
然后从这一点再次进行两次有限差分计算找到: df/dx = 2.02 , df/dy = 2.02
然后下一次迭代有变量: x = 8.372726,y = -6.66007 我不知道如何获取这些值。
此外,有时甚至在没有计算此时的导数的情况下就迈出了一大步。可能是因为上一步太大导致函数偏离最小值。
我希望有人可以向我解释或提供所使用的确切算法的有用来源,或提供可用于更好地理解它的任何提示。多谢!
小智 3
Dieter Kraft 描述的算法是一种应用于由损失函数以及等式和不等式约束组成的拉格朗日函数的拟牛顿方法(使用 BFGS)。因为在每次迭代中,一些不等式约束处于活动状态,而另一些不处于活动状态,因此下一次迭代将忽略不活动的不等式。使用拉格朗日函数中的约束的活动子集在每个步骤中求解等式约束问题。
| 归档时间: |
|
| 查看次数: |
21276 次 |
| 最近记录: |