首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SLSQP优化算法是如何工作的?

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

Stack Overflow用户
提问于 2020-01-19 16:44:19
回答 1查看 6.2K关注 0票数 4

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

另外,当我读到SLSQP方法时,二阶导数也是必需的。然而,我看不到它是经过计算的。让我给出一个输出的例子:

代码语言:javascript
运行
复制
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

下一次迭代恰好是:

代码语言:javascript
运行
复制
x = 5.99
y = -8.01
f = -25.9597

然后从这一点再次进行两次有限差分计算,得到: df/dx = 2.02,df/dy = 2.02

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

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

我希望有人能给我解释,或者给出一个有用的资源来准确地使用算法,或者给出任何可以用来更好地理解它的提示。非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-10-04 23:53:07

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59808494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档