OpenMDAO:是否有每个设计变量或 objective 函数的最佳大小来搜索设计 space?

OpenMDAO: Is there an optimum magnitude of each design variable or objective function to search design space?

我正在使用 SLSQP 优化器。 我记得在某处读到过 objective 函数或设计变量(或者两者之间的比率?)的最佳大小来搜索设计 space。 例如,如果我的 objective 函数大一个数量级,那么设计 space 中的跳跃似乎也大一个数量级。

如果这个跳跃太小,它可能会限制它搜索的设计数量 space,或者它可能需要很长时间才能到达某个点。但是,跳跃太大也不好。

如有任何帮助,我们将不胜感激。如果有什么不清楚的地方,请告诉我。 谢谢!

我不认为我们可以谈论最佳缩放比例。缩放只是将问题公式转换为更容易解决的问题的好方法。通常,缩放设计变量、约束和 objective 以提高优化器的收敛性是一种很好的做法。缩放 objective 和约束是有意义的,因为它们都出现在雅可比矩阵中。通常用初始值缩放是一个很好的猜测。如果您的初始值接近于零,这是有问题的,在这种情况下,选择其他一些合理的值或给定数量的限制值也可以。对于设计变量,下限和上限缩放为 0 和 1 也很常见。如果一切都在 1 的数量级以内,那很好。一些优化算法和非线性求解器也使用 objective 的值来猜测线搜索步骤。如果这不接近 1 的阶数,则线搜索可能需要更多步骤才能收敛(如果收敛)。

如果您使用有限差分来计算梯度,这也是缩放的第二个原因。如果设计变量具有高数量级,则它们的小有限差分可能只会导致 objective 上的变化不明显(或者变化被截断错误吞没)。例如,如果您的设计变量的长度为 10000 毫米,而您的有限差分步长为 0.001,则扰动变量将为 10000.001,这可能不会对您的 objective 产生太大影响。

一些外部代码采用有限浮点精度的输入文件,不正确的缩放可能导致有效数字没有变化,因此输出也没有变化。

OpenMAO 中的实现:

您可以在 OpenMDAO 中轻松缩放变量,方法是缩放幅度 (scaler)、偏移值 (adder),或设置两个将其缩放为 0 或 1 的参考值(refref0)。 scaler, adder, ref, ref0 的文档(包括优先级,如果你使用多个): http://openmdao.org/twodocs/versions/3.0.0/features/core_features/adding_desvars_objs_consts/index.html

您还可以缩放 OpenMDAO 中的所有其他变量以改进求解器的行为。有关 OpenMDAO 中缩放变量的更多信息: http://openmdao.org/twodocs/versions/3.0.0/theory_manual/scaling.html