如果我的设计变量的下限和上限分别为0和1e6,且初始值为1e5 当然对默认的1e-6有限差分步长不敏感
是克服此问题的正确方法; a)更改FD步长f.e.至5e4 b)使用“缩放比例” 1e6缩放设计变量,并将下限上限设置为0和1,同时保持默认的FD步骤。
答案 0 :(得分:0)
如果您使用的是最新版本(OpenMDAO 2.x),我认为“ a”是最好的选择。
当您为组件中的特定派生类调用declare_partials
或在组中调用approx_totals
时,您可以传入一个称为“ step”的可选参数,该参数包含所需的stepsize。由于您的变量的范围为[0,1e6],因此我认为1e1和1e3之间的步长可能对您有用。
想法“ b”目前无法实际解决FD问题。您声明的步长将应用于输入的未缩放值,因此您仍然会遇到相同的精度问题。两种缩放都适用(1.在add_output上指定,2。在add_design_var上指定)。请注意,尽管如此,您仍然可能仍然希望解决此问题,因为优化程序可能会更好地解决已解决的问题。如果这样做,则仍应声明上述较大的“步长”大小。
顺便说一句,另一种选择是通过将“ step_calc”参数设置为“ rel”在“ fd”计算中使用相对步长。这将绝对步长变为相对步长。但是,我不建议您这样做,因为您的范围包括零,并且当它接近零时,步长会回落到绝对值一,以防止它变得太小。