FD 步骤与设计变量缩放比例之间的差异
difference between FD steps and scaling for the design variables
如果我有一个设计变量,其下限和上限分别为 0 和 1e6,初始值为 1e5
它肯定对默认的有限差分步骤 1e-6
非常不敏感
是克服这个问题的正确方法;
a) 改变 FD 步长f.e。到 5e4
b) 用 1e6 的 'scaler' 缩放设计变量,并将下限设置为 0 和 1,同时保持默认的 FD 步长。
如果您使用最新的 (OpenMDAO 2.x),我认为 "a" 是您最好的选择。
当您为组件中的特定导数调用 declare_partials
时,或者当您对组调用 approx_totals
时,您可以传入一个名为 "step" 的可选参数,其中包含所需的步长。由于您的变量跨越 [0, 1e6],我认为 1e1 和 1e3 之间的步长可能适合您。
想法"b"目前无法真正解决FD问题。您声明的步长应用于输入的未缩放值,因此您仍然会遇到相同的精度问题。两种缩放都是如此(1. 在 add_output 上指定,2. 在 add_design_var 上指定)。请注意,您可能仍然希望扩展此问题,因为优化器可能会更好地处理扩展问题。如果你这样做,你仍然应该声明上面提到的更大的 "step" 大小。
顺便说一句,另一种选择是通过将 "step_calc" 参数设置为 "rel",在 'fd' 计算中使用相对步长。这会将绝对步长转换为相对步长。不过这里不建议这样做,因为你的range包含0,接近0的时候步长回落到绝对1,防止太小。
如果我有一个设计变量,其下限和上限分别为 0 和 1e6,初始值为 1e5 它肯定对默认的有限差分步骤 1e-6
非常不敏感是克服这个问题的正确方法; a) 改变 FD 步长f.e。到 5e4 b) 用 1e6 的 'scaler' 缩放设计变量,并将下限设置为 0 和 1,同时保持默认的 FD 步长。
如果您使用最新的 (OpenMDAO 2.x),我认为 "a" 是您最好的选择。
当您为组件中的特定导数调用 declare_partials
时,或者当您对组调用 approx_totals
时,您可以传入一个名为 "step" 的可选参数,其中包含所需的步长。由于您的变量跨越 [0, 1e6],我认为 1e1 和 1e3 之间的步长可能适合您。
想法"b"目前无法真正解决FD问题。您声明的步长应用于输入的未缩放值,因此您仍然会遇到相同的精度问题。两种缩放都是如此(1. 在 add_output 上指定,2. 在 add_design_var 上指定)。请注意,您可能仍然希望扩展此问题,因为优化器可能会更好地处理扩展问题。如果你这样做,你仍然应该声明上面提到的更大的 "step" 大小。
顺便说一句,另一种选择是通过将 "step_calc" 参数设置为 "rel",在 'fd' 计算中使用相对步长。这会将绝对步长转换为相对步长。不过这里不建议这样做,因为你的range包含0,接近0的时候步长回落到绝对1,防止太小。