OpenMDAO v0.13:约束和目标的梯度

OpenMDAO v0.13: Gradients of constraints and objectives

我在进行大规模优化时遇到了收敛问题,我认为这个问题可能与我声明 objective 的方式以及与各个组件提供的梯度相关的约束有关。

有没有办法为按以下方式定义的约束或 objective 提供梯度(在 constraint/objective 语句中使用数学):self.driver.add_constraint('separation/10 > %s/10' % minimum_distance) 当组件仅提供separation 的梯度,而不是 separation/10.

我的第一个想法是将它设为 10. 而不是 10 以避免任何整数除法的机会。此外,您应该将 %s 替换为 %f。 %s 用于字符串。

OpenMDAO 使用复杂的步骤来计算这些类型的字符串定义函数的导数。它应该得到正确的导数值,但我不知道 minimum_distance 的值恰好是什么。如果它恰好是一个整数,或者如果 %s 把复杂的步骤搞砸了(字符串的复杂部分到底代表什么?)

所以先看看那个。 SNOPT,我假设你是通过 pyoptsparse 使用的,它有一个梯度检查器。如果您担心渐变,您可能会考虑将其打开。

顺便说一句,在 OpenMDAO 1.0 中,我们将改变处理约束的方式。不是提供这样的字符串,而是计算变量 separation 的值,然后调用

driver.add_constraint('separation', lower=minimum_distance/10., scaler=1/10.)