微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 SLSQP 采取了如此不同寻常的优化路线?

如何解决为什么 SLSQP 采取了如此不同寻常的优化路线?

脚本的要点可在此处获得: https://gist.github.com/eufren/3f53eb285c7f426e678e1d63926fb34a

当我使用 p.check_totals() 时,总导数似乎基本正确 - 典型的相对差异约为 1e-5,最大值为 1e-2。

这是SLSQP下优化过程的动画:

enter image description here

不是从起始平面平滑变形到优化平面(正如我对基于梯度的优化所期望的那样),它捕捉到弦的最小允许值,然后在发展奇怪的同时采取脉冲翼展的奇怪路径沿翼展的尖刺。最后,它如我所料,顺利变成了最终配置。

我如何诊断这种异常优化的原因?是否是由初始设计违反约束引起的?是否可以降低 SLSQP 的步长以防止立即捕捉到最小边界?

编辑 1: 根据贾斯汀的回复,我只制作了主要迭代的动画。

enter image description here

它看起来稍微平滑一些,翼展的弹跳更少。

解决方法

您提供的要点无法运行,因此很难给出明确的答案。我们可以看到您的初始条件很远,尽管仅从开始和最佳计划之间的差异来看。这意味着在您的初始条件下梯度可能非常陡峭,这将导致一些大的初始步骤(SQP 方法的前几个步骤非常接近梯度下降)。

认为你的直觉是它应该平稳地接近最小值,这通常并不正确。拟牛顿方法的初始步长高度依赖于缩放和初始猜测。此外,您必须考虑约束和线搜索效果。所有这些也与拟牛顿黑森近似有关。因此,您看到的抖动是所有这些的集合。

您可以尝试的一件事是过滤掉线搜索步骤,只查看“主要迭代”。过滤掉线搜索比听起来更难,因为优化器实际上并没有告诉您哪些情况是线搜索,哪些情况是主要的。通过查看来自驱动程序的案例记录器数据,启用 record_derivatives 选项,可以实现非常好的近似。任何具有与其相关联的导数的情况(并非所有人都会!)是一个主要的迭代。没有它的任何一个都是行搜索。如果您只绘制主要迭代的 opt-history-plot,它看起来会平滑得多。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。