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