python - openmdao:如何为设计变量的向量输入计算“rel”步长?
问题描述
我目前正在使用高保真流动求解器 (SU2) 在 OpenMDAO 中测试基于梯度的优化,但我使用的形状参数化方法似乎对有限差分近似的步长高度敏感。这可能是由于目标函数对某些设计变量比其他变量更敏感,因此我一直使用相对步长而不是绝对步长。但是,我希望步长与向量中的每个设计变量相关,但对于所有设计变量应用恒定步长,情况似乎并非如此。
例如,相对步长1e-5
产生的实际步长为4.2e-5
(常数),向量包含 28 个大小不同的设计变量。IEdesign_variables = [0, 1e-2, 1e-1...]
问题:对于大小不同且包含零的设计变量向量,如何计算相对步长?
注意:设计变量按比例(相等)并共享相同的 (%) 上限和下限。此外,这个数字似乎会随着下限和上限的变化而变化?
更新:查看finite_difference.py
脚本后问题部分解决。取输入的范数并乘以步长。但是,代码表明 ( step *= scale
) 缩放值也是一个标量,因此在所有设计变量中都是恒定的,这是正确的吗?
解决方案
是的,这就是向量的步长计算方式——对于相对有限差分步进,步长由向量的范数缩放。但是,您提出了一个很好的观点,即向量可能在其元素中具有截然不同的大小,因此也许我们需要添加对指定 fd 步长向量的支持。
推荐阅读
- javascript - 如何在反应js中按顺序计算嵌套数组中的多个对象
- redis - Kubernetes 中的 Redis 哨兵设置
- ios - 使用 diffable 数据源时如何处理空状态 - UICollectionViewDiffableDataSource?
- python - 在 colab 中跨细胞坚持 conda env
- c++ - 为什么不能读取文件(不显示数据)?
- python - 有没有办法在 PyTorch DataParallel 中处理与 batch_index 相关的数据
- python - 如何只打印 JSON 对象的一部分数据?
- c - osDelay() 等待时间不够
- google-apps-script - 带有 Bearer 令牌的 Google App 脚本 UrlFetchApp 但收到错误请求
- python - 如何根据具有外键关系的另一个模型更新 Django 模型的字段