在 OpenMDAO 中,为什么删除“松散”约束可能会使 check_totals 给出“不正确”的答案

问题描述

我有一个包含 11 个设计变量和 9 个约束的模型。我已经运行了 check_partials 并且我对解析导数是正确的感到满意。当我运行 check_totals(或运行 openmdao scaling 脚本)时,我看到 Jacobian 的某些行具有异常大的值(10^13 阶)并且不同意有限差分结果(它们是顺序 1).

我可以通过删除设计变量或添加新约束来“修复”这个问题,即使约束非常“松散”,以至于它永远无法接近边界。然后有限差分和解析导数一致(并且是 1 阶)。 我放弃哪个设计变量似乎并不重要;当我有 10 个设计变量和 9 个约束时,结果是一样的。 同样,我向哪个输出变量添加约束似乎并不重要;当我有 11 个设计变量和 10 个约束时,结果是一样的。

我不认为这是特定驱动程序的结果:我已经在 pyOptSparseDriverIPOPT 以及 ScipyOptimizeDriverSLSQP 中尝试了这一点,并且行为是一样的。

虽然目前我不确定这种行为对我来说是否是一个限制因素,但它确实看起来很奇怪并且可能有害。 这是否表明存在错误、可以通过正确设置修复的行为,或者线性代数的简单结果?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...