OpenMDAO 中的函数缩放
Functions scaling in OpenMDAO
有什么方法可以在 OpenMDAO 中对设计 objectives/constraints 应用对数缩放?在我的优化问题中,我必须处理一个 objective 函数,它取大值并且在设计 space 中变化很大(在 10^6 和 10^7 之间),所以我理想情况下喜欢让驱动程序处理 objective 的日志。我现在直接修改了 objective 函数,但在驱动程序级别进行修改会更方便。这可能吗?
目前 openmdao 驱动程序不支持非线性缩放,通过组件实现是正确的方法。在过去,我有时会制作一个单独的“objective”组件,用于对原始 objective 应用一些转换。这使您可以在必要时将其放入模型中,而无需更改原始计算。
“修改组件”和“让 OpenMDAO 驱动程序 api 为您完成”之间的中间立场是使用 ExecComp。
prob.model.add_subsystem('log_scale', om.ExecComp('log_f = log(f)')
prob.model.connect('some_comp.f', 'log_scale.f')
prob.driver.add_objective('log_scale.log_f')
exec-comp 将为您处理该转换的导数。您所要做的就是将 objective 连接到 ExecComp 实例的正确输入。
有什么方法可以在 OpenMDAO 中对设计 objectives/constraints 应用对数缩放?在我的优化问题中,我必须处理一个 objective 函数,它取大值并且在设计 space 中变化很大(在 10^6 和 10^7 之间),所以我理想情况下喜欢让驱动程序处理 objective 的日志。我现在直接修改了 objective 函数,但在驱动程序级别进行修改会更方便。这可能吗?
目前 openmdao 驱动程序不支持非线性缩放,通过组件实现是正确的方法。在过去,我有时会制作一个单独的“objective”组件,用于对原始 objective 应用一些转换。这使您可以在必要时将其放入模型中,而无需更改原始计算。
“修改组件”和“让 OpenMDAO 驱动程序 api 为您完成”之间的中间立场是使用 ExecComp。
prob.model.add_subsystem('log_scale', om.ExecComp('log_f = log(f)')
prob.model.connect('some_comp.f', 'log_scale.f')
prob.driver.add_objective('log_scale.log_f')
exec-comp 将为您处理该转换的导数。您所要做的就是将 objective 连接到 ExecComp 实例的正确输入。