所以我将代码从旧的 OpenMDAO 转换为新的 OpenMDAO。所有输出和部分梯度已被验证为正确。起初这个问题根本没有优化,然后我意识到旧代码有一些不提供梯度的组件,所以它们是自动有限差分的。所以我在这些组件中添加了 fd_options['force_fd'] = True ,但它仍然没有优化到正确的值。我检查了总导数,它仍然不正确。与旧的 OpenMDAO 相比,每次迭代也需要更长的时间。我可以让我的新代码优化到与旧 OpenMDAO 代码相同的值的唯一方法是将每个组件设置为有限差分,即使在提供渐变的组件上也是如此。
- 当旧的 OpenMDAO 进行自动有限差分时,它是只对优化所需的输出和输入进行计算,还是计算所有输入和输出的整个雅可比行列式?当您将“force_fd”设置为 True 时,新的 OpenMDAO 也会出现同样的问题。
- 您能否提供组件的雅可比行列式的某些部分,并使其其余部分具有有限差分?在旧的 OpenMDAO 中,除非您输入 missing_deriv_policy = 'assume_zero',否则没有提供任何梯度的有限差分吗?