【发布时间】:2021-07-08 13:25:40
【问题描述】:
脚本的要点可在此处获得: https://gist.github.com/eufren/3f53eb285c7f426e678e1d63926fb34a
当我使用p.check_totals() 时,总导数似乎基本正确 - 典型的相对差异约为 1e-5,最大为 1e-2。
它不是从起始平面平滑变形到优化平面(正如我对基于梯度的优化所期望的那样),而是捕捉到弦的最小允许值,然后在发展奇怪的同时采取奇怪的翼展脉冲路径沿着翼展的尖刺。最后,它会像我预期的那样顺利地转变为最终配置。
如何诊断这种异常优化的原因?是因为最初的设计违反了约束吗?是否可以降低 SLSQP 的步长以防止立即捕捉到最小界限?
编辑 1: 根据 Justin 的回复,我只制作了主要迭代的动画。
它看起来略微平滑,翼展的弹跳较少。
【问题讨论】:
-
我认为 SLSQP 在迭代到最终解决方案期间不尊重界限。我很想知道 IPOPT 做了哪些尊重他们的事情。确实所有这些优化器都需要手动调整,而要调整哪个参数是猜测,除非您非常熟悉其背后的数学原理
-
来自 scipy 的 SLSQP 确实尊重界限。 SLSQP 形式 pyoptsparse 没有(它的旧版本的 fortran 没有该功能)
标签: optimization openmdao