是否可以设置初始值以用于优化?
Is it possible to set initial values to use in optimisation?
我目前正在使用 SQSLP,并像这样定义我的设计变量:
p.model.add_design_var('indeps.upperWeights', lower=np.array([1E-3, 1E-3, 1E-3]))
p.model.add_design_var('indeps.lowerWeights', upper=np.array([-1E-3, -1E-3, -1E-3]))
p.model.add_constraint('cl', equals=1)
p.model.add_objective('cd')
p.driver = om.ScipyOptimizeDriver()
但是,它坚持对两个变量都尝试 [1, 1, 1]。由于程序的结构,我无法在组件中使用 val=[...] 进行覆盖。
是否可以让优化器接受一些初始值,而不是尝试将没有默认值的任何值设置为 1?
默认情况下,OpenMDAO 将变量初始化为值 1.0(这往往会避免在初始化为零时意外被零除)。
在输入或输出上指定 shape=...
会导致变量值由 1.0
填充
指定 val=...
使用给定值作为默认值。
但这只是默认值。通常,当您 运行 优化时,您需要为手头的给定问题指定变量的初始值。这是在设置之后通过问题对象完成的。
问题中的 set_val
和 get_val
方法允许用户转换单位。 (这里以牛顿为例)
p.set_val('indeps.upperWeights', np.array([1E-3, 1E-3, 1E-3]), units='N')
p.set_val('indeps.upperWeights', np.array([-1E-3, -1E-3, -1E-3]), units='N')
有相应的 get_val
方法可以在优化后以所需的单位检索值。
您还可以像访问字典一样访问问题对象,尽管这样做会移除指定单位的能力(您会以其本机单位获取变量值)。
p['indeps.upperWeights'] = np.array([1E-3, 1E-3, 1E-3])
p['indeps.upperWeights'] = np.array([-1E-3, -1E-3, -1E-3])
我目前正在使用 SQSLP,并像这样定义我的设计变量:
p.model.add_design_var('indeps.upperWeights', lower=np.array([1E-3, 1E-3, 1E-3]))
p.model.add_design_var('indeps.lowerWeights', upper=np.array([-1E-3, -1E-3, -1E-3]))
p.model.add_constraint('cl', equals=1)
p.model.add_objective('cd')
p.driver = om.ScipyOptimizeDriver()
但是,它坚持对两个变量都尝试 [1, 1, 1]。由于程序的结构,我无法在组件中使用 val=[...] 进行覆盖。
是否可以让优化器接受一些初始值,而不是尝试将没有默认值的任何值设置为 1?
默认情况下,OpenMDAO 将变量初始化为值 1.0(这往往会避免在初始化为零时意外被零除)。
在输入或输出上指定
shape=...
会导致变量值由 1.0 填充
指定
val=...
使用给定值作为默认值。
但这只是默认值。通常,当您 运行 优化时,您需要为手头的给定问题指定变量的初始值。这是在设置之后通过问题对象完成的。
问题中的 set_val
和 get_val
方法允许用户转换单位。 (这里以牛顿为例)
p.set_val('indeps.upperWeights', np.array([1E-3, 1E-3, 1E-3]), units='N')
p.set_val('indeps.upperWeights', np.array([-1E-3, -1E-3, -1E-3]), units='N')
有相应的 get_val
方法可以在优化后以所需的单位检索值。
您还可以像访问字典一样访问问题对象,尽管这样做会移除指定单位的能力(您会以其本机单位获取变量值)。
p['indeps.upperWeights'] = np.array([1E-3, 1E-3, 1E-3])
p['indeps.upperWeights'] = np.array([-1E-3, -1E-3, -1E-3])