为什么在促销活动中产出得不到认可?

2024-06-16 10:42:54 发布

您现在位置:Python中文网/ 问答频道 /正文

对于抛物面示例(无约束),我正在尝试从“connect”更改为“promoted”,并收到输出错误。 在系统“”中找不到响应“parab.f xy”的输出。

请随意看一下下面的代码,我试图使它类似于“链接变量与提升vs.连接”中解释的主题。代码独立于已发布的抛物面组件。你知道吗

from openmdao.api import Problem, ScipyOptimizeDriver, IndepVarComp
from openmdao.core.explicitcomponent import ExplicitComponent

class Paraboloid(ExplicitComponent):
    def setup(self):
        self.add_input('x', val=0.0)
        self.add_input('y', val=0.0)
        self.add_output('f_xy', val=0.0)

        self.declare_partials('*', '*')
    def compute(self, inputs, outputs):
        x = inputs['x']
        y = inputs['y']
        outputs['f_xy'] = (x-3.0)**2 + x*y + (y+4.0)**2 - 3.0

    def compute_partials(self, inputs, partials):
        x = inputs['x']
        y = inputs['y']
        partials['f_xy', 'x'] = 2.0*x - 6.0 + y
        partials['f_xy', 'y'] = 2.0*y + 8.0 + x

# build the model
prob = Problem()
indeps = prob.model.add_subsystem('indeps', IndepVarComp(), promotes=['*'])
indeps.add_output('x', 3.0)
indeps.add_output('y', -4.0)

prob.model.add_subsystem('parab', Paraboloid(), promotes_inputs=['x','y'] , promotes_outputs=['f_xy'])

# setup the optimization
prob.driver = ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'SLSQP'

prob.model.add_design_var('indeps.x', lower=-50, upper=50)
prob.model.add_design_var('indeps.y', lower=-50, upper=50)
prob.model.add_objective('parab.f_xy')

prob.setup()
prob.run_driver()

Tags: selfaddoutputmodeldefsetupvaloutputs
1条回答
网友
1楼 · 发布于 2024-06-16 10:42:54

因为您从“parab”组件提升了“f\u xy”,所以您的目标现在应该命名为“f\u xy”而不是“parab.f\u xy”,并且因为您从“indeps”组件提升了“x”和“y”,所以您的设计变量应该命名为“x”和“y”,而不是“indeps.x”和“indeps.y”。你知道吗

相关问题 更多 >