openmdao:如何为设计变量的矢量输入计算 'rel' 步长?
openmdao: how is the 'rel' step size calculated for a vector input of design variables?
我目前正在使用高保真流解算器 (SU2) 在 OpenMDAO 中测试基于梯度的优化,但我使用的形状参数化方法似乎对有限差分近似的步长高度敏感。这可能是由于 objective 函数对某些设计变量比其他设计变量更敏感,因此我一直使用相对步长而不是绝对步长。但是,我希望步长与向量中的每个设计变量相关,但对于将恒定步长应用于所有设计变量的情况,情况似乎并非如此。
例如,1e-5
的相对步长产生了 4.2e-5
(常数)的实际步长,其中包含 28 个大小不同的设计变量向量。
即 design_variables = [0, 1e-2, 1e-1...]
问题:如何计算大小不同且包含零的设计变量向量的相对步长?
注意:设计变量按比例缩放(相等)并共享相同的 (%) 上限和下限。此外,这个数字似乎确实随着下限和上限而变化?
更新:问题在查看 finite_difference.py
脚本后部分解决。取输入的范数并乘以步长。然而,代码表明 (step *= scale
) 缩放值也是一个标量,因此在所有设计变量中都是常数,这是正确的吗?
是的,这就是向量步长的计算方式——对于相对有限差分步进,步长按向量的范数缩放。但是,您提出了一个很好的观点,即一个向量的元素可能具有截然不同的大小,因此我们可能需要添加对指定 fd 步长向量的支持。
我目前正在使用高保真流解算器 (SU2) 在 OpenMDAO 中测试基于梯度的优化,但我使用的形状参数化方法似乎对有限差分近似的步长高度敏感。这可能是由于 objective 函数对某些设计变量比其他设计变量更敏感,因此我一直使用相对步长而不是绝对步长。但是,我希望步长与向量中的每个设计变量相关,但对于将恒定步长应用于所有设计变量的情况,情况似乎并非如此。
例如,1e-5
的相对步长产生了 4.2e-5
(常数)的实际步长,其中包含 28 个大小不同的设计变量向量。
即 design_variables = [0, 1e-2, 1e-1...]
问题:如何计算大小不同且包含零的设计变量向量的相对步长?
注意:设计变量按比例缩放(相等)并共享相同的 (%) 上限和下限。此外,这个数字似乎确实随着下限和上限而变化?
更新:问题在查看 finite_difference.py
脚本后部分解决。取输入的范数并乘以步长。然而,代码表明 (step *= scale
) 缩放值也是一个标量,因此在所有设计变量中都是常数,这是正确的吗?
是的,这就是向量步长的计算方式——对于相对有限差分步进,步长按向量的范数缩放。但是,您提出了一个很好的观点,即一个向量的元素可能具有截然不同的大小,因此我们可能需要添加对指定 fd 步长向量的支持。